BCBでSQLite
下記のサイトを参考にさせて頂き、BCB5を使用してSQLite3を操作しようと格闘中です。
自分のレベル的には初心者を脱しようかといったところだと思います。
http://members.jcom.home.ne.jp/komina/wiki/4243422F53514C69746533A4F2BBEEA4B9.html
TEdit1一つに郵便番号7桁を入力して、Button1クリックで該当する住所を検索してMemo1に表示するものですが、コンパイルエラーになってしまい対処法がわかりません。
ちなみにそこで紹介されている、ライブラリをリンクするのが上手くいきませんで
sqlite3.cをプロジェクトに追加してメイクしました。
また、文字コードをUTF-8に変換するというのが別サイトにも書かれていました
エラー内容は、
E2034 'int(*(_closure))(void *,int,char**,char**))(void*,int char**,char**)'型は'int(*)(void*,int,char**,char**)'型に変換できない。
E2342 パラメータ'callback'はint(*)(void*,int,char**,char**)型として定義されているのでvoidは渡せない
以下、ソース抜粋です。宜しくご教授お願いいたします。
int TFmMain::callback(void* arg,int argc,char** argv,char** column){
AnsiString addr1=argv[0];
AnsiString addr2=argv[1];
AnsiString addr3=argv[2];
add_message(addr1+addr2+addr3);
return SQLITE_OK;
}
void __fastcall TFmMain::Button1Click(TObject *Sender)
{
sqlite3* db;
if(sqlite3_open("DBTEST1.db",&db)==SQLITE_OK){
add_message("DB open");
int rtn;
char* sql;
sql=sqlite3_mprintf("SELECT ADDR1,ADDR2,ADDR3 FROM ZIP WHERE ZIP=%d"
,StrToInt(Edit1->Text));
add_message(sql);
rtn=sqlite3_exec(db,sql,callback,NULL,NULL); <<< ここでエラー発生!!
if(rtn!=SQLITE_OK){
add_message("COMMAND err");
}
sqlite3_free(sql);
sqlite3_close(db);
add_message("DB close");
}else{
add_message("DB open err");
}
}
お礼
返答ありがとうございます INTERSECTというのを初めて知りました 今から試してみます。 今後もおねがいします