我在关闭MDI窗体时出现了这样的错误提示"Access violation at address 00000014.Read of address 00000014.";
而且程序无法释放,那位能帮忙解决一下!这是登录窗体的代码(普通窗体):
procedure TForm_login.labClick(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='select yg_mm,yg_yhbh,yg_ygqx from yg where yg_yhbh='''+edit1.text+'''';
ADOQuery_LOGIN.Close;
ADOQuery_LOGIN.SQL.Clear;
ADOQuery_LOGIN.SQL.Add(sqlstr);
ADOQuery_LOGIN.Open;
ygqx:=ADOQuery_LOGIN.FieldByName('yg_ygqx').AsString;
if ADOQuery_LOGIN.FieldByName('yg_yhbh').AsString='' then
begin
ShowMessage('对不起,用户名不存在!');
exit;
end;
if ADOQuery_LOGIN.FieldByName('yg_mm').AsString=edit2.Text then
begin
application.CreateForm(TForm_main,Form_main);//验证成功的话进入FORM_MAIN(MDI窗体)
Form_main.ShowModal;
end
else ShowMessage('对不起!密码有误!')
end;下面是FROM_MAIN(MDI)的部份代码:
procedure TForm_main.FormCreate(Sender: TObject);
var m,qxstr:string;
count,n,i,k,e:integer;
begin
qxstr:=ygqx; //得到对应的登录者的权限字符串从FROM_LOGIN中得到
count:=ComponentCount-2;//共有多少个控件项
k:=0;
for i:=0 to count do
begin
if Components[i].Name='MainMenu1' then
n:=i; //得到菜单项的开始值
if components[i].Name='N18' then
e:=i; //得到菜单项结束
end;
for i:=n+1 to e-n do //从菜单项开始到菜单项结束
begin
m:=LeftStr(qxstr,1);//得到权限字符串的第一个权限值
//ShowMessage(m+'是'+inttostr(i));
if m='1' then
TMenuItem(Components[i]).Visible:=true //令有操作权限的菜单可视
else
TMenuItem(Components[i]).Visible:=false; //否则为不可视
qxstr:=rightstr(qxstr,e-n-i);//把已提取的权限值去除
end;
Form_login.Free;
end;
就这样子,每次进入FROM_MAIN后,想要关闭它,都会提示"violation at address 00000014.Read of address 00000014",而且无法释放掉该进程!
各位大虾帮帮忙!谢谢!
而且程序无法释放,那位能帮忙解决一下!这是登录窗体的代码(普通窗体):
procedure TForm_login.labClick(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='select yg_mm,yg_yhbh,yg_ygqx from yg where yg_yhbh='''+edit1.text+'''';
ADOQuery_LOGIN.Close;
ADOQuery_LOGIN.SQL.Clear;
ADOQuery_LOGIN.SQL.Add(sqlstr);
ADOQuery_LOGIN.Open;
ygqx:=ADOQuery_LOGIN.FieldByName('yg_ygqx').AsString;
if ADOQuery_LOGIN.FieldByName('yg_yhbh').AsString='' then
begin
ShowMessage('对不起,用户名不存在!');
exit;
end;
if ADOQuery_LOGIN.FieldByName('yg_mm').AsString=edit2.Text then
begin
application.CreateForm(TForm_main,Form_main);//验证成功的话进入FORM_MAIN(MDI窗体)
Form_main.ShowModal;
end
else ShowMessage('对不起!密码有误!')
end;下面是FROM_MAIN(MDI)的部份代码:
procedure TForm_main.FormCreate(Sender: TObject);
var m,qxstr:string;
count,n,i,k,e:integer;
begin
qxstr:=ygqx; //得到对应的登录者的权限字符串从FROM_LOGIN中得到
count:=ComponentCount-2;//共有多少个控件项
k:=0;
for i:=0 to count do
begin
if Components[i].Name='MainMenu1' then
n:=i; //得到菜单项的开始值
if components[i].Name='N18' then
e:=i; //得到菜单项结束
end;
for i:=n+1 to e-n do //从菜单项开始到菜单项结束
begin
m:=LeftStr(qxstr,1);//得到权限字符串的第一个权限值
//ShowMessage(m+'是'+inttostr(i));
if m='1' then
TMenuItem(Components[i]).Visible:=true //令有操作权限的菜单可视
else
TMenuItem(Components[i]).Visible:=false; //否则为不可视
qxstr:=rightstr(qxstr,e-n-i);//把已提取的权限值去除
end;
Form_login.Free;
end;
就这样子,每次进入FROM_MAIN后,想要关闭它,都会提示"violation at address 00000014.Read of address 00000014",而且无法释放掉该进程!
各位大虾帮帮忙!谢谢!
解决方案 »
- 关于PolyPolyline的使用
- 笨蛋问:如何把123456789转换成ABCDEFGHI?
- table控件
- 输入一个汉字字符串'我爱中国',怎么返回他的首拼'WAZG'
- 关于Delphi在WindowXP SP2 下的问题
- 再弱问,fastreport中,怎么获得dateset的字段名? 我想动态设置titlebond上memo的字段名
- 如何把jpg的图片改变成指定大小后再保存回磁盘。请指教。
- 光驱!!!
- 关于用installshield如何做client/sever程序的问题
- 请教大家,请看下面。。。
- 请大家给个方法 如何用delphi通过网页操作数据库?
- 要完成这样的功能,该学些什么??
Form_main.ShowModal;
-----------------------------------------
我也遇到到过你这样的问题(不过没管它了),我想是上面创建窗体那里面有问题,当然不是说写法不正确,换一种方式试试
在主窗体 Close 事件里方可药到病除!!!