2016-10-10 49 views
1

私はCOBOLの開発者であり、SQLite DBに接続する必要があります。私はNetExpressを使用しています。 私はこれを見たことがありますguideとこれもpostしかし、私は前のステップが必要です。私はこれらのc呼び出しをCOBOLに渡す方法を知らない。 ガイドは、と説明:私は2列(text型)を用いて一つのテーブル 'タブラ' と、データベース 'test.dbという' がCOBOLからSQLiteを使用する方法

sqlite3_open("test.db", &db) 

sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 

。 私はオープン/挿入/選択のために、このCOBOL溶液で試してみました:

* 
    *----------------------------------------------------------------* 
    *                * 
    *                * 
    *                * 
    * SYSTEM               * 
    *                * 
    * PROGRAM-ID Pxxxxxx 
    *                * 
    * AUTHOR               * 
    *                * 
    * DATE   10/2016           * 
    *                * 
    *                * 
    *                * 
    *                * 
    *----------------------------------------------------------------* 
    *                * 
    *                * 
    *                * 
    *----------------------------------------------------------------* 
    IDENTIFICATION DIVISION. 
    PROGRAM-ID. Pxxxxxx. 

    ENVIRONMENT DIVISION. 
    CONFIGURATION SECTION. 

    /----------------------------------------------------------------* 
    INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 

    *----------------------------------------------------------------* 



    /----------------------------------------------------------------* 
    DATA DIVISION. 
    FILE SECTION. 
    *----------------------------------------------------------------* 

    /----------------------------------------------------------------* 
    WORKING-STORAGE SECTION. 
    *----------------------------------------------------------------* 



    01 proc-ptr usage procedure-pointer. 


    01 sqlite3-db   pointer. 

    01 err-msg   pointer. 
    01 sqlite    pointer. 
    01 res    pointer. 



    01 rc     pic 9 comp-5. 
    01 dbName    pic x(08). 






    01 sqlQuery  pic x(100). 

    01 result   pic x(100). 
    01 argv. 
     03 firstColumn pointer. 
     03 secondColumn pointer. 

    01 azColName   pointer. 
    01 argc    pic 99 comp-5. 
    01 notused   pointer. 

    01 Writefunction-Ptr procedure-pointer. 


    01 PERSON-POST. 
     03 NAMN  PIC X(60). 
     03 AGE  PIC 9(3). 
     03 ADRESS PIC X(100). 
     03 TELNR PIC X(20). 
    01 Column-Id  pic X(3). 
    01 Column-Name  pic X(20). 



    *----------------------------------------------------------------- 
    Linkage Section. 





    /----------------------------------------------------------------- 
    procedure division. 
    *----------------------------------------------------------------- 

    * 
      set proc-ptr to entry "sqlite3.dll" 

      display sqlQuery 


      set sqlite3-db to null 
      set err-msg to null 
      set res  to null 

      move z"test.db" to dbName 

      display "Running sqlite3_open" 

      call "sqlite3_open" using 
        by reference z"test.db" 
        by reference sqlite3-db 
        returning  rc 
      end-call 


      if rc not = zero 
       display "error opening database." 

      else 
       display "database opened." 

      end-if 


      move "INSERT INTO tabla VALUES ('020', '8855');" 
       to sqlQuery 

      initialize Column-Id 
      initialize Column-Name 





    * 
    * 
    * 
      call "sqlite3_exec" using 
       by value sqlite3-db 
       by reference sqlQuery 
       by value  0 
       by value  0 
       by reference err-msg 
       returning rc 
      end-call 


      set Writefunction-Ptr to entry "sqlite-callback". 

      initialize sqlQuery 
      move "SELECT * FROM tabla;" to sqlQuery 


      call "sqlite3_exec" using 
      by value sqlite3-db 
      by reference sqlQuery 
      by value Writefunction-Ptr 
      by value 0 
      by reference err-msg 
      returning rc 
      end-call 
    * 
      entry "sqlite-callback" using 
      by value notused 
      by value argc 
      by reference argv 
      by reference azColName. 

    * how to get column1 
    * how to get column2 


     display Column-Id "|" Column-Name 

    * 


      call "sqlite3_close" using 
        by reference sqlite3-db 
      end-call 

      display "sqlite3_close" 

    . 

    *---------------------------------------------------------------- 
    stop run. 


    Entry-Termination. 

、オープン&挿入は正常に動作しているが、私は、Select文からレコードを取得する方法を知っておく必要があります。私はいくつかの行を取得し、それらを表示する必要があります。

