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文からレコードを取得する方法を知っておく必要があります。私はいくつかの行を取得し、それらを表示する必要があります。
「動作しない」正確には何? どのコンパイラと環境を使用していますか? BTW: 'sq3-dll'は有効なエントリではないので、2番目のサンプルは機能しません。 –
こんにちはSimon、私はちょうど私が行を挿入しようとしていることを示すために質問を変更しました。私もsq3-dllを変更しました。私はNetExpressを使用しています。ありがとうございました。 – user6948899
私は、それがはるかに良いことがわかります。エントリポイントはプログラムに存在しないため、無効です。リンクされたCチュートリアルによると、このエントリは記述的なメッセージでエラーが発生したときに呼び出されるため、リンクされた投稿から必要な部分をチッピングし、プログラムをコンパイルして実行し、表示される出力を提供することをお勧めします。 –