Delphi怎么调试access violation at address错误

dskcv12 2015-06-09 08:34:51
代码有没问题

var
Form1: TForm1;
s:string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);//显示用户资料
begin
s:='select r1_F1 as "用户工号",r1_F2 as "用户名称",r1_F3 as "用户密码"from Rule_SysUsers_Info';
with query1 do
begin
close;
sql.Clear;
sql.Add(s);
open;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);//添加用户资料
var sqlstr:string;
begin
sqlstr:='insert into Rule_SysUsers_Info(r1_F1,r1_F2,r1_F3)values(:f1,:f2,:f3)';
with query1 do
begin
close;
sql.Clear;
sql.Add(sqlstr);
Params.parambyname('f1').value:= edit1.Text;
Params.parambyname('f2').value:= edit2.Text;
Params.parambyname('f3').value:= edit3.Text;
execsql;
end;
with query1 do
begin
close;
sql.Clear;
sql.Add(s);
open;
end;
end;
end.
...全文
863 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
踏雪无痕 2015-06-12
  • 打赏
  • 举报
回复
学习一下
holdingsword 2015-06-12
  • 打赏
  • 举报
回复
这种错误是在对象没有Create,然后引用才出的。楼主查一下
wallace_xie 2015-06-11
  • 打赏
  • 举报
回复
调试的时候在Params.parambyname('f1').value:= edit1.Text;设一中断点检查一下Params.cout值和项就知道了。
道玄希言 2015-06-11
  • 打赏
  • 举报
回复
额, 格式化参数赋值写错了,应该是 sqlstr := Format(sqlstr, [edit1.Text, edit2.Text, edit3.Text]);
道玄希言 2015-06-11
  • 打赏
  • 举报
回复


procedure TForm1.Button2Click(Sender: TObject);//添加用户资料
var sqlstr, s : string;
begin
  s:='select r1_F1 as "用户工号",r1_F2 as "用户名称",r1_F3 as "用户密码"from Rule_SysUsers_Info';
  sqlstr:='insert into Rule_SysUsers_Info (r1_F1,r1_F2,r1_F3) values(''%s'', ''%s'', ''%s'')';
  sqlstr :=  Format(sqlstr, [edit1.Text,  edit1.Text,  edit1.Text]); 
  with query1 do
  begin
   close;
   sql.Clear;
   sql.Add(sqlstr);
   execsql;
  end;
  with query1 do
   begin
     close;
     sql.Clear;
     sql.Add(s);
     open;
   end;
end;

doloopcn 2015-06-11
  • 打赏
  • 举报
回复
想清楚一点,楼主的错误到底是在哪一行出来 还是,生成了EXE文件后,一执行就出来,还是在IDE环境中打开PROJECT的时候已经出来了? 很多时候,总是忘记了在IDE环境中把QUERY的ACTIVE设置为FALSE 还有一种可能性,楼主是不是没有把QUERY的CONNECTION设置好呢? 楼主 应该把自己的开发环境条件说清楚,这种问题应该是相对问题,在你的电脑上出现,在其他的电脑上不会出 现之类的
zoucp 2015-06-10
  • 打赏
  • 举报
回复
没有测试环境,建议尝试Tform1关闭 时,query1.close;
wallace_xie 2015-06-10
  • 打赏
  • 举报
回复
问题在以下代码 sqlstr:='insert into Rule_SysUsers_Info(r1_F1,r1_F2,r1_F3)values(:f1,:f2,:f3)'; .. sql.Add(sqlstr); 你只是对query的sql增加sql语句,运行时delphi是不会自动创建params的项的。然后你又直接对params的项进行赋值 Params.parambyname('f1').value:= edit1.Text; Params.parambyname('f2').value:= edit2.Text; Params.parambyname('f3').value:= edit3.Text; 肯定越界了。 要赋值可以,一在设计时生成sql语句,delphi自动生成params的项,可以直接赋值。 二。动态创建,就在你代码增加三条语句 Params.CreateParam(ftString,'f1', ptInput); Params.CreateParam(ftString,'f2', ptInput); Params.CreateParam(ftString,'f3', ptInput); Params.parambyname('f1').value:= edit1.Text; Params.parambyname('f2').value:= edit2.Text; Params.parambyname('f3').value:= edit3.Text;
dskcv12 2015-06-10
  • 打赏
  • 举报
回复
试过了,还是有那个错误
doloopcn 2015-06-10
  • 打赏
  • 举报
回复
Params.parambyname('f1').value:= edit1.Text; Params.parambyname('f2').value:= edit2.Text; Params.parambyname('f3').value:= edit3.Text; 估计是这参数的问题吧 这些参数需要静态添加好的,不能动态识别。你在设计环境中把参数添加上去才行 注意参数是String类型的时候

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