DetaSnapを介してのApplyUpdatesで"パラメータが無効です"のエラーについて

解決


Yoshi  2020-09-03 18:59:53  No: 149122

こんにちは

DataSnapを介したDBに対するデータ更新で、DelphiXE4でコンパイルしたプログラムでは何ら問題なくデータ更新できていましたが、同じソースをDelphi10.4でコンパイルしたプログラムではApplyUpdatesで"パラメータが無効です"のエラーが発生します。
但し、Delphi10.4をインストールしているPC(2台)では問題ないのですが、何故かDelphi10.4が未インストールのPC(2台)で症状がでます。
Delphi10.4で更新したプログラムでもApplyUpdatesを使用せずSQL文を発行したデータ更新はいずれのPCでも問題ありません。

PCは何れもWindows10で、テスト環境として全てに同じバージョンのDB(MSSQLServer)とDataSnapサーバーをインストールしており、相互にデータ更新が行えるようにしています。
Delphi10.4をインストールしたPCでは、自PCでもDelphi10.4が未インストールのPCに対しても問題なくApplyUpdatesできます。
しかし、Delphi10.4が未インストールのPCでは、自PCでもDelphi10.4がインストール済みのPCに対してもApplyUpdatesは上記のエラーを吐きます。

念の為、DelphiXE4でコンパイルしたプログラムに戻すと、ApplyUpdatesでも全てのPCで問題なく相互にデータ更新できます。
全てのPCのDataSnapサーバーはDelphi10.4でコンパイルされたプログラムです。

DelphiXE4から10.4の間が抜けているので、DetaSnapを扱う上で何らかの追加ファイルなどが必要になったのか探ってみましたが分かりません。
解決の為、何らかのヒントだけでもあればと思っています。
よろしくお願いします。


Yoshi  2020-09-04 09:14:22  No: 149125

一晩考えてみました。

DataSnapを介したDBのデータ更新はよくある事で、そんな中でApplyUpdatesなども使用されているでしょうから本当に問題があれば今頃大変なことになっているでしょう。
多分、私が何かやらかしているだと思います。
たまたま、DelphiXE4では問題にならなかっただけが正解かもしれません。

私的に、こんなのは良くあります。
例えば"FormのOnCanResize"

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
begin
 if NewWidth <> Self.Width then Resize := False;
end;

DelphiXE4では、HideとShowを繰り返す仕様で状況によってHideからShowする間にFormサイズを変更しなければならない場合でない限り問題ではありませんでした。
私は、これが普通なんだと思っていました。
しかし、Delphi10.4では生成開始時点からOnCanResizeイベントが発生しているようで、フォームのプロパティ値に設定したサイズにすらならず初期サイズでFormが表示されてしまいます。
従って、生成後から破棄する間に一切サイズを変更する必要無い場合でも常に "if Selfe.Visible then"で判定する必要があることが分かりました。
多分、これが本来なのでしょう。

DataSnapを介したApplyUpdatesでのデータ更新でも、本来の仕様からそれた記述なりがあるのかもしれません。
DataSnapサービスのプログラム自体も含めて、その辺もう一度見直してみます。

解決ではないですが、解決としておきます。
ありがとうございました。


Yoshi  2020-09-04 15:13:35  No: 149128

DelphiXE4での開発時よりmidas.dll に依存していたのが原因でした。
MidasLibをクライアントプログラムのソースファイルにusesして解決しました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加