- くだすれDelphi(超初心者用)その56
695 :682[sage]:2016/02/20(土) 09:10:45.00 ID:Rukm7JjZ - スレチかもですがSQLiteでの検索について教えて下さい。
SQLite3SDWという郵便番号を検索するサンプルプログラムを参考に勉強して います。 例えば「北海道札幌市中央区」内の郵便番号を検索するために 「北海道札幌市中央」を検索すると検索結果が出てくるのですが、 「北海道札幌市中央区」を検索すると検索結果が0になってしまいます。 サンプルに付いていたexeファイルでは検索は正常に行われるみたいです。 私はXE2を使っているのですが、サンプルはDel7で作成されたと言う事が 原因なのか、検索文字列を作成するプログラムが以下のようになっているのですが、 procedure TForm1.LabeledEdit1Change(Sender: TObject); begin //WHERE区以降を引数にクエリする Query('[ADDRESS] LIKE ' + AnsiQuotedStr( '%' + UTF8Encode(LabeledEdit1.Text) + '%', '''')); end; 文字化けするので //WHERE区以降を引数にクエリする Query('[ADDRESS] LIKE ' + '"%' + LabeledEdit1.Text + '%"'); と変更しました。 わかりにくい文章ですが、よろしくお願いします。
|
- くだすれDelphi(超初心者用)その56
699 :682[sage]:2016/02/20(土) 22:02:59.83 ID:Rukm7JjZ - 682です。
>>696,697,698さん、レスありがとうございます。 一応、検出する部分のプログラムを載せます。 郵便番号のデータファイルはCVS形式になっていて、データベースに読む込む時は各行の 郵便番号と住所の部分をそれぞれUTF8Encodeで文字コードを変換してからデータベースに 登録しています。 サンプルの作者さんはDel7で作成していて、サンプルに付属しているexeファイルの実行では きちんと検出しているようなので、SQLiteの文字コードとXE2で扱っている文字コードの違い かとも思ったのですが、私にその辺の知識が乏しいのでよく分からない現状です。 後、サンプルに元々付いていたSQLite3.dllとかSQLite3.pasとかは新しいものに 入れ替えてもやってみました。 検出する部分を貼り付けたら改行が多いと言われたので、次のレスに貼り付けます。
|
- くだすれDelphi(超初心者用)その56
700 :682[sage]:2016/02/20(土) 22:04:05.15 ID:Rukm7JjZ - データを検出する部分のプログラムです。
procedure TForm1.Query(Filter: string); var SQLIteTable: TSQLIteTable; p: PPostRec; sql: string; StartTime: Cardinal; begin sql := 'SELECT * FROM POST_TABLE'; //引数Filterが空文字以外の場合はWHERE句を追加 if Filter <> '' then sql := sql + ' WHERE ' + Filter; SQLIteTable := SQLiteDB.GetTable(sql); with SQLIteTable do begin MoveFirst; while not EOF do begin New(p); //カラム名からデータを取得(どちらの方法でも可) p^.PostCode := FieldByName['POST_CODE']; p^.Address := FieldByName['ADDRESS']; VirtualList.Add(p); Next; end; end; SQLIteTable.Free; Memo1.Lines.Add('クエリ時間 = ' + IntToStr(GetTickCount - StartTime) + 'ms'); ListView1.Refresh; end; よろしくお願いします。
|