喫茶XRAYトップページ

[スレッド全体
]

[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からは正常に操作や
処理ができなくなる.

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


[10843] Re:結論返信 削除
2017/2/21 (火) 01:24:50 taka
▼ Mr.XRAYさん
> 結論
>
> 古い,つまり Ansi 版の Delphi にも 古いバージョンの ZeosLib をインストールできる.
> しかし,現在普及しているデータベースはユニコードで扱う.
> Ansi 版の Delphi もコントロールをユニコード対応にできるが,
> 内部の処理までは完全に処理するわけではない.
>
> したがって,ユニコードベースのデータベースを扱うには困難が伴う.
> ただし,非ユニコード版の Delphi でデータベースを新規作成すれば適切な
> 処理ができる可能性があるが,ユニコード版の Delphiからは正常に操作や
> 処理ができなくなる.
>
> こんなところでしょうか.

ユニコード文字がいらないなら
ansiコントロールでも
データソースのイベントでutf8文字コードを変換すれば簡単にできますよ
列取得のイベントがあります
コードが増えますけどね




[10844] Re2:結論返信 削除
2017/2/21 (火) 08:18:23 Mr.XRAY
▼ takaさん

> データソースのイベントでutf8文字コードを変換すれば簡単にできますよ
> 列取得のイベントがあります
> コードが増えますけどね


ですね.
ユニコード対応の今トールを使用するよりも,この方法の方が確実かも知れません.


[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;




[10849] Re:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 15:01:38 Mr.XRAY
> Paradox の接続の時に
>
>   ZConnection1.Properties.Clear;
>   ZConnection1.Properties.Add('AutoEncodeStrings=ON');
>   ZConnection1.Properties.Add('controls_cp=CP_UTF16');
>
> と言う処理をしているのですが,
> これは,Paradox は Shift-JIS なわけです.
> それで,コードページは自動検出,Paradox を使うアプリは Delphi XE ですから,
> コードページはユニコードです.


なので,前の [結論] で書いた

>処理ができる可能性があるが,ユニコード版の Delphiからは正常に操作や
>処理ができなくなる.


はウソということになりまです.ハイ.スミマセン.


[10850] Re:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 17:45:15 Mr.XRAY
>   ZConnection1.Properties.Add('controls_cp=CP_20932');

間違えました.Ansi 版の Delphi の設定は

  ZConnection1.Properties.Add('controls_cp=GET_ACP');

です.CP_20932 というのはありません.

Ansi 版 Delphi : GEt_ACP
Unicode 版 Delphi : CP_UTF16
FPC (Free Pascal Compiler) : CP_UTF8

です.あわてるな !!


[10851] Re2:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 21:51:25 Mr.XRAY
忘れていました.ダウンロードのリンクです.

[ZeosLib - ZEOSDBO-7.1.2-stable.zip]
https://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/zeosdbo-7.1.2-stable/ZEOSDBO-7.1.2-stable.zip/download

ZeosLib 7 からは Dephi 6 以前にはインストールできません.
以下の 6.6.6 を使用してください.
パッケージの設定ファイルを書き換えて 7.1.2 をインストールしようとしたら,
ソースコード内にバージョン判定の分岐があって,できませんでした.
そこに,説明が書いてありました.
コードページは自力処理になります.

[ZeosLib - ZEOSDBO-6.6.6-stable.zip]
https://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/zeosdbo-6.6.6-stable/ZEOSDBO-6.6.6-stable.zip/download


[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);



[10853] Re2:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 22:36:59 Mr.XRAY
▼ takaさん,情報ありがとうございます.

> ZQuery1.Open; の後ろにこれをいれると列名がキャプションに
> 正しく表示されるので列名が変換されていないようです。


なるほど.
多少は我慢が必要だということなのかな... (^^;

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


[564] の記事のリンクにある開発版は,おそらく Delphi 2005 にはインストール
できないと思います.Delphi 2007 にはインストールできませんでした.
多分ですが,Delphi 2009 以降に特化しているのではないかと...

Delphi 2005 には ZeosLib の 7.1.4 がインストールできるんですね.


[10855] Re3:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 23:28:59 taka
▼ Mr.XRAYさん

> [564] の記事のリンクにある開発版は,おそらく Delphi 2005 にはインストール
> できないと思います.Delphi 2007 にはインストールできませんでした.
> 多分ですが,Delphi 2009 以降に特化しているのではないかと...

どうなんでしょうね。 プロジェクトのプロパティで切り替える分には
コンパイルできるようです。

> Delphi 2005 には ZeosLib の 7.1.4 がインストールできるんですね.
できるようですね。
Zeos\packages\Delphi2005フォルダがありましたので
今日 何も考えずにDelphi2005にZeosLibを入れてしまいました(^ ^)

https://svn.code.sf.net/p/zeoslib/code-0/branches/7.1-patches/
ダウンロード (svnでチェックアウト)

mkdir dcu
プロジェクトオプションに
 ・ユニット出力ディレクトリを入力 dcu (大量にでてくるのでゴミ箱として)
 ・検索パスに追加(使う場合は、メモ帳で「7.1-patches」を適当に一括置換してください)
  7.1-patches\src;7.1-patches\src\component;7.1-patches\src\core;
  7.1-patches\src\dbc;7.1-patches\src\parsesql;7.1-patches\src\plain

再構築 ぷしゅ
実行!!
チッ

https://svn.code.sf.net/p/zeoslib/code-0/branches/testing-7.2/
をチェックアウト
検索パスをメモ帳にコピーして 7.1-patches を testing-7.2に一括置換 して戻す

再構築 ぷしゅ
実行!!
おお!! 7.2.1-rc(/branches/testing-7.2/)では直っているようです。



[10857] Re4:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 23:50:51 Mr.XRAY
▼ takaさん

> どうなんでしょうね。 プロジェクトのプロパティで切り替える分には
> コンパイルできるようです。


ありゃ,何か間違えたかな ?

> https://svn.code.sf.net/p/zeoslib/code-0/branches/7.1-patches/
> ダウンロード (svnでチェックアウト)


あら,こんなのが...


[10858] Re4:続・Delphi7でZeosLib返信 削除
2017/2/22 (水) 00:07:15 Mr.XRAY
▼ takaさん
> https://svn.code.sf.net/p/zeoslib/code-0/branches/7.1-patches/
> ダウンロード (svnでチェックアウト)


SVN で持ってきてインストールしました.
バッチリです !! サンクスです.
以下のベータ版もテストしてみました.こちらでも OK でした.

あれですね.この方がいいような.ちょっと考えよう.
beta というので躊躇していたのですが...

Windows 7U64(SP1) + Delphi 2007-R2
http://svn.code.sf.net/p/zeoslib/code-0/branches/testing-7.2/
SQLite 3.16.2



[10856] Re3:続・Delphi7でZeosLib返信 削除
2017/2/21 (火) 23:31:21 Mr.XRAY
> [564] の記事のリンクにある開発版は,おそらく Delphi 2005 にはインストール
> できないと思います.Delphi 2007 にはインストールできませんでした.
> 多分ですが,Delphi 2009 以降に特化しているのではないかと...


なので ZeosLib 7.1.4 でテストしてみました.
ということは,7.1.4 では列名が文字化けするということですね.
漢字圏にとっては厳しい現象です.

Windows 7U64(SP1) + Delphi 2007-R2 + ZeosLib 7.1.4 + SQLite 3.8.7 です.




[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