喫茶XRAYトップページ

[▲前のスレッド]

[10798] SQLiteの文字列のデータ型返信 削除
2017/2/15 (水) 19:32:41 Mr.XRAY
当サイトの Zeoslib で SQLite データベース接続のサンプルで使用している
データベースのファイルについてです.

Zeoslib で使用している時は問題ないのですが,
添付のデータベースのファイルを FireDAC で SQLite に接続すると
日本語が表示されません.
文字列の型を VARCHAR(30) のような定義から TEXT(30) のように変更して
ください.

FireDAC で SQLite に接続した時に,添付のデータベースの日本語が
表示されないという報告がありました.
データとしては格納されています.

Zeoslib て接続する時は VARCHAR(30) のようにな書式でないと
正しく表示されません.


[10799] Re:SQLiteの文字列のデータ型返信 削除
2017/2/15 (水) 19:45:17 Mr.XRAY
> FireDAC で SQLite に接続した時に,添付のデータベースの日本語が
> 表示されないという報告がありました.


こういうのって,嬉しいけど,ちょっと複雑な気持ちです.ハイ.


[10800] Re:SQLiteの文字列のデータ型返信 削除
2017/2/15 (水) 20:46:49 igy
▼ Mr.XRAYさん
> 当サイトの Zeoslib で SQLite データベース接続のサンプルで使用している
> データベースのファイルについてです.
>
> Zeoslib で使用している時は問題ないのですが,
> 添付のデータベースのファイルを FireDAC で SQLite に接続すると
> 日本語が表示されません.


こちらで試したところ、

サンプルの AddressBook_A.db3 に接続し、DBGridで、
select * from AddressTBL
の結果を表示したところ、
・Delphi XE + ZeosLib 7.1.4
・Delphi XE + Unidac 6.4.16
・Delphi 10.1 Berlin + FireDAC
・Delphi 10.1 Berlin + dbExpress

いずれも、きちんと日本語が表示されました。
SQLite 3.17.0
(ただし、FireDACだけは、静的リンクで SQLite 3.9.2)

なお、
・Delphi 10.1 Berlin + FireDAC
では、FDConnectionで、
  Params.Values['StringFormat'] := 'Unicode'
を指定しています。



[10801] Re2:SQLiteの文字列のデータ型返信 削除
2017/2/15 (水) 23:00:44 Mr.XRAY
▼ igyさん,どうもです.

> では、FDConnectionで、
>   Params.Values['StringFormat'] := 'Unicode'
> を指定しています。


私も気になるので自分でもやってみました.
やっている途中で, jgy さんのこの書き込み読みました.ハハハッ.
この設定をしないと確かに日本語が表示されませんね.なるほど.
ありがとうございます.

