代码有没问题
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.

解决方案 »

  1.   

       Params.parambyname('f1').value:= edit1.Text;
       Params.parambyname('f2').value:= edit2.Text;
       Params.parambyname('f3').value:= edit3.Text;估计是这参数的问题吧
    这些参数需要静态添加好的,不能动态识别。你在设计环境中把参数添加上去才行注意参数是String类型的时候
      

  2.   

    问题在以下代码
    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;
      

  3.   

     没有测试环境,建议尝试Tform1关闭 时,query1.close;
      

  4.   

    调试的时候在Params.parambyname('f1').value:= edit1.Text;设一中断点检查一下Params.cout值和项就知道了。
      

  5.   

    想清楚一点,楼主的错误到底是在哪一行出来
    还是,生成了EXE文件后,一执行就出来,还是在IDE环境中打开PROJECT的时候已经出来了?很多时候,总是忘记了在IDE环境中把QUERY的ACTIVE设置为FALSE还有一种可能性,楼主是不是没有把QUERY的CONNECTION设置好呢?楼主 应该把自己的开发环境条件说清楚,这种问题应该是相对问题,在你的电脑上出现,在其他的电脑上不会出 现之类的
      

  6.   

    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;
      

  7.   

    额, 格式化参数赋值写错了,应该是
    sqlstr :=  Format(sqlstr, [edit1.Text,  edit2.Text,  edit3.Text]); 
      

  8.   

    这种错误是在对象没有Create,然后引用才出的。楼主查一下