空格掉了
sql.add('insert into e_basic (name,code) ');
sql.add('values(:ename,:ecode) ');
sql.add('insert into e_basic (folk,clan) ');
sql.add('values(:nationality,:homeplace)');
而且你两个Sql这样连写似乎有问题吧

解决方案 »

  1.   

    空格可不加,两个sql联写,不能执行。
    为什么不insert into e_basic (name,code,folk,clan)...
      

  2.   

    空格加了也不行的
    因为我表中的字段比较多,写一个sql insert的话太长了,所以想分开来写。
    还有是不是可以不用params.paramvalues呀,直接在values后写name.text,code.text...等呢?
      

  3.   

    query的SQL中只能加入一条SQL语言,你可以合成一条语言或用EXECUTE语言
      

  4.   

    我改成如下程序,报错“无效的用户.表.列,表.列焕感说明”
    with datamodule1.e_basicquery do
    begin
    mysql:='insert into e_basic (ename,ecode,sex,birthday,edulevel,specialty,'+
           'nationality,homeplace,folk,clan,wedlock,address,zipcode,phone,'+
           'edcard,archivesid,relation) '+
           'values (ename.text,ecode.text,sexfield,'+
           'formatdatetime(''yyyy-mm-dd'',birthday.Date),'+
           'edulevel.text,specialty.text,nationality.text,homeplace.text,'+
           'folk.text,clan.text,wedlock.text,address.Text,zipcode.text,'+
           'phone.text,idcard.text,archivesid.text,relation.text)';
    sql.clear;
    sql.add(mysql);
    execsql;
    applyupdates;
    commitupdates;
    end;
      

  5.   

    为何不这样写呢?
     var SqlStr: widestring;
     SqlStr:= '';
     with datamodule1.query1 do
     begin
       close;
       sql.clear;  
       SqlStr:= 'insert into e_basic (name,code,folk,clan) '
       SqlStr:= SqlStr+'values('+Name.Text+','+Code.Text+','+folk.Text+','+Clan.Text+')';
       Sql.Add(SqlStr);
       ExceSql();
     end;
     
     Good job.
     
     
      

  6.   

    to linkie:
    那我后来改的程序(在你回复的上面)错在哪里呀,是不是一定要写成('+Name.Text+','+Code.Text+','+folk.Text+','+Clan.Text+')'格式呀?
      
      
      

  7.   

    当然,否则'name.txt'就是一个字符串了。
    若你用个string 变量,注意要加空格,例如
    str:='insert into table1 (name)';
    str:=str+' values(.....)';
             ^^
    直接用sql.add,可以不加空格
    sql.add('insert into table1 (name);
    sql.add('value(...)';
      

  8.   

    用Format,不要用什么Params
    const 
      SQLString='insert into myTable(Field1,Field2...) Values(''%s'',%s,%d,%f)';with Query1 do
    begin
      SQL.Text := Format(SQLString, [edit1.text,edit2.text,35,235.00103]);
      ExecSQL;
    end;
    多方便。呵呵
      

  9.   

      那我的字段多,如何换行又成问题了,我启用了query1的cachedupdate属性,而且想用事务提交所作修改,能不能帮我解决换行问题呢,就在我后来的程序上改,好吗?要是可以运行了,我一定另加20-30分
      

  10.   

    定义常量的时候进行行的换行嘛。
    const 
      SQLString= 'insert into myTable(FieldName1,FieldName2.....)' + #13 +
        'Value(%s,''%s'',%d, %f' + #13 +
        '%s,%s)' + #13 +
        'where ...';加个#13就可以了。
    SQL管它换不换行了语法对了就行了。
    注意的地方是:%s和''%s'',你在执行的时候,用S:=SQL.Text;Inputquery('','',S);然后copy出来调试一下。
      

  11.   

    我用了format,可是提示“缺少values关键字”
    const
      SQLString= 'insert into test(edulevel,nationality,' + #13 +
        'folk,clan)'+ #13 +
        'Value(%s,%s,%s,%s)';
    begin
    with Query1 do
    begin
      SQL.Text := Format(SQLString, [edit1.text,edit2.text,edit3.text,edit4.text]);
      ExecSQL;
    end;
      

  12.   

    还有%s和''%s''有什么区别呀,我是新手,我真的看不出,不都是用edit.text来替换嘛
      

  13.   

    简单一点吧,谁能把下面的程序改对?原来有”列在此处不允许“
    procedure TForm1.Button1Click(Sender: TObject);
    var mysql:string;
    begin
    mysql:='';
    mysql:=mysql+'insert into test (edulevel,nationality,';
    mysql:=mysql+'folk,clan) values (edit1.text,';
    mysql:=mysql+'edit2.text,edit3.text,edit4.test)';
    query1.sql.clear;
    query1.sql.add(mysql);
    query1.ExecSQL;
    end;
    end.
      

  14.   

    procedure TForm1.Button1Click(Sender: TObject);
    var mysql:string;
    begin
    mysql:='insert into test (edulevel,nationality,';
    mysql:=mysql+'folk,clan) values ('''+edit1.text;
    mysql:=mysql+''','''+edit2.text+''','''+edit3.text+''','''+edit4.test+''')';
    query1.sql.clear;
    query1.sql.add(mysql);
    query1.ExecSQL;
    end;
    end. 
      

  15.   

    With Query1.Sql do
      begin
        Add('insert into test(字段1,字段2,...........) Values('); // 注意空格;
        Add(Format('%s,%s,%s,%s',[Edit1.text,Edit2.text,Edit3.text,Edit4.text]);
        Add(')');
      end;
    Query1.ExecSql;
      

  16.   

    或:
    procedure TForm1.Button1Click(Sender: TObject);
    var mysql:string;
    begin
      with query1 do
      begin
        sql.clear;
        sql.add('insert into test (edulevel,nationality,');
        sql.add('folk,clan) values (:p1,:p2,:p3,:p4)');
        parambyname('p1').asstring:=edit1.text;
        parambyname('p2').asstring:=edit2.text;
        parambyname('p3').asstring:=edit3.text;
        parambyname('p4').asstring:=edit4.text;
        ExecSQL;
      end;
    end; 
      

  17.   

    我要提醒你的是,对于字符串型的字段,在生成Sql语句时,可能要对该字段值进行单引号(“'”)的预处理,也就是将该值中任何一个单引号都替换成“''”,即换成两个单引号,如果
    你根据我的方式生成Sql语句的话。
      

  18.   

    空格掉了,并且俩句insert要分开:
    sql.add('insert into e_basic (name,code)');
    sql.add(' values(:ename,:ecode) ');
    execsql;
    sql.add('insert into e_basic (folk,clan)');
    sql.add(' values(:nationality,:homeplace)');
    execsql;
      

  19.   

    呵呵。。我最喜欢玩这个花样了。"''"+"''"+'asdfas'+asdfasd+"fasdfa"+'"'
    呵呵