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

MAGICXPAでSQLを実行し、結果を取得する方法

コメント

22件のコメント

  • Pu

    こんにちはPuです。
    見当違いならごめんなさい。

    埋め込みSQLに記述して結果を出力パラメータで受け取れば良いのでは
    でわ~でわ~

     

  • iwasaki

    Puさん

    教えて頂き、ありがとうございます。
    埋め込みSQLの機能があるのを知りませんでした。

    なぜか、添付のSQLはno such column: WorkDateとなってしまい動きませんでしたが、

    別のSQLで動作検証したところ、結果を変数に格納することができました。
    とても助かりました。

  • iwasaki

    結果データベース:Memoryにしたら、添付のSQLも動きました。

  • Tanda

    iwasakiさん、

    添付のSQLというのは、SQLiteのことでしょうか?

  • iwasaki

    tandaさん

    添付のSQLというのは下記のSQL文のプログラムのことを示していたつもりでした。不明確で申し訳ありません。

    SELECT WorkDate 
    FROM WorkCalendar 
    WHERE WorkDate > '2025-02-26' AND IsWorkDay = 1
    ORDER BY WorkDate
    LIMIT 1 OFFSET 2; -- 3営業日後(0ベースのため2)

    結果データベースの部分を指定なしのまま、このSQL文をF7(実行)すると、下記のようなエラーとなり、実行できませんでした。

    結果データベースのをMemoryにしたら、エラーが発生せずに実行できました。(理由はよくわかっていません)





     

     

  • Tanda

    iwasakiさん、

    とくにSQL文を書く必要がなければ、Magicで普通にロジックを書くだけでも同じことができそうですけどね。そのほうがメンテナン性もいいと思いますが。

  • iwasaki

    tandaさん

    メンテナンス性を考えると、確かにその通りですね。

    Magic xpaのロジックについて、まだ分からないことが多いんですよね。

    ChatGPTにやりたいデータ操作を伝えると、SQL文を生成してくれるので、

    直接SQL文を使えると便利だなと思ったので質問しました。

  • Pu

    こんにちはPuです。

    Magicのメンテナンス性が高い機能の一つ!!クロスリファレンス
    埋め込みSQLだとクロスリファレンスに引っかかりませんので
    埋め込みSQL使用する時は、宣言=DだけでもMagicに記述した方が幸せになれます
    でわ~でわ~

  • Tanda

    iwasakiさん、

    インターネット上には、他の言語と比べてMagicに関する情報が少ないので、ChatGPTの回答は妥当でない場合が多いですよ。ChatGPTは「分かりません」という回答はしてきませんので、適当な回答をしれーっとしてくることが多いです。要注意ですね。

    ただし、MagicのHTMLマージに関してだけは、ChatGPTはとても頼りになります。Magic + ChatGPT で完璧なマージアプリが出来上がりますよ。

  • nkmt

    iwasakiさん こんにちは。

    Magicのプログラムであれば2件読み込んで結果取得と作るとすれば以下例です。

    子タスク等を作成し
    バッチ、照会、終了条件:COUNTER(0)=3
     メインソース WorkCalendar 
      WorkDate  範囲小 2025/2/26
      IsWorkDat 範囲小 1、範囲大 1
    レコード後
      項目更新 結果受取変数  式=WorkDate

    ※追記:日付順に並んでいる前提です。日付順インデックスが無ければ日付でソート

  • iwasaki

    Puさん

    ご提案ありがとうございます!

    宣言=D 知りませんでした

    クロスリファレンスもチュートリアルpdf(getting Started Magic Xpa だったかな?)以来使っていませんでした。ので改めて使ってみます。

    今後の開発に生かして行きます

  • iwasaki

    tandaさん
    ChatGPTの誤った情報には気をつけますね、アドバイスありがとうございます

    Magic xpa WebClient Serverがないので、もし社内で購入してもらえる見込みがあれば、HTMLマージを試してみようと思います。

  • iwasaki

    nkmtさん

    ご説明ありがとうございます

    非常に参考になります。

    sql文でいう OFFSET 2 の部分をMagicではどうするのかなと思っていたのですが、

    バッチ、照会、終了条件:COUNTER(0)=3 で取得するのですね。

    ご丁寧に教えていただき、ありがとうございます

  • nkmt

    子タスク等を作成し
    バッチ、照会、終了条件:Yes、後起き
     メインソース 無し
      照会リンク WorkCalendar  インデックス=日付順のインデックスを指定
        WorkDate  位置付け小 ADDDATE('2025/2/26'DATE,0,0,2)
        IsWorkDay  範囲小 1、範囲大 1
    レコード後
      項目更新 結果受取変数  式=WorkDate
    これでもいけると思います。

  • iwasaki

    nkmtさん

    日付加算の関数があるのですね

    範囲小 1、範囲大 1 の範囲設定も使ったことが無かったので参考になります。

     

     

  • vg

    3営業日ということであれば、照会リンク3段重ねとかでもよいかも?
    試していないですけど、
    WorkDateの範囲を変数にして、
    ・その変数を'2025/2/26'DATEで項目更新
    ・照会リンクの結果のWorkDate+1を変数に項目更新(1日目)
    ・照会リンクの結果のWorkDate+1を変数に項目更新(2回目)
    休日が続いたりするケースやカレンダーがないケースも考慮すると
    Puさんのおっしゃる宣言だけいれて、SQLにするほうが楽かもしれませんね

    ちなみに、SQLコマンドのエラーは往年の不具合だとおもいます
    Order byが入ったり副問い合わせがある場合、結果データベースがメモリにしないと
    変なSQLが発行されたりするという、v10くらいからあるのでそろそろなおってほしい・・・

  • iwasaki

    vgさん

    コメントありがとうございます。

    確かに、照会リンクを3回重ねる方法でも対応できそうですね。

     

    SQLのエラーについて、昔からの不具合とのことで
    ヘルプページをさっと読んでみて、原因がはっきりせずだったのですが、不具合の可能性が高いのですね。
    ORDER BY やサブクエリが絡むと意図しないSQLが発行されるのは厄介ですね…。

    貴重な情報、ありがとうございます!

  • nkmt

    vgさん iwasakiさん こんにちは。
    SQLコマンドの結果データベースは、メモリ以外使った事がありませんでした。
    それで困っておりませんが、他を指定するのもいいのでしょうか?

  • Pu

    nkmtさんこんにちはPuです
    自分も結果データベースはメモリ以外使った事ないです。
    他を指定するメリットが見当たりません、自分も知りたいです。
    でわ~でわ~

  • nkmt

    Puさん皆さんこんにちは。
    SQLコマンドのデメリットも理解していますが、
    それを上回るメリットを感じていますので
    請求年月別
     請求締件数、請求書 要提出件数表示や
    担当者別 売上粗利集計表示 など
    集計系は特にSQLコマンドを多用するようになりました。
    ある方にこんなのも便利だよと教えて頂き、それから使うようになって8年ぐらいだと思います。

  • vg

    ビュー事前読み込みをしないとかの条件はありますが、
    結果データベースを、例えばoracleにしているとoracle上に実テーブルができるので
    行単位でフェッチでき、件数が多い時は初期表示が早くなります
    メモリはデータをメモリに移す都合、全レコードを読み込んでからなので
    読み込んでからは早いのですけど、初期表示が件数が多いと表示に時間がかかってしまいます

  • nkmt

    vgさん 貴重な体験談を教えて頂きありがとうございます。
    勉強になりました。

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