我用Tquery、database、datasource作了一个往access库中写入的程序,但每次只能写入三个字段,如果多于三个字段就提示
“INSERT INTO:语句的语法错误”,
请问这是为何?
(用的是DELPHI6.0)
程序如下: 
procedure TForm1.Button1Click(Sender: TObject);
begin
   with query1 do
   begin
     close;
     with sql do
        begin
          clear;
         Add(’insert into cust_info1 (id,name,sex,level,acct,card)’);
          add(’values(:id,:name,:sex,:level,:acct,:card)’);
          
          end;
        parambyname(’id’).asstring:=Edit4.text;
        parambyname(’name’).asstring:=edit1.text;
        parambyname(’sex’).asstring:=ComboBox1.text;
        parambyname(’level’).asstring:=ComboBox2.text;
        parambyname(’acct’).asstring:=edit2.text;
        parambyname(’card’).asstring:=edit3.text;
        ExecSQL;
        Close;
        sQL.Clear;
        sQL.Add(’select * from cust_info1’);
        open;
     end;
end;  

解决方案 »

  1.   

    请问:
    Prepare;
    加在什么位置?
      

  2.   


    我用的是access数据库,字段中除主索引字段为整型外,其他全为文本格式,确实是当我把Add(’insert into cust_info1 (id,name,sex,level,acct,card)’);改为Add(’insert into cust_info1 (id,name,sex)’);后,操作就成功了,但如果加上level,就提示“INSERT INTO:语句的语法错误”请问如何解决哈?!
    谢先!
      

  3.   

    [level]加上【】 标记
    应该就ok了
    我以前有过类似经验
      

  4.   

    level:按惯例是integer型的.
     所以你的
    parambyname(’level’).asstring:=ComboBox2.text;
    改成
    parambyname(’level’).value:=Strtoint(ComboBox2.text); 另外,对参数赋值最好使用parambyname('paramName').value :=...
      而不要用ASSTRING:=...这样的格式. with query1 do
       begin
         close; 
        
         with sql do
            begin
              clear;         Add(’insert into cust_info1 (id,name,sex,level,acct,card)’);
              add(’values(:id,:name,:sex,:level,:acct,:card)’);
      prepared ;................... 放在这里可以.不过,PREPARED是要占资源的,所以在CLOSE后须用UNPREPARED来放掉.