procedure TForm1.Button1Click(Sender: TObject);
var
  FADOConnection:TADOConnection;
  FADOQuery:TADOQuery;
begin
  FADOConnection:=TADOConnection.Create(nil);
  FADOConnection.LoginPrompt:=False;
  FADOConnection.ConnectionString:='DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=test; USER=root; PASSWORD=123456';
  FADOConnection.Open;
  FADOQuery:=TADOQuery.Create(nil);
  FADOQuery.Connection:=FADOConnection;
  FADOQuery.SQL.Add('update tab1 set ldate=''2009.02.17 18:29:57'' where guid = ''{F8A4F2A9-15E5-4271-9F67-CF1BBAA80B02}'';');
  FADOQuery.SQL.Add('update tab2 set ldate=''2009.02.17 18:29:57'' where ip=''114.105.71.163''');
  ShowMessage(FADOQuery.SQL.Text);
  FADOQuery.ExecSQL;
  ShowMessage('OK');
end;单个语句可以执行,Show出来的结果到MySQL的查询管理器中也可以执行,应该是MySQL语法拼接错误或者就是ADOQuery根本不能执行多条,就用ADOQuery组件,不要提用其它的组件,如果ADO不能的话就单条执行了

解决方案 »

  1.   


    Delphi(Pascal) code
    procedure TForm1.Button1Click(Sender: TObject);
    var
      FADOConnection:TADOConnection;
      FADOQuery:TADOQuery;
      str : TstringList;
       i : integer;
    begin
      FADOConnection:=TADOConnection.Create(nil);
      FADOConnection.LoginPrompt:=False;
      FADOConnection.ConnectionString:='DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=test; USER=root; PASSWORD=123456';
      FADOConnection.Open;
      FADOQuery:=TADOQuery.Create(nil);
      FADOQuery.Connection:=FADOConnection;
      str := Tstringlist.create;
      try
       str.append('update tab1 set ldate=''2009.02.17 18:29:57'' where guid = ''{F8A4F2A9-15E5-4271-9F67-CF1BBAA80B02}'';');
       str.append('update tab2 set ldate=''2009.02.17 18:29:57'' where ip=''114.105.71.163''');
       for i := 0 to str.count -1 do 
       begin
        FADOQuery.sql.text := Str.string[i];
        FADOQuery.ExecSQL;
       end;
      finally
        FreeANdNil(Str);
      end;
      ShowMessage('OK');
    end;我上次就樣搞的。也不知道怎麼搞的,就是不能批量。也有可能還有我不知道的。不過CMD下是可能LOAD的,暈倒啊。
      

  2.   

    只能单条执行 和数据库有关 Access好像也是这样
      

  3.   

    谢谢,Starluck的建议,不给分都不行啊,在等等看,如果没有更好的办法话,就按你的循环执行
      

  4.   

    FADOQuery.sql.text :=' begin ' + strExcuteSQL + ' commit; exception when others then rollback; raise; end;';
    oracle可以这样,不知道mysql行不,如果支持事务应该就行吧
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      FADOConnection:TADOConnection;
      FADOQuery:TADOQuery;
    begin
      FADOConnection:=TADOConnection.Create(nil);
      FADOConnection.LoginPrompt:=False;
      FADOConnection.ConnectionString:='DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=test; USER=root; PASSWORD=123456';
      FADOConnection.Open;
      FADOQuery:=TADOQuery.Create(nil);
      FADOQuery.Connection:=FADOConnection;
      FADOQuery.SQL.Add('update tab1 set ldate=''2009.02.17 18:29:57'' where guid = ''{F8A4F2A9-15E5-4271-9F67-CF1BBAA80B02}'';update tab2 set ldate=''2009.02.17 18:29:57'' where ip=''114.105.71.163''');
      ShowMessage(FADOQuery.SQL.Text);
      FADOQuery.ExecSQL;
      ShowMessage('OK');
    end;
      

  6.   

    用事务是在ADOCONNECTION上设置
    Delphi(Pascal) code
    procedure TForm1.Button1Click(Sender: TObject);
    var
      FADOConnection:TADOConnection;
      FADOQuery:TADOQuery;
      str : TstringList;
       i : integer;
    临时创建的,如果常用,最好用组件,创建一次是要点时间的。FADOQuery要不要FREE,你要注意一下。
      

  7.   

    与连接无关系!
    EXECSQL实际上是在T-SQL中运行EXEC()这个过程~
    即EXEC('update tab1 set ldate=''2009.02.17 18:29:57'' where guid = ''{F8A4F2A9-15E5-4271-9F67-CF1BBAA80B02}'')
    EXEC不支持批处理,是单句执行~
    你的语句showtext之后能执行是因为你的txt文本没有exec,所以T-SQL是以批处理的方式执行~