メインコンテンツへスキップ

MYSQL AUTO_INCREMENTの数値を取得したい

コメント

7件のコメント

  • Tanda

    daiさん、

    Auto_Incrementで得た値をサブタスクにパラメータで渡して、サブタスクのデータビューで代入してやればいいと思いますが、できませんか?

  • dai

    Tandaさん、いつもありがとうございます。

    データ書き込みはmagicのリンク書込で行っておりAuto_Incrementカラムには新規の場合Nullを渡してMYSQLが自動採番しますのでAuto_Incrementで得た値をmagicに取得する方法がわかりません。

    magic   MYSQL(ODBC)   magic
    Null  → Auto_Increment → Auto_Incrementで得た値

    SQLExecute関数でSELECT LAST_INSERT_ID()を実行して取得できないか試してみましたが
    できませんでした。やり方が悪いのかそもそもできないのかもわからず質問させて頂きました。

  • Tanda

    daiさん、

    SQL Serverの場合は、カラム特性の「SQL/タイプ」の欄に「INT IDENTITY」と記述すればいけるのですが、MySQLの場合はそこに「INT AUTO_INCREMENT」と書いて行けるかどうかは、試してみないと分からないですね。とくに、ODBC経由の場合でも行けるかどうかは。。。

  • dai

    Tandaさん
    ありがとうございます。

    どうにかしてできる気はするのですが、もう少し色々やってみようと思います。

  • dai

    色々試してみた結果下記の流れであればAUTO_INCREMENTされた値を取得し明細ファイルにも書き込むことができましたのでご報告致します。

    ①表紙ファイルのリンク書き込み
    ②タスク後処理でアクション 式:SQLExecute('LocalMYSQLDatabase','SELECT LAST_INSERT_ID()','〇'VAR)を実行し変数に値を入れる
    ③タスク後処理、明細ファイル書き込みリンクコールしアクションで取得された値が入った変数を書き込み

    レコード後処理でLAST_INSERT_IDを実行しても前回取得されたIDが返ってきていたのでタスク後処理が正しい位置と判断しました。

    親タスクと子タスクどちらもCONNECTION_IDでトランザクションIDを取得してみましたが同じトランザクションIDが画面に表示はされたのでトランザクションは継続しているかと思います(ODBC経由なのではっきりしませんが)

    この流れで他PCで同時登録処理を実行してみて検証したいと思います。

    ありがとうございました。

  • Tanda

    daiさん、

    ちなみに、連番でなくてもよくて、ユニークな数値を取得したいだけでしたら、Magic自身が自動生成する「コンテキストID」を使用することもできますよ。これは伝票番号を振ったりする場合にも大変重宝します。

    CtxGetId()関数で簡単に取得できます。

  • dai

    Tandaさん

    なんと、magicでも自動生成が可能だったんですね。

    今まで伝票NOを端末NOで分けて管理してましたがなんか古いなぁと思いAUTO_INCREMENTを考えてました。コンテキストIDも調べてみたいと思います。

    お時間割いて頂きありがとうございました。

サインインしてコメントを残してください。