改错,奇怪的问题,数据查询比较为什么出错。(50分)

  • 主题发起人 主题发起人 Wizard00
  • 开始时间 开始时间
W

Wizard00

Unregistered / Unconfirmed
GUEST, unregistred user!
我有这样一段程序,运行时死机,清高手指点迷津。谢谢!没多少分了,要破产了。
phnok:=false;
accok:=false;
testphn:=false; {假定没有}
testacc:=false;
while not phnok or not accok do
begin
repeat {查找是否 存在 新的电话号码和账号 }
if not testphn then
begin
tphone:=fieldbyname('电话号码').asstring;
if tphone=edit2.Text then testphn:=true {}
end;
if not testacc then
begin
taccount:=fieldbyname('账号').asstring;
if taccount=label8.Caption then testacc:=true
end;
if not (testphn and testacc) then next;
until eof or testacc and testphn;
if testphn then
begin
edit2.Text:=inttostr(strtoint(edit2.text)+1);
end else phnok:=true;
if testacc then
begin
label8.Caption:=inttostr(strtoint(label8.Caption)+1);
end else accok:=true;
end;
 
huhu,估计是进了死循环或是对数据库操作时引起的死机。
不太懂啦,[:D]。你想想办法先。我还有事呢?sorry
 
你的是不是要在数据库中查找某一项数据,找到就退出。你的结构太难看懂了。
我总是用一个开关变量。一种循环语句。这样的查询结构。
while not query.eof do
begin
if (fieldbyname('账号').asstring=edit1.text) or (fieldbyname('电话号码').asstring=edit2.text) then
beign
mybool:=true;
exit;
end
else
next;
end;
if mybool=true then
begin
.............
end
else
begin
...............
end;
不知对你有帮助吗?
 
你单步调试看是不是死循环了.
 
我是要分别查询 账号 和 电话号码 如果数据库中存在,就加一,考虑到效率,
就一起查询比较,但是不知道为什么老是死机,比到第三个就不响应了。
 
我的意图是生成一个与数据库中原来不一样的 账号 和 电话号码
 
你用sql语句来查询试试,
 
你可以这样试试:
一个函数:
数据模块中的函数。
function TDbM.DbGetOneDpbh(ADpName: string): string;
var
TempQuery:TADOQuery;
begin
TempQuery:=TADOQuery.Create(nil);
with TempQuery do
begin
connection:=ADOConnwage;
if active then active:=false;
sql.Clear;
sql.Add('select 部门编号 from 公司信息表 where 部门名称='''+ADpName+'''');//可以写你的sql语句。
try
open;
result:=fields.fieldbyname('部门编号').AsString;
except
result:='';
end;
end;
TempQuery.Free;
end;
主程序中的调用:
if DbM.DbCheckbhInput(frame21.EdtDpbh.Text)=false then
application.MessageBox(pchar(frame21.EdtDpbh.Text+'部门编号已经存在,请更换!'),'提醒窗口',0)
else
begin
DbM.DbAddDpInfo(NewDpInfo);这里在写添加的代码:DbAddDpInfo同样写在数据模块中。
end;

如果返回数据说明已经存在这个数据了,没有返回就添加进去。
 
多人接受答案了。
 
后退
顶部