我用的access数据库文件名是users.mdb下面有个表为users,有两列usersname和password,全为文本。我用的adoconnection2连接的数据库,用adoquery2进行操作,我现在要对数据库数据进行添加,语句如下procedure Tzc.Button1Click(Sender: TObject);
begin
if (trim(edit1.Text)<>'') and (trim(edit2.Text)<>'') then
 begin
 with adoquery1 do
   begin
   close;
   sql.Clear;
   sql.Add('select * from student where 学号=:xm and 姓名=:xszh');
   parameters.parambyname('xm').value:=edit1.Text;
   parameters.parambyname('xszh').value:=edit2.Text;
   open;
   if recordcount < 1 then
     begin
   close;
   sql.Clear;
   sql.Add('insert into student (学号,姓名,性别,不良记录) ');
   sql.Add('Values (:xm,:nl,:bj,:xb)');
   parameters.ParamByName('xm').Value :=edit1.Text;
   parameters.parambyname('nl').value:=edit2.Text;
   parameters.parambyname('bj').value:=combobox1.Text;
   parameters.parambyname('xb').value:=0;   execsql;
    end
      else showmessage('此学生已经存在!');
   end;
 end
  else
    showmessage('录入信息不全!');
    if (trim(edit1.Text)<>'') and (trim(edit2.Text)<>'') then
    with adoquery2 do
   begin
   close;
   sql.Clear;
   sql.Add('select * from users where username=:xm');
   parameters.parambyname('xm').value:=edit1.Text;
   open;
   if recordcount < 1 then
   begin
     close;
      sql.Clear;
      sql.Add('select * from users');
      open ;
      sql.Add('insert into users (username,password) ');
      sql.Add('Values (:xm,:nl)');
      parameters.ParamByName('xm').Value :=edit1.Text;
      parameters.ParamByName('nl').Value :=edit1.Text;
      execsql;
   end;
   end;
    showmessage('新读者注册完成,用户名和默认密码皆为学号!');
    data.ADOConnection1.Close;
    data.ADOConnection1.Open();
    stum.ADOTable1.Active :=true;
    self.Close;
end;前一部分是对另一个表的添加,后面才是对users的添加操作。我运行的结果是如果edit1输入数字出现错误“FROM 子句语法错误”,如果输入英文字母不报错,这是怎么回事啊?help me!

解决方案 »

  1.   

    ADOQuery控件要设置支持中文编码
      

  2.   

     sql.Add('select * from student where 学号=:xm and 姓名=:xszh');
      parameters.parambyname('xm').value:=edit1.Text;
      parameters.parambyname('xszh').value:=edit2.Text;
      showmessage(sql);
    设置断点。open;
    估计是提交的语句不合法。修改加引号。
      

  3.   

    你那段语句啊,要是给我的话就是这么写的,一个参数都不用,抓问题多方便,可读性也强多了。参数如果不是主从表的话建议别用,问题多多。另外edit输入框最好是用trim去掉前后空格。
    procedure Tzc.Button1Click(Sender: TObject);
    begin
      if (trim(edit1.Text) <> '') and (trim(edit2.Text) <> '') then
      begin
        with adoquery1 do
        begin
          sql.text := 'select * from student where 学号=' + trim(edit1.Text) + ' and 姓名=' + trim(edit2.Text);
          open;
          if recordcount < 1 then
          begin
            sql.text := 'insert into student (学号,姓名,性别,不良记录) Values ('
              + Trim(edit1.Text) + ','
              + Trim(edit2.Text) + ','
              + Trim(combobox1.Text) + ','
              + 0;
            execsql;
          end
          else showmessage('此学生已经存在!');
        end;
      end
      else
        showmessage('录入信息不全!');  if (trim(edit1.Text) <> '') and (trim(edit2.Text) <> '') then
        with adoquery2 do
        begin
          sql.text := 'select * from users where username=' + edit1.Text;
          open;
          if recordcount < 1 then
          begin
            sql.text := 'insert into users (username,password) Values (' + trim(edit1.Text) + ',' + trim(edit1.Text) + ')';
            execsql;
          end;
        end;
      showmessage('新读者注册完成,用户名和默认密码皆为学号!');
      data.ADOConnection1.Close;
      data.ADOConnection1.Open();
      stum.ADOTable1.Active := true;
      self.Close;
    end;