急!求 SQL2000+delphi开发问题 ( 积分: 100 )

  • 主题发起人 主题发起人 jumpp678
  • 开始时间 开始时间
J

jumpp678

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
with ADOQuery3 do
begin
ACTIVE:=false;
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('select I_company,I_R_num from Wjm_C_Details ');
EXECSQL;
ACTIVE:=True;

a_filedNo:=ADOQuery1.FieldCount;//每一行的列数
try
a_recno:= 1;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
for j:=1 to a_filedNo do //转化一个记录,你可以在此进行修改或什么的
begin
sqlstr1:=sqlstr1+''''+ADOQuery1.Fields[j-1].AsString+''''+','
end;
endl;
现在我要一个个把
adoquery3.Fields.FieldByname('I_company').AsString跟ADOQuery1.Fields[1].AsString
adoquery3.Fields.FieldByname('I_R_num').AsString跟ADOQuery1.Fields[2].AsString
对比,如果adoquery3.Fields.FieldByname('I_company').AsString<>ADOQuery1.Fields[1].AsString 而且adoquery3.Fields.FieldByname('I_R_num').AsString=ADOQuery1.Fields[2].AsString 提示 不匹配,并弹出个框用于修改
 
while not ADOQuery1.Eof do
begin
//这里的for循环我没看懂你要干什么,是要把整条记录都赋给变量sqlstr1吗?
ADOQuery1应该是你在贴出来的这段代码前就有结果集了吧?
你可以在这个WHILE循环里直接用那几个字段进行判断,如果条件满足的话可以show一个窗体出来并把此时的数据显示在窗体里并对其进行修改,结束后关掉窗体继续环境,我想你应该是这个意思吧!!
end
 
//for 循环是 DBGRID1里面的列字段循环,就是一个个把DBGRID里面一行的每个字段读取出来。。。放到sqlstr里面 这个用于以后修改完匹配数据 插入表的
而ADOQuery1的结果已经有了的~~ 你想说的show窗口我也想过, 但是我写循环的时候,出现了问题, 所以想你们帮忙写个循环的代码。
 
沒說清楚
 
循环的时候是不是死掉了呀,在后面加个ADOQuery1.next
不会这么简单吧?
 
问题没说清楚,但肯定死循环.
 
while not ADOQuery1.Eof do
begin
if (ADOQuery1.Fields.Count >= 2)
and (adoquery3.Fields.FieldByname('I_company').AsString <> ADOQuery1.Fields[1].AsString)
and (adoquery3.Fields.FieldByname('I_R_num').AsString=ADOQuery1.Fields[2].AsString) then
Str := InputBox(...); //输入的东西给谁?
ADOQuery1.Next;
end;
 
ACTIVE:=false;
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('select I_company,I_R_num from Wjm_C_Details ');
EXECSQL;
ACTIVE:=True;
语句一塌糊涂
 
With ADOQuery3 do
Begin
Close;
Sql.clear;
Sql.add('select I_company,I_R_num from Wjm_C_Details');
Execsql;
End; 这样的语句,差在那里,请指教!!
 
不知道
问shbjkl
这个语句没问题
关键是下面的
没看懂啥意思
 
with ADOQuery3 do
begin
ACTIVE:=false;//改成close;
close;
SQL.Clear;
SQL.Add('select I_company,I_R_num from Wjm_C_Details ');
EXECSQL;//EXECSQL 一般用于不返回IDataSet的时候用,只用于执行一个部令,所以可以不要这一句,EXECSQL不返回表的schema和raws
ACTIVE:=True;//最好改成Open就行了,虽然Open等于ACTIVE:=True,但用Open是一个过程,写代码时多用过程比多用属性好,还好TDataSet内Open不是一个可以继承的函数,不然惹有其它基于TDataSet Open的事件将不能触发,所以我个人觉得用Open好
end;
下面的代码主要是少了Next,所以表不能循环,lake_cx回答的对,
但是你这一句sqlstr1:=sqlstr1+''''+ADOQuery1.Fields[j-1].AsString+''''+',我猜应该是做查询用的吧,如果是那这样不安全,这是因为 如果 ADOQuery1.Fields[j-1].AsString内含有任一个'句,将不能执行,改成sqlstr1:=sqlstr1+Quoted(ADOQuery1.Fields[j-1].AsString)

//不知我说的对不对,不对就权当顶一下贴吧
 
问题自己解决了,但是还是感谢在这里回帖和给出帮助人 谢谢[:)]
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
563
import
I
D
回复
0
查看
858
DelphiTeacher的专栏
D
后退
顶部