表1 ,access数据库,delphi编程表的主键列是:编号 值是自动编号在dbgrid中只更新当前选中行的值,请问该update语句该怎么写?
解决方案 »
- 请教delphi多线程技术监控多个串口
- TAdoDataSet过滤(Filter)和定位(Locate)时不能区分大小写的问题(在线等待帮助……)
- 怎样才能把D7的TShellTreeView控件设置为只读?
- 在一个Image控件内能显示多幅图像吗?
- 有点世界末日的感觉---------散分!!!!
- delphi & sqlserver
- 关于这个系统的安装跟发布问题:
- 关于ADO连接ACCESS2000数据库的问题??
- ******* 20分请教小问题****关于数据库中字段属性的问题,为什么字段类型是VARCHAR(4000),但是在DBGRID的值显示却为MEMO中
- 窗体调用问题
- 鼠标取值
- 200分求C++翻译成Delphi
dbgrid.datasource.dataset.FieldByName(字段名).AsString = '';//自己根据你的字段类型和值来改
dbgrid.datasource.dataset.Post;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGridEh, DB, ADODB;type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGridEh1: TDBGridEh;
DBNavigator1: TDBNavigator;
Button1: TButton;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000');
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)');
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');
adoquery1.ExecSQL;
adotable1.Active:=false;
adotable1.Active:=true;
end;
end.
---------
是我没说清楚。
这是源码,我是要实现在一个表中输入各个列值,然后用上面的sql语句计算出一个值。现在是一点Button1就计算出所有的行,我是想只计算当前选中的一行记录。
你一个个取出来,算好了再赋值给t21字段.最后post就可以了
Var
Str :String;
begin
Str:=dbgrid.datasource.dataset.FieldByName('主键').AsString;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000');
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)');
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');
adoquery1.SQL.add(',where 主键='''++Str'''';
adoquery1.ExecSQL;
adotable1.Active:=false;
adotable1.Active:=true;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
Var
Str :String
begin
Str:=dbgrid.datasource.dataset.FieldByName('主键').AsString; //获取当前记录的唯一主键值
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000');
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)');
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');
adoquery1.SQL.add(',where 主键='''++Str''''); //条件
adoquery1.ExecSQL;
adotable1.Active:=false;
adotable1.Active:=true;
end;
end.
Option MeaningarCurrent Only the updates for the current row are applied.
arFiltered Only updates for rows matching the current filter are applied.
arAll Updates for all rows are applied.
arAllChapters Update affects all chapters (ADO chapters)Note: To use batch updating, the CursorType property of the dataset component must be either ctKeySet (the default) or ctStatic and the LockType property must be ltBatchOptimistic.
Var
Str :String;
begin
Str:=dbgrideh1.datasource.dataset.FieldByName('编号').AsString;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000');
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)');
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)
*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');
adoquery1.SQL.add('where 编号='''+Str+'''');
adoquery1.ExecSQL;
adotable1.Active:=false;
adotable1.Active:=true;
end;
end.---------
运行后提示‘标准表达式中数据类型不匹配’,编号字段用的是access的自动编号,自动从1开始,然后是2,连续生成数字。不知道哪错了。。