0

我是编码的超级新手,我现在正在制作一个简单的应用程序。

在此处输入图像描述

正如您在图片中看到的,我在所选日期有多个数据。如果我想用不同的值更新每一行并用保存按钮来做,我应该做什么代码?
我的 dbgrid 是否需要对其属性进行更多设置?
我使用 Delphi 7 和 zeos 作为数据库连接以及 oracle 作为数据库。提前致谢。

4

2 回答 2

1

使用更新查询

select "Database"
Update "tablename" 
set "colonnename1"="new value, "colonnename1"="new value, ...
where "colonnename"=value

这是更新查询,在使用 delphi 时,您可以这样做:

begin
uniquery1.clear;
Uniquery1.SQL.Add('update person set name ='''+edit1.Text+''',lastname='''+edit2.Text+''',age='+edit3.Text+',city='''+edit4.Text+''' where date=' + edit5.text);                                     
uniquery1.ExecSQL;
messagedlg('Successfully Modified!',mtinformation,[mbOK],0);
end;

或者您可以使用参数化方法,这比连接 SQL 更好,正如NIL所说:

begin
Uniquery1.sql.clear;
Uniquery1.SQL.Add('UPDATE person SET  "1colonnename"= ":parmID", name= :sal WHERE Num='+ inttostr(strtoint(dbgrid1.DataSource.DataSet.FieldValues['num'])));                             uniquery1.ParamByName('paramID').value:=edit1.text;
uniquery1.ParamByName('sal').Value:=edit2.text;
uniquery1.ExecSQL;
end;

这只是一个例子,但这就是它的工作原理!祝你好运

于 2017-12-05T07:18:01.613 回答
0

有不同的方法取决于你想要什么和你使用什么。

如果您希望将多行编辑到 DBGrid 中并同时保存它们,大多数数据集组件都支持一种CachedUpdate模式(查看 Zeos 文档以获取详细信息)。在此模式下,数据集保存所做的所有更改,直到您调用ApplyUpdates方法以使用一批将这些更改放入数据库。

使用 Oracle,您可以在没有缓存更新的情况下做到这一点,只需使用“长事务”。在这种情况下,您应该在表单打开时开始事务,以通常的方式编辑和发布数据,并在Save按下时提交它们。这种方式有一些缺点,但我怀疑你会面对它们。

如果您希望在按下按钮时进行某种大规模更新Save,您有两种方法。首先,您可以设置一个查询组件,将其 SQL 属性设置为类似

update My_Table set My_Field_1 = :Value1, My_Field_2 = :Value2

并将其调用到保存操作处理程序中:

qUpdate.Params.ParamByName('Value1').AsString := edFirstValue.Text;
qUpdate.Params.ParamByName('Value2').AsString := edSecondValue.Text;
qUpdate.ExecSQL;
qMain.Refresh; { we're in need to see updates values, yeah? }

否则,您可以从客户端执行此操作:

qMain.DisableControls;
try
  Bookmark := qMain.Bookmark;
  qMain.First;
  while not qMain.Eof do
  begin
    qMain.Edit;
    qMain.FieldByName('My_Field_1').AsString := edFirstValue.Text;
    qMain.FieldByName('My_Field_2').AsString := edSecondValue.Text;
    qMain.Post;
    qMain.Next;
  end;
finally
  qMain.Bookmark := Bookmark;
  qMain.EnableControls;
end;

一般来说,这不是很好的方法,所以不要沉迷于此。

于 2017-12-05T08:11:52.780 回答