☆DBExpressでトラブル<解決>

前回の問題について Delphi & Borland Users Forum で、にたろう氏より解決方法を教えて頂きました。
パラメータの設定とClientDataSetの開閉の位置を下記のようにすると問題なく動作するようです。

SQLDataSet1.ParamByName('ID').AsInteger := ID;
ClientDataSet1.Close;
ClientDataSet1.Open;

バージョンが変わったんだから仕方ないかも知れませんが、個人的には、Readme等にも特に仕様変更が載っていないのに従来のコードできちんと動作しないのは不満です。

|

★DBExpressでトラブル

[Delphi2006 WIN32]

Delphi7で作ったプログラムをDelphi2006でコンパイルすると動作がおかしいので、シンプルなプログラムを作成して試してみました。
問題点は、SQLDataSetで取り出された内容をClientDataSetに反映できないということです。

[環境]
Windows XP Pro SP2、Delphi2006(WIN32)
Firebird 1.5.2.4731

1.フォームに次のコンポーネントを配置して関連付けします。
  SQLDataSet1+DataProvider1+ClientDataSet1+DataSource1+DBGrid1
  Edit1, Button1

2.SQLConnection1を設定します。

3.SQLDataSet1.Commatextを設定します。
  SQLDataSet1.Commatext := 'SELECT * FROM SYAIN WHERE ID = :ID';

4.Button1.OnClickを設定します。

  procedure TForm1.Button1Click(Sender: TObject);
  var
   ID: Integer;
  begin
   ID := StrToInt(Edit1.Text);
   ClientDataSet1.Close;
   SQLDataSet1.Close;
   SQLDataSet1.ParamByName('ID').AsInteger := ID;
   SQLDataSet1.Open;
   ClientDataSet1.Open;
  end;

このプログラムで、IDを変えてもDBGridの表示は一番最初に入力したIDのデータのままとなっています。
Delphi7から変わったことと言えば、DBExpressのInterBase用のDLLがdbexpint.dllからdbxint30.dllに変更されたことだけです。
Firebirdなのが原因なのかよくわかりませんが、解決方法も見つけられず、困っています。


|

■あけましておめでとう

せっかくの休みなので、Delphi2005を使って既存のプロジェクトを置き換える作業をしてみました。
内容は、Delphi7で作ったDBExpressを使ったプログラムをDelphi for .NETに置き換えるというものです。
まず、 DataSet.FieldValues['FIELD1'] := ''; という部分が
[エラー] DataModuleMain.pas(467): E2010 'Variant' と 'string' には互換性がありません
というエラーになったので、 FieldByName で置き換えました。
この作業中、IDE のエディタの動作がとても重たくなってきたので、パソコンを再起動させて再度作業しました。始めは快適に作業ができましたが、次第に動きが鈍くなり、カーソルの移動を待つ時間が非常に長くなりました。そして再び再起動・・・やはり時間とともにカーソルの反応が悪くなります。支援機能のチェックをすべて外して作業してもやはり同じ状態です。こんなに遅くては、プログラムなんて作る気になれないですね。未だ公開されていないUpdate1(私のはpro版だから)を当てると少しはましになるのかな??ちなみに私のマシンは、Windows XP SP2 、Celeron2.2GHz Mem752MBです。今日は、最後まで作業できずに止めてしまったので、プログラムの動作確認はできませんでした。

|

■SQLConnectionのParams編集ダイアログ

Delphi2005 [Win32]
オブジェクトインスペクタからSQLConnectionのデータベース用Paramsを編集しようと「値リストの編集ダイアログ」を表示させました。何か変だと思ったら、下の方に少しだけボタンが顔を出しているだけで、何のボタンかわかりません。困ったもんですね。
ちなみに左側から「エディタ」「OK」「キャンセル」「ヘルプ」です。

|

☆無効なスレッドモデル?

Delphi7から移植したアプリケーションで、DBExpressでFirebird1.03のデータベースをオープンしようとすると、

「無効なスレッドモデル(STAThreadAttribute が必要です)」

というエラーメッセージが表示されました。
いろいろ調べてみますと、HELPの「VCL アプリケーションを Delphi 8 for .NET に移植する際の言語の問題」に「スレッドモデルの変更」という項目があり、そこにdprファイルのbeginの直前に[STAThreadAttribute] 属性を追加するだけですと記述がありました。こんな文法あったかな?と思いながらも以下のようにすれば、問題なく実行できました。

(略)
uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1},
 DataModuleMain in 'DataModuleMain.pas' {DataModule1: TDataModule};

{$R *.res}
[STAThreadAttribute]  //この行!!
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TDataModule1, DataModule1);
 Application.Run;
end.

ちなみにVCLフォームアプリケーションを新規作成しますと、次のようになっています。
[STAThread] // こんな属性が指定されています。
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

プログラム/アセンブリ情報というよくわからない記述もありますし・・・。

|