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");
}
}
補足
ご回答ありがとうございます。 カラム名は下記のとおりになります。 sqlite> .schema zip CREATE TABLE zip( pubcode INT -- 全国地方公共団体コード ,zip5 CHAR(5) -- (旧)郵便番号(5桁) ,zip7 CHAR(7) -- 郵便番号(7桁) ,pref_k TEXT -- 都道府県名カナ ,city_k TEXT -- 市区町村名カナ ,town_k TEXT -- 町域名カナ ,pref_j TEXT -- 都道府県名 ,city_j TEXT -- 市区町村名 ,town_j TEXT -- 町域名 ); sqlite> select * from zip limit 5; 13101100 1000000トウキョウトチヨダクイカニケイサイガナイバアイ東京都千代田区以下に掲載がない場合000000|||||||| 13101102 1020072トウキョウトチヨダクイイダバシ東京都千代田区飯田橋001000|||||||| 13101102 1020082トウキョウトチヨダクイチバンチョウ東京都千代田区一番町000000|||||||| 13101101 1010032トウキョウトチヨダクイワモトチョウ東京都千代田区岩本町001000|||||||| 13101101 1010047トウキョウトチヨダクウチカンダ東京都千代田区内神田001000|||||||| sqlite> select zip7 from zip limit 5; sqlite>