'da SQLite geri çağırma nasıl yazılır COBOL programlayıcım ve en son projem bir SQLite3 veritabanına bir COBOL uygulaması bağlamaktır.COBOL
Ben this guide takip etmekte ve onların çözüm benim COBOL uygulamasında gerekir tam olarak ne olduğunu. Veritabanını oluşturmayı, eklemeyi, veri eklemeyi ve veritabanını kapatmayı başarabildim ancak veri tabanından veri seçmeye çalıştığımda sorun ortaya çıkıyor.
Öğreticide, çift işaretli bir geri arama kullanırlar.
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
WORKING-STORAGE SECTION.
*----------------------------------------------------------------*
01 sqlite3-db pointer.
01 err_msg pointer.
01 sqlite pointer.
01 res pointer.
01 notused pointer.
01 argc pic 99 comp-5.
01 argv pointer.
01 azColName pointer.
01 Writefunction-Ptr procedure-pointer.
procedure division.
set Writefunction-Ptr to entry "sqlite-callback".
*>Random code.
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
*>Random code.
stop run.
entry "sqlite-callback" using
by value notused
by value argc
by reference argv
by reference azColName.
display argc
goback.
Entry-Termination.
o veritabanından döndürülen satır sayısı denir ve tamsayı argc sütun sayısı içerdiğinden arama çalışır
takip ediyor COBOL Çözümümün tablo içerir.
sorular geçerli: COBOL
Çift işaretçiler, nasıl temsil ettikleri nelerdir? Çözümümde bir işaretçi beyan ediyorum ve geri bildirimi "işaretçi" ile "referans olarak" arayın. COBOL'da çift işaretçiyi temsil etmenin doğru yolu olup olmadığını bilmiyor musunuz?
nasıl azColName ve argv içeriğini görüntülemek yoktur ve değil sadece bellek adresi işaretçi noktaları?
Şimdi OF ADRESİ kullanmaya çalıştı Hove, ama yine de işe almak istemezsin. Kaçırdığım bir şey olmalı.
WORKING-STORAGE SECTION.
01 argv pointer.
Linkage Section.
01 link-area pic x.
procedure division using link-area.
*> RANDOM CODE
set address of link-area to argv
call "sqlite3_exec" using
by value sqlite3-db
by reference z"SELECT * FROM Cars"
by value Writefunction-Ptr
by value 0
by reference err_msg
returning rc
end-call
*> RANDOM CODE
entry "sqlite-callback" using
by value notused
by value argc
by reference argv
by reference azColName.
display argc.
if address of link-area not = null
display "Contents of new argv: " link-area
else
display "empty"
end-if
goback.
Entry-Termination.
alıyorum sonuç ise ifadesi her zaman yanlış olduğunu, bu nedenle dize "boş" görüntülenir: Şu anda benim çözüm gibi görünüyor. Fakat yine de argc, tablodaki sütun sayısına ayarlanır.
çalışma çözeltisi: Biz gerçekten kullandığınız derleyici bilmek gerekir
WORKING-STORAGE SECTION.
01 argv.
03 firstColumn pointer.
03 secondColumn pointer.
03 thirdColumn pointer.
01 azColName pointer.
01 argc pic 99 comp-5.
01 notused pointer.
01 Writefunction-Ptr procedure-pointer.
*-----------------------------------------------------------------
Linkage Section.
01 Cars_Id pic 9(2).
01 Cars_Name pic X(20).
01 Cars_Price pic 9(10).
/-----------------------------------------------------------------
procedure division.
//code
set Writefunction-Ptr to entry "sqlite-callback".
initialize sqlQuery
move z"SELECT * FROM Cars;" 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
//code
stop run.
entry "sqlite-callback" using
by value notused
by value argc
by reference argv
by reference azColName.
set address of Cars_Id to firstColumn
set address of Cars_Name to secondColumn
set address of Cars_Price to thirdColumn
display Cars_Id "|" Cars_Name "|" Cars_Price
goback.
Entry-Termination.
Hangi COBOL kullanıyorsunuz? LINKAGE SECTION olmadan derleme yapar mı? İmlecinizi, x'in LINKAGE SECTION bölümünde tanımlandığı ve istediğiniz boyut ve tür olduğu SET ADDRESS OF x işaretine bir göz atın. Bu, işaretçi tarafından işaret edilen verilere erişmenizi sağlar. –
Marcus bir MicroFocus ServerExpress derleyicisi kullanıyor. – Anders