喫茶XRAYトップページ

[スレッド全体
]

[10825] サンプル追加返信 削除
2017/2/18 (土) 22:50:45 Mr.XRAY
宇宙人やら UFO やら,そんなのどうでもいいと思っている方が多いでしょう.
はい,真面目なのです.
以下の記事,サンプルを追加しました.

[564] [11_ZeosLib で接続可能なデータベースの一覧]
http://mrxray.on.coocan.jp/Delphi/plSamples/564_ZeosLib_DelphiBerlin.htm#11

[564] [12_ZeosLib を使用した Paradox データベースのメタデータ取得]
http://mrxray.on.coocan.jp/Delphi/plSamples/564_ZeosLib_DelphiBerlin.htm#12


[10831] Delph7にZeosLibをインストール返信 削除
2017/2/19 (日) 20:19:40 Mr.XRAY
検索のキーワードに何回か
Delphi7 ZeosLib インストール
というのを見かけました.

ちょっと気になって調べてみたら,ZeosLib の古いバージョンであれば
インストールできるようです.この古いバージョンの ZeosLib は
Delphi 5, 6, 7 にインストールできます.
新しい ZeosLib は,新しいバージョンの Delphi に対応するために,
何かを変えているようです.
英語のサイトに情報がありました.

で,備考で文章を追加しておきました.

http://mrxray.on.coocan.jp/Delphi/plSamples/564_ZeosLib_DelphiBerlin.htm#01


[10832] Re:Delph7にZeosLibをインストール返信 削除
2017/2/19 (日) 22:57:24 igy
私もDelphi7には、ZeosLib 6.6.6をインストールしていますが、
SQLiteを使う場合は、日本語関連のトラブルを避けるために、
Unicode対応のDelphi2009以降で使用したほうがよさそうです。

例えば、Delphi7 + ZeosLib 6.6.6 (SQLite 3.17.0) にて、

CREATE TABLE TestTBL
(
   ID INTEGER PRIMARY KEY   AUTOINCREMENT
  ,S  VARCHAR(30)
);

INSERT INTO TestTBL (S) VALUES ('日本 太郎');
INSERT INTO TestTBL (S) VALUES ('日本 花子');

を実行した場合、

SELECT * FROM TestTBL;

で正しく表示しますが、

SELECT * FROM TestTBL WHERE S LIKE '%花%';

では、表示しません。(ただし、古い SQLite 3.5.5のDLLだと表示します。)

また、上記のデータベースファイルを
Delphi XE + ZeosLib 7.1.4 (SQLite 3.17.0) にて接続し、

SELECT * FROM TestTBL;

で、日本語が文字化けしたりしますので・・・


[10834] Re2:Delph7にZeosLibをインストール返信 削除
2017/2/20 (月) 00:17:45 Mr.XRAY
> で、日本語が文字化けしたりしますので・・・

やってみました.
う〜む.これは結構大変そう.

Windows 7 U64(SP1) + Delphi 7 Pro + SQLite 3.8.7



[10835] Re3:Delph7にZeosLibをインストール返信 削除
2017/2/20 (月) 00:30:33 igy
▼ Mr.XRAYさん
> > で、日本語が文字化けしたりしますので・・・
>
> やってみました.
> う〜む.これは結構大変そう.


Delphi XE + ZeosLib 7.1.4 (SQLite 3.17.0) で作ったデータベースファイルを
Delphi7 + ZeosLib 6.6.6 で表示しようとした場合、
たしかに、そんな感じになりますね・・


[10836] Re4:Delph7にZeosLibをインストール返信 削除
2017/2/20 (月) 00:37:09 igy
一方、Delphi7 + ZeosLib 6.6.6で作ったデータベースファイルを
Delphi XE + ZeosLib 7.1.4 (SQLite 3.17.0) で表示しようとした場合、
こんな感じです。


[10837] Re5:Delph7にZeosLibをインストール返信 削除
2017/2/20 (月) 08:44:33 Mr.XRAY
▼ igyさん

