我是编码的超级新手,我现在正在制作一个简单的应用程序。
正如您在图片中看到的,我在所选日期有多个数据。如果我想用不同的值更新每一行并用保存按钮来做,我应该做什么代码?
我的 dbgrid 是否需要对其属性进行更多设置?
我使用 Delphi 7 和 zeos 作为数据库连接以及 oracle 作为数据库。提前致谢。
使用更新查询
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;
这只是一个例子,但这就是它的工作原理!祝你好运
有不同的方法取决于你想要什么和你使用什么。
如果您希望将多行编辑到 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;
一般来说,这不是很好的方法,所以不要沉迷于此。