ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
IF Not(ADOQuery1.Eof) Then
Begin
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.Eof) and Not(ADOQuery2.Bof) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
ADOQuery1.Next;
End;
End;
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
IF Not(ADOQuery1.Eof) Then
Begin
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.Eof) and Not(ADOQuery2.Bof) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
ADOQuery1.Next;
End;
End;
While not ADOQuery1.Eof Do???????
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
if not (ADOQuery2.IsEmpty) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
ADOQuery1.Next;
End;
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
ADOQuery1.first;// 增加这一句
//IF Not(ADOQuery1.Eof) Then 这个判断不要
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.Eof) and Not(ADOQuery2.Bof) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
ADOQuery1.Next;
End;
这句没有用啊?
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
ADOQuery1.First ;
While not ADOQuery1.Eof Do
Begin
ADOQuery1.Next;
End;正常。加上:ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.IsEmpty) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;死循环出现。这里面有错误吗?
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where
isre=0';
ADOQuery1.Open ;
ADOQuery1.First;
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.Eof) and Not(ADOQuery2.Bof) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
//ADOQuery2.Close;
//ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where
// announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
//ADOQuery2.ExecSQL ;//new
ADOQuery1.edit;
ADOQuery1.fieldbyname('postuserid').asinteger:=userid;
ADOQuery1.fieldbyname('isre').asinteger:=1;
//new ADOQuery1.Next;
End;
ADOQuery1.post;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.IsEmpty) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;知道程序停在哪一行吗?
sqlstr:='select userid from user where username="' + ADOQuery1.Fieldbyname('username').AsString +'"';
with ADOQuery2 do
begin
close;
sql.clear;
sql.add(sqlstr);
open;
end;
//第二部份
IF Not(ADOQuery2.IsEmpty) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;修改一下,第一部份有改变,第二部份未动。你先跟踪一下吧。要搞清楚程序在哪一行出错。
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
ADOQuery1.first;// 增加这一句
//IF Not(ADOQuery1.Eof) Then 这个判断不要
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+ADOQuery1.Fieldbyname('username').Value+'''';
ADOQuery2.Open ;
//IF Not(ADOQuery2.Eof) and Not(ADOQuery2.Bof) Then
IF ADOQuery2.Fields[0].isNull Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
ADOQuery1.Next;
End;
应该不会有死循环
就算有两个,你也少了一个,第一个的循环没有next,当然是死循环了!
不用
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where
announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
而用
ADOQuery1.edit;
ADOQuery1.fieldbyname('postuserid').asinteger:=userid;
ADOQuery1.fieldbyname('isre').asinteger:=1;
最后要加个
ADOQuery1.post;会好些的。
ADOQuery2.SQL.Text := 'update bbs1 set postuserid='+IntToStr(userid)+',isre=1 where
announceid='+IntToStr(ADOQuery1.Fieldbyname('announceid').Value)+'';
ADOQuery2.ExecSQL ;
而用
//new
ADOQuery1.edit;
ADOQuery1.fieldbyname('postuserid').asinteger:=userid;
ADOQuery1.fieldbyname('isre').asinteger:=1;
//new
最后加个post.会好些的。
如果用关键字查找会好些,或者在bbs1中加一冗余字段存放userid,和user表
建立多对一关联。试试吧,要去吃午饭了,午安!