关于EDBEngineError错误(50分)

  • 主题发起人 主题发起人 ting__ting
  • 开始时间 开始时间
T

ting__ting

Unregistered / Unconfirmed
GUEST, unregistred user!
我用多线程来接收数据,在输入密码登入进入主画面后创建线程并打开通讯口,还可以注销
然后重新登入,此时线程仍存在,但是问题是当我重新登入后会提示EDBEngineError错误:name isn't unique
in the context",不知是什么原因? 如果是EDBEngineError错误,那说明是操作数据库的问题
,但是如果我不注销的话并进行其他数据库操作,此时线程也是存在的,也不会出错的,所以这个问题很伤脑筋呀,
请指教,急!
 
请 贴出注销和重新登陆时的事件代码
 
注销代码:
procedure TW_Main.M_Login_OutClick(Sender: TObject);
begin
G_Thread_SX:=True;//标明线程仍存在;
。。。。。。//一些菜单操作;
end;

重新登入代码:
登入画面formshow中:
procedure TW_Login.FormShow(Sender: TObject);
begin
with Query1do
begin
Close;
SQL.Clear;
SQL.Add('Select * from soft_user');
Open;
if Not Eof then
begin

//从数据库中取一些全局变量;
G_SoftUser:=FieldByName('name').asString;
G_Default_Sample:=FieldByName('Default_Sample').AsString;
G_Default_Sample_State:=FieldByName('Default_Sample_State').AsString;
G_Default_Fee_Type:=FieldByName('Default_Fee_Type').AsString;
G_LowColor:=FieldByName('Low_Color').AsInteger;
G_HighColor:=FieldByName('High_Color').AsInteger;
G_Maintain_Days:=FieldByName('History_Days').AsInteger;
G_Preview_Flag:=FieldByName('Preview_Flag').AsBoolean;
G_Hint_flag:=FieldByName('Hint_Flag').AsBoolean;
end;
Close;
end;

在登入画面的代码输入后,也无非是对数据库操作取出姓名来而已;
procedure TW_Login.E_IDKeyPress(Sender: TObject;
var Key: Char);
var
temp_count:Integer;
begin
if Key=chr(13) then
begin
with query1do
begin
Close;
SQL.Clear;
SQL.Add('Select * from op_password,physician where op_password.op_id=physician.work_id');
SQL.Add('and op_password.op_id='''+Trim(E_ID.text)+'''');
Open;
if Eof then
begin
Close;
MessageBox(0,'¸该操作员不存在,请重输¡',‘提示',MB_OK+MB_ICONWARNING+MB_DEFBUTTON1+MB_TASKMODAl);
E_ID.Text:='';
BB_Login.Enabled:=False;
E_ID.SetFocus;
Exit;
end;
E_Name.Text:=FieldbyName('name').AsString;
Close;
BB_Login.Enabled:=true;
E_Password.SetFocus;
end;
end;
end;
end.

请各位大侠指教!
 
改正一下你的SQL语句,甚至是大小写,都改用大写,如果存在UpdateSQL,那么重新生成一下SQL语句。
很多情况下这个是因为SQL语句书写不规范造成的。
别笑,这是真的。当然也可能存在真正的问题。
 
在 注销代码 段
(。。。。。。//一些菜单操作) 对TW_Login.Form有没有操作? 如果有得查一下
TW_Login.FormShow.create代码和TW_Login.FormShow.close代码。
 
菜单操作中涉及到的有 W_Login.show;
W_Main.Hide;
然后在输入代号,验证后进入主画面
 
ting__ting, 我对线程没有了解。你的帖子也都老了点吧。
这么久没有人搭理。帮你提提吧。
北京聚会怎么成你负责牵头了。费用全你出?不会吧。
佩服。
老程从来就做这个角色,嘿嘿,等聚会完了,这个家伙又要写总结了。
 
if Eof then
//此处
begin
Close;
.//此处
MessageBox(0,'¸该操作员不存在,请重输¡',‘提示',MB_OK+MB_ICONWARNING+MB_DEFBUTTON1+MB_TASKMODAl);
E_ID.Text:='';
BB_Login.Enabled:=False;
E_ID.SetFocus;
Exit;
end;
E_Name.Text:=FieldbyName('name').AsString;// if close ?
Close;
BB_Login.Enabled:=true;
E_Password.SetFocus;
 
后退
顶部