> 一方、Delphi7 + ZeosLib 6.6.6で作ったデータベースファイルを
> Delphi XE + ZeosLib 7.1.4 (SQLite 3.17.0) で表示しようとした場合、
> こんな感じです。


ですよね.
基本的に ユニコードで扱うベキでしょう.
ユニコード対応の Delphi 2009 以降でないとキビシイ感じがします.
「コードページの扱いに注意してください」とでも書いておこうかな.


[10838] Re6:Delph7にZeosLibをインストール返信 削除
2017/2/20 (月) 10:55:33 Mr.XRAY
> 基本的に ユニコードで扱うベキでしょう.

ZeosLib の Portal サイトを検索したら,こんな記事がありました.
この赤枠のリンクの記事の 5. の対策方法,つまり,
Delphi 7 のコントロールのユニコード化しかないでしょう.

http://zeoslib.sourceforge.net/viewtopic.php?f=33&t=3427&p=14292&hilit=codePage+SQLite#p14292

[Tnt Unicode Controls]
https://www.yunqa.de/delphi/products/tntunicodecontrols/index

[UTF-8 VCL]
https://sourceforge.net/projects/utf8vcl/

インストールが必要ないので UTF-8 VCL を使ってみました.
実行結果の図は Windows 7 U64(SP1) + Delphi 7 Pro + ZeosLib 6.6.6
and SLQLite 3.16.2 (最新版)

[566] に添付の AddressBook_A.db3 の表 (1 つしかありません) を表示
したものです.インポートの結果です.


procedure TForm1.Button1Click(Sender: TObject);
var
  FDBName : string;
  FTableName : string;
begin
  FDBName := ExpandFileName('..\AddressBook_A.db3');
  FTableName := 'AddressTBL';

  ZQuery1.Close;
  ZConnection1.Disconnect;
  ZConnection1.LoginPrompt := False;

  ZConnection1.Protocol := 'sqlite-3';
  ZConnection1.Database := FDBName;

  //TZQueryの設定
  ZQuery1.Connection := ZConnection1;
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('select * from ' + FTableName);
  ZQuery1.Open;

  DBGrid1.Columns[0].Width := 30;
  DBGrid1.Columns[1].Width := 90;
  DBGrid1.Columns[3].Width := 160;
end;



[10840] 結論返信 削除
2017/2/20 (月) 17:00:48 Mr.XRAY
結論

古い,つまり Ansi 版の Delphi にも 古いバージョンの ZeosLib をインストールできる.
しかし,現在普及しているデータベースはユニコードで扱う.
Ansi 版の Delphi もコントロールをユニコード対応にできるが,
内部の処理までは完全に処理するわけではない.

したがって,ユニコードベースのデータベースを扱うには困難が伴う.
ただし,非ユニコード版の Delphi でデータベースを新規作成すれば適切な
処理ができる可能性があるが,ユニコード版の Delphiからは正常に操作や
処理ができなくなる.

こんなところでしょうか.


[10848] 続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 14:05:35 Mr.XRAY
> 古い,つまり Ansi 版の Delphi にも 古いバージョンの ZeosLib をインストールできる.

以下,略
とまあ,こう書いたのですが,個人的には悔しいわけです.
で,igy さんの  foreign_keys の書き込みを読んで思ったのです.
そうだ,なるべく新しいバージョンの ZeosLib だ !!
探しました.ありました.7.1.2 です.
Delphi 7 Pro にインストールできました !! (^o^)
前のは 6.6.6 てす.

Paradox の接続の時に

  ZConnection1.Properties.Clear;
  ZConnection1.Properties.Add('AutoEncodeStrings=ON');
  ZConnection1.Properties.Add('controls_cp=CP_UTF16');

と言う処理をしているのですが,
これは,Paradox は Shift-JIS なわけです.
それで,コードページは自動検出,Paradox を使うアプリは Delphi XE ですから,
コードページはユニコードです.