+0

「動作しない」正確には何? どのコンパイラと環境を使用していますか? BTW: 'sq3-dll'は有効なエントリではないので、2番目のサンプルは機能しません。 –

+0

こんにちはSimon、私はちょうど私が行を挿入しようとしていることを示すために質問を変更しました。私もsq3-dllを変更しました。私はNetExpressを使用しています。ありがとうございました。 – user6948899

+0

私は、それがはるかに良いことがわかります。エントリポイントはプログラムに存在しないため、無効です。リンクされたCチュートリアルによると、このエントリは記述的なメッセージでエラーが発生したときに呼び出されるため、リンクされた投稿から必要な部分をチッピングし、プログラムをコンパイルして実行し、表示される出力を提供することをお勧めします。 –

答えて

0

は最後に、これは、インサート/ Net Expressの中近い/選択/開くためのコードです:

* 
    *----------------------------------------------------------------* 
    *                * 
    *                * 
    *                * 
    * SYSTEM               * 
    *                * 
    * PROGRAM-ID Pxxxxxx 
    *                * 
    * AUTHOR               * 
    *                * 
    * DATE   10/2016           * 
    *                * 
    *                * 
    *                * 
    *                * 
    *----------------------------------------------------------------* 
    *                * 
    *                * 
    *                * 
    *----------------------------------------------------------------* 
    IDENTIFICATION DIVISION. 
    PROGRAM-ID. Pxxxxx. 

    ENVIRONMENT DIVISION. 
    CONFIGURATION SECTION. 

    /----------------------------------------------------------------* 
    INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 

    *----------------------------------------------------------------* 



    /----------------------------------------------------------------* 
    DATA DIVISION. 
    FILE SECTION. 
    *----------------------------------------------------------------* 

    /----------------------------------------------------------------* 
    WORKING-STORAGE SECTION. 
    *----------------------------------------------------------------* 



    01 proc-ptr usage procedure-pointer. 


    01 sqlite3-db   pointer. 

    01 err-msg   pointer. 
    01 sqlite    pointer. 
    01 res    pointer. 



    01 rc     pic 9 comp-5. 
    01 dbName    pic x(08). 






    01 sqlQuery  pic x(100). 

    01 result   pic x(100). 
    01 argv. 
     03 firstColumn pointer. 
     03 secondColumn pointer. 

    01 azColName   pointer. 
    01 argc    pic 99 comp-5. 
    01 notused   pointer. 

    01 Writefunction-Ptr procedure-pointer. 







    *----------------------------------------------------------------- 
    Local-storage Section. 
    Linkage Section. 
    01 Column-Id  pic X(3). 
    01 Column-Name  pic X(20). 





    /----------------------------------------------------------------- 
    procedure division. 
    *----------------------------------------------------------------- 

    * 
      set proc-ptr to entry "sqlite3.dll" 

      display sqlQuery 


      set sqlite3-db to null 
      set err-msg to null 
      set res  to null 

      move z"test.db" to dbName 

      display "Running sqlite3_open" 

      call "sqlite3_open" using 
        by reference z"test.db" 
        by reference sqlite3-db 
        returning  rc 
      end-call 


      if rc not = zero 
       display "error opening database." 

      else 
       display "database opened." 

      end-if 


      move "INSERT INTO tabla VALUES ('002', '8855');" 
       to sqlQuery 
    * 
    * 
    * 
      call "sqlite3_exec" using 
       by value sqlite3-db 
       by reference sqlQuery 
       by value  0 
       by value  0 
       by reference err-msg 
       returning rc 
      end-call 
    * 
     set Writefunction-Ptr to entry "sqlite-callback". 

      initialize sqlQuery 
      move "SELECT * FROM tabla;" to sqlQuery 


      call "sqlite3_exec" using 
      by value sqlite3-db 
      by reference sqlQuery 
      by value Writefunction-Ptr 
      by value 0 
      by reference err-msg 
      returning rc 
      end-call 

      call "sqlite3_close" using 
        by reference sqlite3-db 
      end-call 

      display "sqlite3_close" 

      . 
    * ------------------------------------------------------- 
    stop run. 
     entry "sqlite-callback" 
     using 
      by value notused 
      by value argc 
      by reference argv 
      by reference azColName. 

     set address of Column-Id to firstColumn 
     set address of Column-Name to secondColumn 

     display Column-id "|" Column-Name 
     goback. 
    Entry-Termination. 
関連する問題