用createthread来建立的线程,里面要用的ado操作。现在有个问题,
线程函数后面加了stdcall。不加这个没法传进去参数,就是一个连接字符串,加了stdcall的话,在ado操作的时候就报错,在这一句,adoquery.sql.add('')这里,不知道为什么这个只是加一个sql语句的处理都会出错,去掉stdcall就可以,不会出错,以前都是用类操作线程,现在用createthread就出这个问题了。高手请帮帮忙。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ADODB,ActiveX, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      Tpp = ^string;
    var
      Form1: TForm1;
      ssss:string;
    implementation{$R *.dfm}
    function get(pp:Tpp):Boolean;stdcall;
    var aq:TADOQuery;
    begin
      CoInitialize(nil);
      aq:=TADOQuery.Create(nil);
      aq.ConnectionString:=pp^;
      aq.SQL.Add('select * from td_load');
      aq.Open;  aq.Free;
      CoUninitialize
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var id:DWORD;
    begin
      ssss:='kdddddddddddddddddddddddddddddddddd';
      CreateThread(nil,0,@Get,@ssss,0,id);
    end;end.
      

  2.   

    就在这句会出错aq.SQL.Add('select * from td_load');
      

  3.   

    ssss:='kdddddddddddddddddddddddddddddddddd';
    这里是这样的吗?
    如果是的话,把这里修改为连接数据库的地址,类型,还有用户密码等...
    都没连接上数据库在aq.SQL.Add('select * from td_load');这里当然报错了~
    只用过一次数据库,不知道说的对不对
      

  4.   

    这个和线程无关,你在CreateThread是否有把IsMultiThread置为True?