小弟有个按钮进行如下设置:
edit1.text := '';
edit2.text := '';
...
edit8.text := ''
用于把edit控件清空,然后提示用户输入相关的输入,然后执行下面的代码:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;                               
ADOQuery1.SQL.Add('Insert into distributor');
ADOQuery1.SQL.Add('(Distri_num,Boss_name,Distri_company,Address,Phone,Bank_name,Bank_num,Memo)');
ADOQuery1.SQL.Add('Values');
ADOQuery1.SQL.Add('(:Distri_num,:Boss_name,:Distri_company,:Address,:Phone,:Bank_name,:Bank_num,:Memos)');ADOQuery1.Prepared := False;
ADOQuery1.Parameters.ParamByName('Distri_num').value :=Edit1.Text;
ADOQuery1.Parameters.ParamByName('Boss_name').value :=Edit3.Text;
ADOQuery1.Parameters.ParamByName('Distri_company').value := Edit2.Text;
ADOQuery1.Parameters.ParamByName('Address').value := Edit4.Text;
ADOQuery1.Parameters.ParamByName('Phone').value := Edit5.Text;
ADOQuery1.Parameters.ParamByName('Bank_name').value := Edit6.Text;
ADOQuery1.Parameters.ParamByName('Bank_num').value := Edit7.Text;
ADOQuery1.Parameters.ParamByName('Memos').value := Edit8.Text;ADOQuery1.Prepared;
ADOQuery1.ExecSQL;但是系统执行后出现如下的问题,提示数据库出错,我试过了,将Edit1.text :=''这一段设置去掉的话,下面的代码是可以正确执行的,我用单步调试进行了测试,发现
ADOQuery1.Parameters.ParamByName('Distri_num').value :=Edit1.Text
所接受的edit.text数据不是我后来输入的数据,而是‘’,因为Distri_num是关键字,所以系统报错,请问大大为什么edit.text不是我后来要求用户输入的数据阿?
如何改写?

解决方案 »

  1.   

    应该没问题
    是不是别的事件里给edit1负值了
      

  2.   

    没有别的事件给edit.text赋值,而且只要把edit1.text:=''等语句改掉,下面的语句就可以顺利执行,奇怪阿,哪里有问题阿?
      

  3.   

    你在事件中第一句就写了edit1.text := '',
    那不管你填了什么,你首先就把它给赋空了嘛!
    你可以先写SQL语句,
    然后在后面给edit赋空试一试!
      

  4.   

    你把edit 的.text的为‘’去掉
    直接用
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;                               
    ADOQuery1.SQL.Add('Insert into distributor');
    ADOQuery1.SQL.Add('(Distri_num,Boss_name,Distri_company,Address,Phone,Bank_name,Bank_num,Memo)');
    ADOQuery1.SQL.Add('Values');
    ADOQuery1.SQL.Add('(:Distri_num,:Boss_name,:Distri_company,:Address,:Phone,:Bank_name,:Bank_num,:Memos)');ADOQuery1.Prepared := False;
    ADOQuery1.Parameters.ParamByName('Distri_num').value :=Edit1.Text;
    ADOQuery1.Parameters.ParamByName('Boss_name').value :=Edit3.Text;
    ADOQuery1.Parameters.ParamByName('Distri_company').value := Edit2.Text;
    ADOQuery1.Parameters.ParamByName('Address').value := Edit4.Text;
    ADOQuery1.Parameters.ParamByName('Phone').value := Edit5.Text;
    ADOQuery1.Parameters.ParamByName('Bank_name').value := Edit6.Text;
    ADOQuery1.Parameters.ParamByName('Bank_num').value := Edit7.Text;
    ADOQuery1.Parameters.ParamByName('Memos').value := Edit8.Text;ADOQuery1.Prepared;
    ADOQuery1.ExecSQL;
      

  5.   

    楼上的大大,edit1.text:=''是需要的,这样用户可以在空白的情况下进行输入。
      

  6.   

    大大,还是不行啊?我输入数据的时候系统好像还是没有接收到我的数据,提示distri_num不能为' '。在线等待,解决问题立即给分。
      

  7.   

    EDIT的值被你清空了。 
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;                               
    ADOQuery1.SQL.Add('Insert into distributor');
    ADOQuery1.SQL.Add('(Distri_num,Boss_name,Distri_company,Address,Phone,Bank_name,Bank_num,Memo)');
    ADOQuery1.SQL.Add('Values');
    ADOQuery1.SQL.Add('(:Distri_num,:Boss_name,:Distri_company,:Address,:Phone,:Bank_name,:Bank_num,:Memos)');ADOQuery1.Prepared := False;
    ADOQuery1.Parameters.ParamByName('Distri_num').value :=Edit1.Text;
    ADOQuery1.Parameters.ParamByName('Boss_name').value :=Edit3.Text;
    ADOQuery1.Parameters.ParamByName('Distri_company').value := Edit2.Text;
    ADOQuery1.Parameters.ParamByName('Address').value := Edit4.Text;
    ADOQuery1.Parameters.ParamByName('Phone').value := Edit5.Text;
    ADOQuery1.Parameters.ParamByName('Bank_name').value := Edit6.Text;
    ADOQuery1.Parameters.ParamByName('Bank_num').value := Edit7.Text;
    ADOQuery1.Parameters.ParamByName('Memos').value := Edit8.Text;ADOQuery1.Prepared;
    ADOQuery1.ExecSQL;
    edit1.text := '';
    edit2.text := '';
    ...
    edit8.text := ''
    这样就可以了。
      

  8.   

    请问楼上的大大,那我之前要求Edit1.text为空值,以方便用户输入,这段代码怎么写,放什么地方啊?
      

  9.   

    先判断edit1.text='';
    如果为空就把
    ADOQuery1.Parameters.ParamByName('Distri_num').value := '''';
    或者直接用
    ADOQuery1.Parameters.ParamByName('Distri_num').value := edit1.text=''?'''',edit1.text;
      

  10.   

    你用一个按钮要同时做两次工作
    1.你要清空EDIT
    2.你要让用户输入相关信息
    那我就要问你,这一个事件发生时,你如何知道用户已经输入完毕,你又要去调用其他事件吗?
    所以这段代码本身就有问题,当你执行了清空后,那就不可能在去让用户取得值再去QUERY.EXECSQL, 清空EDIT必须和取值分开.
      

  11.   

    简单问题复杂话,直接执行SQL不就可以了
      

  12.   

    你form.show的时候把edit清空。
    你不能用同一个按钮即让它清空又让它赋值
    或者你可以在form.close中把它们清空。
    试一试。我的程序中可以。
      

  13.   

    如我上面所说
    你在执行完后清空edit 那下次运行前不就是空值了吗!