、あなたは非データ認識コントロールを持つダイアログを作成します。これを行うには、ダイアログに入るときにデータを取得する(データを編集する場合)、挿入する場合と挿入する場合、更新する場合の3つのTSQLQueryが必要です。
先日書いたこのようなダイアログのコードです(編集済み)。パラメータ 'n'は編集するタプルのIDです。新しいレコードを挿入している場合、その値は-1になります。 P1
qInsertCashbox金庫に インサートである(ID、CURDATE、量、詳細) 値(:
Function TEditCashbox.Execute (n: longint): boolean;
var
q: TSqlQuery;
begin
if n = -1 then
begin
edDate.Text:= datetostr (date);
edAmount.text:= '0';
end
else with qGetCashbox do
begin
params[0].asinteger:= n;
open;
edDate.text:= fieldbyname ('curdate').asstring;
edAmount.text:= fieldbyname ('amount').asstring;
edDetails.text:= fieldbyname ('details').asstring;
close
end;
if showmodal = mrOK then
begin
if n = -1 then
begin
q:= qInsertCashbox;
q.ParamByName ('p0').asinteger:= dm.GenerateID ('cashbox')
end
else
begin
q:= qUpdateCashbox;
q.ParamByName ('p0').asinteger:= n
end;
with q do
begin
parambyname ('p1').asdate:= strtodate (edDate.text);
parambyname ('p2').asinteger:= strtoint (edAmount.Text);
parambyname ('p3').asstring:= edDetails.text;
execsql
end;
end
end.
qGetCashboxは 選択CURDATE、量、ID =が金庫から詳細として定義されたクエリーです。 P0:P1:P2:P1、 量=:P2、 詳細= P3 ID P3)
qUpdateCashboxが 更新金庫が CURDATE =に設定されています=:p0
もちろん、トリニティ(TSQLDataSet、TDataSetProvider、およびTClientDataSet)を必要とするデータ対応コンポーネントを使用することもできます。データ認識コンポーネントの使用は簡単ですが、このアプローチが適切でない場合があります。データ認識コンポーネントを使用する場合、テンプレートコードは次のようになります。
sdsEditDeposit.params[0].AsInteger:= n; // this is the TSQLDataSet
with qEditDeposit do // this is the clientdataset
begin
open;
if n = -1 then // new tuple
begin
insert;
fieldbyname ('amount').asinteger:= 0;
fieldbyname ('curdate').asdatetime:= date;
end;
edit;
if showmodal = mrOK then
begin
if n = -1 then
begin
n:= dm.GenerateID;
fieldbyname ('id').asinteger:= n;
end;
result:= n;
post;
applyupdates (0)
end
else
begin
cancel;
result:= 0
end;
end;
これはスポットに当たった!ありがとうございました。 –