with query1 do
      begin
        close;
        sql.Clear;
        sql.Text:= 'insert into analyse(Date,Time,Ext,Co,Dial_Number,Ring,Duration,Acc,Code,Cd) values('+s[0]+','+s[1]+','+s[2]+','+s[3]+','+s[4]+','+s[5]+','+s[6]+','+s[7]+','+s[8]+',:'+s[9]+')'; {       sql.Add('insert into analyse(Date,Time,Ext,Co,Dial_Number,Acc,Code,Cd) values(:a0,:a1,:a2,:a3,:a4,:a5,:a6,:a7,:a8,:a9)');
        Parameters.ParamByName('a0').Value:= s[0];
        Parameters.ParamByName('a1').Value:= s[1];
        Parameters.ParamByName('a2').Value:= s[2];
        Parameters.ParamByName('a3').Value:= s[3];
        Parameters.ParamByName('a4').Value:= s[4];
        Parameters.ParamByName('a5').Value:= s[5];
        Parameters.ParamByName('a6').Value:= s[6];
        Parameters.ParamByName('a7').Value:= s[7];
        Parameters.ParamByName('a8').Value:= s[8];
        Parameters.ParamByName('a9').Value:= s[9]; }
        showmessage(sql.Text);
        ExecSQL;我用sql.text那行就可以執行SQL語句,但報不正常的定義參數對象,提供了不一致或不完整的信息
而用sql.add那行卻不能執行SQL,報錯說,insert into 語法錯誤
請幫我看看

解决方案 »

  1.   

    sql.Text:=  'insert into analyse(Date,Time,Ext,Co,Dial_Number,Ring,Duration,Acc,Code,Cd) values( '+s[0]+ ', '+s[1]+ ', '+s[2]+ ', '+s[3]+ ', '+s[4]+ ', '+s[5]+ ', '+s[6]+ ', '+s[7]+ ', '+s[8]+ ',: '+s[9]+ ') '; 
    '+s[8]+ ',: '+s[9]+ ') '; 这里 : 干嘛用的?
      
      

  2.   

    1. 使用sql.Text時,“',: '"中的":"是多餘的
    2.         Parameters.ParamByName( 'a0 ').Value:= s[0]; 
            Parameters.ParamByName( 'a1 ').Value:= s[1]; 
            Parameters.ParamByName( 'a2 ').Value:= s[2]; 
            Parameters.ParamByName( 'a3 ').Value:= s[3]; 
            Parameters.ParamByName( 'a4 ').Value:= s[4]; 
            Parameters.ParamByName( 'a5 ').Value:= s[5]; 
            Parameters.ParamByName( 'a6 ').Value:= s[6]; 
            Parameters.ParamByName( 'a7 ').Value:= s[7]; 
            Parameters.ParamByName( 'a8 ').Value:= s[8]; 
            Parameters.ParamByName( 'a9 ').Value:= s[9]; 以上代碼,s數組,使用一個類型,必須進行類型轉換。
      

  3.   

    sql.Text:=  'insert into analyse(Date,Time,Ext,Co,Dial_Number,Ring,Duration,Acc,Code,Cd) values( '+s[0]+ ', '+s[1]+ ', '+s[2]+ ', '+s[3]+ ', '+s[4]+ ', '+s[5]+ ', '+s[6]+ ', '+s[7]+ ', '+s[8]+ ',: '+s[9]+ ') ';
    '+s[9]+ '前面怎么多了个:号
      

  4.   

    假設參數a0是整數字段,那么你在賦值的時候需要把s[0]轉為integer類型
    如果是字符型字段,那么賦值時把數組元素轉化為字符型
    依此類推...
      

  5.   

    给你调用存储过程的事例: 
     with adoqy7 do
           begin
               close;
               sql.Clear;
               sql.Add('exec alter_compartmentusedetail_comsume :ht,:ht1,:ht2,:ht3,:ht4,:ht5,:ht6,:ht7,:ht8,:ht9,:ht10,:ht11,:ht12');
               parameters.ParamByName('Ht').Value:=factpay;
               parameters.ParamByName('Ht1').Value:=factpay1;
               parameters.ParamByName('Ht2').Value:=glname;
               parameters.ParamByName('Ht3').Value:=inttostr(gl);
               parameters.ParamByName('Ht4').Value:=cardno;
               parameters.ParamByName('Ht5').Value:=inttostr(mdcidyue);
               parameters.ParamByName('Ht7').Value:=fcuid;
               parameters.ParamByName('Ht8').Value:=backid;
               parameters.ParamByName('Ht9').Value:=cardno1;
               parameters.ParamByName('Ht6').Value:=waieerID; //补求服务员后刷卡的情况,也能使服务员ID进入酒水消费表
               parameters.ParamByName('Ht10').Value:=factpay2;
               parameters.ParamByName('Ht11').Value:=mdcid;
               parameters.ParamByName('Ht12').Value:=strtofloat(edt_cuzk.Text);
               end;
      

  6.   

    拷错了,正确如下:
    with adoqy7 do 
           begin 
               close; 
               sql.Clear; 
               sql.Add( 'exec alter_compartmentusedetail_comsume :ht,:ht1,:ht2,:ht3,:ht4,:ht5,:ht6,:ht7,:ht8,:ht9,:ht10,:ht11,:ht12 '); 
               parameters.ParamByName( 'Ht ').Value:=factpay; 
               parameters.ParamByName( 'Ht1 ').Value:=factpay1; 
               parameters.ParamByName( 'Ht2 ').Value:=glname; 
               parameters.ParamByName( 'Ht3 ').Value:=inttostr(gl); 
               parameters.ParamByName( 'Ht4 ').Value:=cardno; 
               parameters.ParamByName( 'Ht5 ').Value:=inttostr(mdcidyue); 
               parameters.ParamByName( 'Ht7 ').Value:=fcuid; 
               parameters.ParamByName( 'Ht8 ').Value:=backid; 
               parameters.ParamByName( 'Ht9 ').Value:=cardno1; 
               parameters.ParamByName( 'Ht6 ').Value:=waieerID; //补求服务员后刷卡的情况,也能使服务员ID进入酒水消费表 
               parameters.ParamByName( 'Ht10 ').Value:=factpay2; 
               parameters.ParamByName( 'Ht11 ').Value:=mdcid; 
               parameters.ParamByName( 'Ht12 ').Value:=strtofloat(edt_cuzk.Text); 
                 execsql;