gpt4 book ai didi

sql - Delphi更新联接查询

转载 作者:行者123 更新时间:2023-12-03 19:46:31 25 4
gpt4 key购买 nike

该应用程序是datasnap(带有sqlite数据库)。我对两个表(LOKACIJE和UPORABNIKI)运行以下查询:

procedure TForm4.FormShow(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.CommandText :='';
ClientDataSet1.CommandText := 'select lokacije.[HOTEL_ID],'+
' lokacije.[NAZIV],'+
' uporabniki.[LOKACIJA_ID],'+
' uporabniki.[RESORT_ID],'+
' uporabniki.[HOTEL_ID],'+
' uporabniki.[UPORABNIK],'+
' uporabniki.[GESLO],'+
' uporabniki.[PRAVICE]'+
' from UPORABNIKI'+
' inner join LOKACIJE on uporabniki.lokacija_id=lokacije.lokacija_id '+
' where lokacije.[NAZIV] = :@NAZIV'+
' order by Uporabniki.[UPORABNIK]';
ClientDataSet1.Params.ParamByName('@NAZIV').Value:= '' + Form2.AdvOfficeStatusBar1.Panels[3].Text + '' ;
ClientDataSet1.Open;
end;


查询运行良好,并给了我想要的结果。但是,我希望能够编辑和保存此查询的编辑(或添加)结果。我要更新(或添加新记录)的表是UPORABNIKI。我不需要在LOKACIJE表中写任何东西。我该如何完成?

除了保存新记录外,我还希望查询自动填充值
LOKACIJA_ID,RESORT_ID,HOTEL_ID来自同一表,当我在导航器中单击“插入”按钮时。 UPORABNIKI是已翻译的USERS表。

编辑:根据建议反转查询

最佳答案

我相信在这种情况下,TDatasetProvider无法产生正确的命令来更新所涉及的表。在这种情况下,我要做的是向TDatasetProvider.BeforeUpdateRecord事件添加处理程序。通过此事件,您可以处理在数据集上执行的每个操作,并生成所需的SQL语句以正确地将这些操作保留在数据服务器中。

您将必须自己编写UPDATE / DELETE / INSERT语句,但是您将对表的更新方式拥有绝对的权力。这就是为什么我总是使用此事件,而不依赖于TDatasetProvider内部更新过程的原因。

关于sql - Delphi更新联接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com