总提示缺少分号,多步错误等最后也没有弄出来,举例吧:...
sql := 'create table MyTable (id int,data1 decimal(6,5) )';
...
Query.SQL.Clear;
Query.SQL.Add('Insert   into  MyTable (id,data1   )      ');///此处不知道如何写for i:=0 to 100 do
     Query.SQL.Add('  values ???    ');////此处又如何写呢,最好是写成变量的形式Query.ExecSQL;

解决方案 »

  1.   

    for 语句中组织字符串变量
       select a1,b1
       union all
       select a2,b2
    .... 最后再
    query1.sql.add(字符串变量)
      

  2.   

    你这样的要求需要使用这样的sqlinsert into MyTable 
    select 1,1 union
    select 2,2
      

  3.   


    for i:=0 to 100 do
    begin
         Query.SQL.Add('insert into mytable(id,datal)  values(' + editId.text + ', ' + quotedstr(edtDatal.text) + ')');////此处又如何写呢,最好是写成变量的形式
    end;
      Query.ExecSql;
    这里假设id为整数型的,两边不再用加单引号,符点型也不用加单引用
    字符串类型,日期类型两边需要加单引号,quotedstr的效果就是给字符串两边加上单引号
      

  4.   

    我觉得是楼主没有说清楚具体数据是怎么样的,我觉得以下写法是可取的。
    ...
    sql := 'create table MyTable (id int,data1 decimal(6,5) )';
    ...
    Query.clos;
    Query.SQL.Clear;
    Query.SQL.Add('select * from MYTable');
    Query.open;
    for i:=0 to 100 do
    begin
      Query.append;
      Query.fieldbyname('id').asinteger:=i;
      Query.fieldbyname('data1').value:=data1;//如果是字符型注意转化一下;
       ...........//你还要插入的其他字段
      Query.post;
    end;
      

  5.   

    to 5楼这种方法为什么只能运行一行呢?sql:=....;
    sql :=sql+') values (';Query.SQL.Add(   sql+   '111 ,1.21 )' );
    Query.SQL.Add(   sql+   '21 ,1.21 )' ); //无此行可以,有此行报分号错误
      

  6.   

    6楼你好他们说 用sql速度要快,
      

  7.   

    TO楼主:
    1楼和3楼都是让你偿试批量提交方式,主要是要组织一下代码,批量提交效率高一些,速度快。
    你现在for 是到100,如果到1K,1W,那更加要用批量(再分批量)提交了。
      

  8.   

    9楼 ,是的,可是我没看明白
    现在for不是1w,可能是百万,
    批量和分批量当然是最好的方式了
      

  9.   

    3楼中的select后面的 1和2代表什么
      

  10.   

    声明:是本地文件存贮,
    如果知道access格式,直接写文件是最好的了
      

  11.   

    ADO组件包中有个ADOSTROEDproc的控件连接你数据库(我只用过SQL2000做过)中写的存储过程。传参数到存储过程就可以了。至于怎么写存储过程你可以去SQL版去请教一些高手。
      

  12.   

    多行提交语法错误,你断点把sql内容复制出来在 查询分析器里执行正确在说举例:
    insert into MYTable 
    select 1,1 from dual unoin
    select 2,2 from dual
      

  13.   

    谢谢楼上诸位
    看来我弄出这个还要很长的路要走这个select还是看不懂
    就是用5楼add(  )照抄也没有成功,我只能在这里哈哈哈大笑了
      

  14.   

    query.close;
    query.sql.clser;
    query.sql.add('create table MyTable (id int,data1 decimal(6,5)');
    query.execsql;strSql:='INSERT INTO MyTable(id,data1) '+#13;
    For intI:=0 To 99
    Begin
     strSql:=strSql+'SELECT '+IntToStr(intI)+','+intToStr(intI*10)+' UNION ALL ' +#13;
    End;
    strSql:=strSql+'SELECT '+IntToStr(100)+','+IntToStr(100*10)
    query.close;
    query.sql.clear;
    query.sql.add(strSql);
    query.execsql;
      

  15.   

    楼主你只要知道在sql中插入多笔数据方法如:INSERT INTO #(id,data)
    SELECT 1,2 UNION ALL
    SELECT 3,4 UNION ALL
    SELECT 5,6你只要把这两行
    SELECT 1,2 UNION ALL
    SELECT 3,4 UNION ALL
    在delphi中循环拼接起来就好了。你要传什么值自己写
      

  16.   


         strSql := 'INSERT INTO MyTable  (id,data1) '+#13;
         for I := 0 to 99 do
         begin
              strSql := strSql + 'SELECT ' + IntToStr(I) + ',' + intToStr(I * 10) + ' UNION ALL ' + #13;
         end;
         strSql := strSql + 'SELECT ' + IntToStr(100) + ',' + IntToStr(100 * 10);
         query.close;
         query.sql.clear;
         query.sql.add(strSql);
         query.execsql;
    语法错误(操作符丢失)在查询表达式 '0 union all select 1'中
      

  17.   


    ...
    sql := 'create table MyTable (id int,data1 decimal(6,5) )';
    ...
    Query.SQL.Clear;
    Query.SQL.Add('Insert   into  MyTable ');for i:=0 to 100 do
         Query.SQL.Add(' select '+IntToStr(i)+','+IntToStr(i)+' Union All ');
    Query.SQL.Text:=Copy(Query.SQL.Text,1,Length(Query.SQL.Text)-10);
    Query.ExecSQL;