使用FieldByName来更新数据纪录,程序调试通过,但是为什么记录没有被更新
表结构:
name:string
L1:float
L1N:int
L2:float
L2N:int
.....
L9:float
L9N:int
程序:
//判断符合那种条件查询
if suiradiobutton1.Checked=true then
begin sqlstr:='select L1,L1N from count'; end;
if suiradiobutton2.Checked=true then
begin sqlstr:='select L2,L2N from count'; end;
if suiradiobutton3.Checked=true then
begin sqlstr:='select L3,L3N from count'; end;
if suiradiobutton4.Checked=true then
begin sqlstr:='select L4,L4N from count'; end;
if suiradiobutton5.Checked=true then
begin sqlstr:='select L5,L5N from count'; end;
if suiradiobutton6.Checked=true then
begin sqlstr:='select L6,L6N from count'; end;
if suiradiobutton7.Checked=true then
begin sqlstr:='select L7,L7N from count'; end;
if suiradiobutton8.Checked=true then
begin sqlstr:='select L8,L8N from count'; end;
if suiradiobutton9.Checked=true then
begin sqlstr:='select L9,L9N from count'; end;
//连接数据库
if DBISAMDatabase1.Connected=true then
DBISAMDatabase1.Connected:=false;
DBISAMDatabase1.DatabaseName:='count.dat';
DBISAMDatabase1.Connected:=true;
DBISAMQuery1.Close;
DBISAMQuery1.DatabaseName:=DBISAMDatabase1.DatabaseName;
DBISAMQuery1.SQL.Clear;
DBISAMQuery1.SQL.Add(sqlstr);
DBISAMQuery1.open;
//逐条更新纪录
i:=0;
DBISAMQuery1.First;
while not DBISAMQuery1.Eof do
begin
i:=i+1;
DBISAMQuery1.edit;
DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[0].Name).asfloat:=DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[0].Name).asfloat+strtofloat(combo[i]);
DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[1].Name).AsInteger:=DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[1].Name).AsInteger+1;
DBISAMQuery1.Post;
DBISAMQuery1.next;
end;
请高手指点
表结构:
name:string
L1:float
L1N:int
L2:float
L2N:int
.....
L9:float
L9N:int
程序:
//判断符合那种条件查询
if suiradiobutton1.Checked=true then
begin sqlstr:='select L1,L1N from count'; end;
if suiradiobutton2.Checked=true then
begin sqlstr:='select L2,L2N from count'; end;
if suiradiobutton3.Checked=true then
begin sqlstr:='select L3,L3N from count'; end;
if suiradiobutton4.Checked=true then
begin sqlstr:='select L4,L4N from count'; end;
if suiradiobutton5.Checked=true then
begin sqlstr:='select L5,L5N from count'; end;
if suiradiobutton6.Checked=true then
begin sqlstr:='select L6,L6N from count'; end;
if suiradiobutton7.Checked=true then
begin sqlstr:='select L7,L7N from count'; end;
if suiradiobutton8.Checked=true then
begin sqlstr:='select L8,L8N from count'; end;
if suiradiobutton9.Checked=true then
begin sqlstr:='select L9,L9N from count'; end;
//连接数据库
if DBISAMDatabase1.Connected=true then
DBISAMDatabase1.Connected:=false;
DBISAMDatabase1.DatabaseName:='count.dat';
DBISAMDatabase1.Connected:=true;
DBISAMQuery1.Close;
DBISAMQuery1.DatabaseName:=DBISAMDatabase1.DatabaseName;
DBISAMQuery1.SQL.Clear;
DBISAMQuery1.SQL.Add(sqlstr);
DBISAMQuery1.open;
//逐条更新纪录
i:=0;
DBISAMQuery1.First;
while not DBISAMQuery1.Eof do
begin
i:=i+1;
DBISAMQuery1.edit;
DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[0].Name).asfloat:=DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[0].Name).asfloat+strtofloat(combo[i]);
DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[1].Name).AsInteger:=DBISAMQuery1.FieldByName(DBISAMQuery1.FieldDefs[1].Name).AsInteger+1;
DBISAMQuery1.Post;
DBISAMQuery1.next;
end;
请高手指点
解决方案 »
- D7如何控制WORD2003另存为到指定目录?
- 关于Tlistview控件编辑感知的问题,高手进,低手也进来学习!这有可能是一个旷世难题!
- delphi 如何判断字符串不相等
- 一个 SocketConnection1 关闭问题!
- CLX下的 keydown 和 keyup
- BORLAND 在“迫害”程序员?
- 我想把焦点移到Button1上后按回车等于Click操作,应该怎么写呢?(新手,请多指点!)
- delphi中有没有分离字符串的函数?
- 小麻烦!!!
- delphi中使用自定义消息传送字符串的问题
- Delphi中有什么控件有text和value两中属性,在显示得时候显示text,但是取值得时候取其value值
- TClientDataSet能不能实现排序功能?
将DBISAMQuery1.edit;改为DBISAMQuery1.append;也不行
我猜想可能是DBISAMQuery1.edit;和DBISAMQuery1.Post;的问题,但不知道怎么改,请高手指点。
试一试把FieldByname改成FieValues
query.Database.StartTransaction;
try
query.ApplyUpdates;
query.Database.Commit;
except
query.Database.Rollback;
raise;
end;
query.CommitUpdates;如果用的是adoquery,那就试试改改ADOQUERY的各参数吧
我又作了一个简单的程序进行测试:
窗体上放了两个数据库控件:DBISAMdatabase1和DBISAMQuery1,用这两个控件对表Vlast.dat和count.dat操作。
程序如下:
var
sqlstr:string;
begin
if DBISAMDatabase1.Connected=true then DBISAMDatabase1.Connected:=false;
DBISAMDatabase1.DatabaseName:='Vlast.dat';
DBISAMDatabase1.Connected:=true;
sqlstr:='select * from vlast';
DBISAMQuery1.Close;
DBISAMQuery1.DatabaseName:=DBISAMDatabase1.DatabaseName;
dbisamquery1.SQL.Clear;
dbisamquery1.SQL.Add(sqlstr);
dbisamquery1.Active:=true;
sqlstr:='insert into Vlast (name,Vcount,ScoreL) values('+'''zhang'''+',23'+',23.12'+')';
DBISAMQuery1.Close;
DBISAMQuery1.DatabaseName:=DBISAMDatabase1.DatabaseName;
dbisamquery1.SQL.Clear;
dbisamquery1.SQL.Add(sqlstr);
dbisamquery1.ExecSQL;
if DBISAMDatabase1.Connected=true then DBISAMDatabase1.Connected:=false;
DBISAMDatabase1.DatabaseName:='count.dat';
DBISAMDatabase1.Connected:=true;
sqlstr:='select L1,L1N from count';
DBISAMQuery1.Close;
DBISAMQuery1.DatabaseName:=DBISAMDatabase1.DatabaseName;
dbisamquery1.SQL.Clear;
dbisamquery1.SQL.Add(sqlstr);
dbisamquery1.Active:=true;
dbisamquery1.First;
while not dbisamquery1.Eof do
begin
DBISAMQuery1.Edit;
DBISAMQuery1.Fieldbyname[DBISAMQuery1.FieldDefs[0].Name].asfloat:=DBISAMQuery1.Fieldbyname[DBISAMQuery1.FieldDefs[1].Name].asfloat+31;
DBISAMQuery1.Fieldbyname[DBISAMQuery1.FieldDefs[1].Name].asinteger:=DBISAMQuery1.Fieldbyname[DBISAMQuery1.FieldDefs[1].Name].asinteger+1;
DBISAMQuery1.Post;
DBISAMQuery1.next;
end;
end;
前面的对表Vlast.dat的select和insert操作都能正常执行,而对count.dat的edit和post操作之后,没有反应。