FireDAC を使用すると簡単なんですね.
Delphi XE5 をインストールしていてよかった ... (^^;
Pro 版で FireDAC が使えるのは Delphi XE5 からなんですよね.


[10802] Re3:SQLiteの文字列のデータ型返信 削除
2017/2/15 (水) 23:10:04 Mr.XRAY
> やっている途中で, jgy さんのこの書き込み読みました.ハハハッ.
> この設定をしないと確かに日本語が表示されませんね.なるほど.
> ありがとうございます.
>
> FireDAC を使用すると簡単なんですね.
> Delphi XE5 をインストールしていてよかった ... (^^;


他の方の参考にコードと結果を掲載しておきます.
動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Prp です.
コードはほとんどオンラインヘルプの丸写しですが...


procedure TForm1.Button1Click(Sender: TObject);
var
  LDBFileName : string;
  LTableName  : string;
begin
  FDConnection1.Connected := False;

  LDBFileName := ExpandFileName('..\AddressBook_A.db3');
  LTableName  := 'AddressTBL';

  FDConnection1.LoginPrompt := False;

  FDConnection1.Params.Clear;
  FDConnection1.Params.Add('DriverID=SQLite');
  FDConnection1.Params.Add('Database=' + LDBFileName);
  FDConnection1.Params.Add('StringFormat= Unicode');

  FDPhysSQLiteDriverLink1.VendorLib := ExpandFileName('..\sqlite3.dll');

  FDQuery1.Close;
  FDQuery1.Connection := FDConnection1;

  FDQuery1.SQL.Clear;
  FDQuery1.SQL.Add('select * from ' + LTableName);

  FDQuery1.Open;

  DBGrid1.Columns[0].Width := 30;
  DBGrid1.Columns[1].Width := 100;
  DBGrid1.Columns[2].Width := 70;
end;




[10803] Re4:SQLiteの文字列のデータ型返信 削除
2017/2/15 (水) 23:33:01 igy
▼ Mr.XRAYさん


Delphi XE5 でしたら、静的リンクの SQLite のバージョンは 3.7.17 みたいですね。

DelphiのFireDACでのSQLiteを高速化
http://labo.ysreading.co.jp/2016/05/27/delphi%E3%81%AEfiredac%E3%81%A7%E3%81%AEsqlite%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96/

おそらく
>   FDPhysSQLiteDriverLink1.VendorLib := ExpandFileName('..\sqlite3.dll');
これ指定しなくても(sqlite3.dllなしでも)、動作しそうです。
# 動的リンクの設定しないと、VendorLibにdllを指定しても、有効にならなさそうです。




[10804] Re5:SQLiteの文字列のデータ型返信 削除
2017/2/16 (木) 08:27:31 Mr.XRAY
▼ igyさん
 
> Delphi XE5 でしたら、静的リンクの SQLite のバージョンは 3.7.17 みたいですね。
>
> DelphiのFireDACでのSQLiteを高速化
> http://labo.ysreading.co.jp/2016/05/27/delphi%E3%81%AEfiredac%E3%81%A7%E3%81%AEsqlite%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96/
>
> おそらく
> >   FDPhysSQLiteDriverLink1.VendorLib := ExpandFileName('..\sqlite3.dll');
> これ指定しなくても(sqlite3.dllなしでも)、動作しそうです。
> # 動的リンクの設定しないと、VendorLibにdllを指定しても、有効にならなさそうです。


おおっ,確かに.FireDAC すごいですね.
バージョンを調べるコードやってみました.
上が Delphi XE5(UP2) です.
下が Zeoslib の記事を書いた時にダウンロードした SQLite です.

オンラインヘルプとか,ググってみたら,FireDAC はかなりの機能がありますね.
TFDDataMove, TFDBatchMoveXXX とかも...



[10806] Re6:SQLiteの文字列のデータ型返信 削除
2017/2/16 (木) 08:53:22 igy
▼ Mr.XRAYさん
> オンラインヘルプとか,ググってみたら,FireDAC はかなりの機能がありますね.
> TFDDataMove, TFDBatchMoveXXX とかも...


ですね。

C++Builder のコードですが、毛利さんも

C++Builder FireDAC, TFDBatchMoveを使いデータセットをコピーする方法[JAPAN]
https://community.embarcadero.com/blogs/entry/c-builder-firedac-tfdbatchmove

を書かれてたり・・
 

[10807] Re7:SQLiteの文字列のデータ型返信 削除
2017/2/16 (木) 09:56:41 Mr.XRAY
▼ igyさん

> C++Builder のコードですが、毛利さんも
>
> C++Builder FireDAC, TFDBatchMoveを使いデータセットをコピーする方法[JAPAN]
> https://community.embarcadero.com/blogs/entry/c-builder-firedac-tfdbatchmove


なるほど.
サンプルのフォルダみたら,FireDAC のサンプルがいっぱいあるんですね.
この TFDdataMove, TFDBatch のサンプルもあり,
これって,テキストファイルも扱えるんてすね.
サンプルのコードみたら,えらいシンプルでした.

最近エンバカデロのフォーラムで質問があった CSV なんかシンプルなコードで
実現しそうです.

SQLite のサンプルがあったのでやってみました.
画像を読み込むやつです.その名もずばり TFDSQLiteXXXX.
分かりやすいコンポ名です.



[10812] Re8:SQLiteの文字列のデータ型返信 削除
2017/2/16 (木) 23:03:04 Mr.XRAY
折角ですので,SQLite のバージョン取得と
FireDAC を使用して SQLite に接続するサンプルを,以下に追加しておきました.
このページの主題は ZeoslLIb なのですが,SQLite つながりということで.

ページのタイトルは Delphi 10.1 Berlin Starter となっていますが,
内容は ZeosLib に関するものです.
Delphi 10.1 Berlin Starter でもデータベースが使えるということを強調したかったので.

[566_Delphi 10.1 Berlin Starter で SQLite データベース]
http://mrxray.on.coocan.jp/Delphi/plSamples/566_ZeosLib_SQLite_DelphiBerlin.htm


[10814] Re9:SQLiteの文字列のデータ型返信 削除
2017/2/17 (金) 00:29:54 igy
▼ Mr.XRAYさん
> 折角ですので,SQLite のバージョン取得と

最初に書いとけばよかったのですが、
クライアントとサーバのバージョンは、

ZeosLibでは、ZConnectionに
ClientVersionStrプロパティ
ServerVersionStrプロパティ
があり、

FireDACでは、
var
    oMetaIntf: IFDPhysConnectionMetadata;
begin
    oMetaIntf := FDConnection1.ConnectionMetaDataIntf;
    try
        //oMetaIntf.ClientVersion
        //oMetaIntf.ServerVersion
    finally
        oMetaIntf:= nil;
    end;
end;

みたいな感じでも、取得できたりします。
(SQLite以外でも取得したい場合は、こちらが便利かもですね!)



[10815] Re10:SQLiteの文字列のデータ型返信 削除
2017/2/17 (金) 09:44:47 Mr.XRAY
▼ igyさん

> 最初に書いとけばよかったのですが、
> クライアントとサーバのバージョンは、


とんでもありません.情報をいただいただけでも感謝です.
というわけで,またまた遠慮なく追加させていただきました (^^;


[10816] SQLiteの日付形式返信 削除
2017/2/17 (金) 10:21:43 Mr.XRAY
> とんでもありません.情報をいただいただけでも感謝です.
> というわけで,またまた遠慮なく追加させていただきました (^^;


それと,CSV からのデータのインポートの時に,
CSV の日付を yyyy/mm/dd のスラッシュでテストした時に,
対象のデータベース側の表のデータの日付形式をスラッシュに変更したら
どうなるかテストしました.

それをそのまま UP していたような気がするので yyyy-mm-dd にしたのを
再 UP しています.
この形式が SQLite 内部の本来の日付形式です.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82