MYSQL AUTO_INCREMENTの数値を取得したい
お世話になっております。
現在開発中のシステムでMagicxpa→ODBC経由でMYSQLを使用しています。そこで質問なんですが
受注表紙ファイル
1.受注伝票NO [PK,AUTO_INCREMENT]
2.受注日付
受注明細ファイル
1.受注明細ID [PK,AUTO_INCREMENT]
2.受注伝票NO
3.行数
という構成なんですがデータ書き込み時に受注表紙ファイルの
AUTO_INCREMENTにより自動採番された数値を受注明細ファイルの
受注伝票NOにも書き込みたいのですがMYSQL側で自動採番された数値を
Magic側に取得したりできますでしょうか。
--------------------------------------------------------------------
受注表紙ファイル 受注明細ファイル
1.受注伝票NO → 2.受注伝票NO
---------------------------------------------------------------------
表紙ファイル作成後にリンク降順で取得するとできるかもしれませんが
システムを複数人で使用するため受注伝票NOの入れ違いが発生する可能性を
なくしたいです。
何か方法ありましたら宜しくお願い致します。
-
daiさん、
Auto_Incrementで得た値をサブタスクにパラメータで渡して、サブタスクのデータビューで代入してやればいいと思いますが、できませんか?
-
Tandaさん、いつもありがとうございます。
データ書き込みはmagicのリンク書込で行っておりAuto_Incrementカラムには新規の場合Nullを渡してMYSQLが自動採番しますのでAuto_Incrementで得た値をmagicに取得する方法がわかりません。
magic MYSQL(ODBC) magic
Null → Auto_Increment → Auto_Incrementで得た値SQLExecute関数でSELECT LAST_INSERT_ID()を実行して取得できないか試してみましたが
できませんでした。やり方が悪いのかそもそもできないのかもわからず質問させて頂きました。 -
daiさん、
SQL Serverの場合は、カラム特性の「SQL/タイプ」の欄に「INT IDENTITY」と記述すればいけるのですが、MySQLの場合はそこに「INT AUTO_INCREMENT」と書いて行けるかどうかは、試してみないと分からないですね。とくに、ODBC経由の場合でも行けるかどうかは。。。
-
Tandaさん
ありがとうございます。どうにかしてできる気はするのですが、もう少し色々やってみようと思います。
-
色々試してみた結果下記の流れであればAUTO_INCREMENTされた値を取得し明細ファイルにも書き込むことができましたのでご報告致します。
①表紙ファイルのリンク書き込み
②タスク後処理でアクション 式:SQLExecute('LocalMYSQLDatabase','SELECT LAST_INSERT_ID()','〇'VAR)を実行し変数に値を入れる
③タスク後処理、明細ファイル書き込みリンクコールしアクションで取得された値が入った変数を書き込みレコード後処理でLAST_INSERT_IDを実行しても前回取得されたIDが返ってきていたのでタスク後処理が正しい位置と判断しました。
親タスクと子タスクどちらもCONNECTION_IDでトランザクションIDを取得してみましたが同じトランザクションIDが画面に表示はされたのでトランザクションは継続しているかと思います(ODBC経由なのではっきりしませんが)
この流れで他PCで同時登録処理を実行してみて検証したいと思います。
ありがとうございました。
-
daiさん、
ちなみに、連番でなくてもよくて、ユニークな数値を取得したいだけでしたら、Magic自身が自動生成する「コンテキストID」を使用することもできますよ。これは伝票番号を振ったりする場合にも大変重宝します。
CtxGetId()関数で簡単に取得できます。
-
Tandaさん
なんと、magicでも自動生成が可能だったんですね。
今まで伝票NOを端末NOで分けて管理してましたがなんか古いなぁと思いAUTO_INCREMENTを考えてました。コンテキストIDも調べてみたいと思います。
お時間割いて頂きありがとうございました。
サインインしてコメントを残してください。
コメント
7件のコメント