当前位置:主页>销售管理软件> 列表

看看这个小问题~~~~~~~~~~~~~~~~~~~ 找服装店库存软件

记账软件版1楼: 对多行查询结果进行Update,下面得语句是否可行?为什么总说Dateset不是修改插入状态?应如何修改??
..............
QueryGlNl.Open;

QueryGlNl.First;
for i:=0 to QueryGlNl.RecordCount-1 do
begin
QueryGlNl.Append ;
QueryGlNl.FieldByName(''ZG_Age'').AsString := IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_Brith'').AsString,4)));//
QueryGlNl.FieldByName(''ZG_Gl'').AsString := IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_WorkDay'').AsString,4)));
QueryGlNl.Post;
QueryGlNl.Next;
end;
QueryGlNl.Close;

2楼: 把这句Queryg1n1.edit放到open之后就可以了 如服装店进销存软件

3楼: 逻辑错误.
Append是添加记录,不是修改记录.
要用 Update SQL 语句.
类似这样的操作:
UPDATE subject SET su_subject=''英语'' WHERE su_no=''c02
不用设置循环.

4楼: ADOQuery1.Open;

ADOQuery1.First;
for i:=0 to ADOQuery1.RecordCount-1 do
begin
ADOQuery1.Append ;
ADOQuery1.FieldByName(''aa'').AsInteger := ADOQuery1.FieldByName(''aa'').AsInteger;//iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_Brith'').AsString,4)));//
ADOQuery1.FieldByName(''bb'').AsInteger := ADOQuery1.FieldByName(''bb'').AsInteger;//iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_WorkDay'').AsString,4)));
ADOQuery1.Post;
ADOQuery1.Next;
end;
ADOQuery1.Close;

照你的抄下,没问题啊

5楼: 补充:没问题 是说没出错,但你用的是APPEND;插入的是空记录,
IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_Brith'').AsString,4)));没用啊!

6楼: 记录集里面有上百条记录,不为空;然后对每一条记录得某几个字段进行+或-处理,然后更新.
不知道各位有什么好办法? 对每条数据修改后立即post,还是等所有表中所有数据都修改后再统一post呢??应该如何写??

to:rikhong
原语句为:
QueryGlNl.SQL.text :=''select ZG_AGE,ZG_GL,ZG_Brith,ZG_WorkDay,ZG_Mz,ZG_Zy,ZG_Dept from ZG '';


QueryGlNl.Open;
ADOQuery1.First;
for i:=0 to ADOQuery1.RecordCount-1 do
.........

记账软件版7楼: 晕.楼主表述不清呀
ADOQuery1.edit; //千万不要append
QueryGlNl.FieldByName(''ZG_Age'').AsString := IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_Brith'').AsString,4)));//
QueryGlNl.FieldByName(''ZG_Gl'').AsString := IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_WorkDay'').AsString,4))); ADOQuery1.Post;
如果所有的记录做同样的变化,可以使用 update SQL 语句统一修改

8楼: 我要做得是对每一个职员到第n年,计算年龄跟工龄,不能统一得加1或者加n,所以要逐条更新.还要根据工龄对报效比例作出调整的,其他基本已完成,就在更新上出了点问题,请求救援~~~~~~~~~~~~~~~~

9楼: 如果是更新那应该用QueryGlNl.edit;;不是QueryGlNl.append啊!

QueryGlNl.Open;

QueryGlNl.First;
while not QueryGlNl.eof do//改
begin
QueryGlNl.edit;//改
QueryGlNl.FieldByName(''ZG_Age'').AsString := IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_Brith'').AsString,4)));//
QueryGlNl.FieldByName(''ZG_Gl'').AsString := IntToStr(iNewYear-StrToInt(LeftStr(QueryGlNl.FieldByName(''ZG_WorkDay'').AsString,4)));
QueryGlNl.Post;
QueryGlNl.Next;
end;
QueryGlNl.Close;

10楼: 用过Edit,报错
说:键列信息不足,更新影响到多行.

11楼: ‘键列信息不足’
是因为你的表没有主键,或自动编号,或你查询字段的结果有重复行,所以报错。

我觉得你可以用update语句实现,因为你用循环,也没有什么条件限制,所有的修改数据都一样。
update table1 set 字段1=(字段2+字段3)*字段3 where .....

12楼: 添加个自动编号的字段 如服装店库存软件

13楼: 这样的情况一般使用 sql 语句的,一样可以实现楼主的要求啊
其实,在数据库方面不可能说 只能客户端实现而无法 sql 实现的,除非不是简单改数据。

非得用 ado 的话,将结果集检索出来,一定要包括关键字,然后逐条 Edit/Post 行了

记账软件版14楼: 有什么方法可以在缓冲区里更新完所有的数据后,再一次性Post呢?