ところが,ZeosLib 6.6.6 ではこれが使えないのです.
ZeosLib 7.1.2 にはありました !!
ライブラリ (DLL) の場所も指定できます.

やってみました.見事に表示できました !!
Windows 7 U64(SP1) + Delphi 7 Pro + ZeosLib 7.1.2 + SQLite 3.8.7 です.

やったぜい !  ざまあみろ !!


//=============================================================================
//  フォームを閉じる時の処理
//=============================================================================
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ZQuery1.Close;
  ZConnection1.Disconnect;
end;

//=============================================================================
//  ZeosLibを使用してSQLiteのデータベースに接続
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  FDBName    : string;
  FTableName : string;
begin
  ZConnection1.LibraryLocation := ExpandFileName('..\sqlite3.dll');

  //TDataSource,TDBGridの設定
  DataSource1.DataSet := ZQuery1;
  DBGrid1.DataSource  := DataSource1;


  FDBName := ExpandFileName('..\AddressBook_A.db3');
  FTableName := 'AddressTBL';

  //念のため接続を切断してから設定
  ZQuery1.Close;
  ZConnection1.Disconnect;
  ZConnection1.LoginPrompt := False;

  ZConnection1.Protocol := 'sqlite-3';
  ZConnection1.Database := FDBName;

  ZConnection1.Properties.Clear;
  ZConnection1.Properties.Add('AutoEncodeStrings=ON');
  ZConnection1.Properties.Add('controls_cp=CP_20932');

  //データベースへ接続
  ZConnection1.Connect;

  //TZQueryの設定
  ZQuery1.Connection := ZConnection1;
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('select * from ' + FTableName);

  //クエリの実行
  ZQuery1.Open;

  //日付型は書式を設定してみる
  (ZQuery1.FieldByName('生年月日') as TDateTimeField).DisplayFormat := 'ggee年mm月dd日';

  DBGrid1.Columns[0].Width := 30;
  DBGrid1.Columns[1].Width := 90;
  DBGrid1.Columns[3].Width := 160;
end;




[10852] Re:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 22:28:11 taka
▼ Mr.XRAYさん
> Paradox の接続の時に
>
>   ZConnection1.Properties.Clear;
>   ZConnection1.Properties.Add('AutoEncodeStrings=ON');
>   ZConnection1.Properties.Add('controls_cp=CP_UTF16');
>
> と言う処理をしているのですが,


Win10 + Delphi 2005 + ZeosLib 7.1.4-stable

566_ZeosLib_SQLite_DelphiBerlin\02_ZeosLib_SQLite_Connect

[エラー] Project1.dpr(11): E2003 未定義の識別子 : 'MainFormOnTaskbar'

{$IF CompilerVersion >= 18.0}
  Application.MainFormOnTaskbar := True;
{$IFEND}

Unit1.pas
 ZConnection1.Properties.Clear;
 ZConnection1.Properties.Add('AutoEncodeStrings=ON');
 ZConnection1.Properties.Add('controls_cp=GET_ACP');

を追加

ZeosLib 開発版は確認していないので、直っているのかもしれないですが
stable版では、列名が文字化けしました。

ZQuery1.Open; の後ろにこれをいれると列名がキャプションに
正しく表示されるので列名が変換されていないようです。
  Caption := ZEOS_VERSION + ' : '
   + Utf8ToAnsi(ZQuery1.FieldDefs.Items[0].Name);



[10854] Re2:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 22:43:13 Mr.XRAY
▼ takaさん

> [エラー] Project1.dpr(11): E2003 未定義の識別子 : 'MainFormOnTaskbar'

ハハハッ.スミマせん.
他のサンプルプログラム集のプロジェクトファイルは,条件分岐を入れて
いるのですが,Delphi 10.1 Berlin ということでそのままです.
Delphi 7 を話題にしたから修正した方がいいですね.
後でやっておきます.


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