hthread := CreateThread(nil, 0,   @TFormDataSet.ConnectDb,nil, 0, ThreadID);procedure TFormDataSet.ConnectDb ;
begin
FormDataSet.ADOConnectionDbSet.Connected := FALSE;
conn:=...
FormDataSet.ADOConnectionDbSet.ConnectionString:=conn;
FormDataSet.ADOConnectionDbSet.Connected := true;
FormDataSet.ADOConnectionDbSet.LoginPrompt := false;

解决方案 »

  1.   

    要引用边界。否则会出现多个线程连接冲突CoInitialize(Nil); and CoUninitialize;
      

  2.   

    为什么在datamodel里面调用这个CreateThread  还是会出错  内存read
      

  3.   

    hthread := CreateThread(nil, 0,  @TFormDataSet.ConnectDb,nil, 0, ThreadID);
    因為取的是對象方法...
    建議不要把方法放在對象內,并且調用慣例申明為stdcall
      

  4.   


    已经声明为stdcall,不放在CreateThread内 那要放哪里啊?
      

  5.   


    -_-!!  是說ConnectDb不放在對象體內1、可以把ConnectDb獨立出來,不放在類里面;
    2、也可以放在類里面,但必須按如下做:
    var
       m: TMethod; 
    begin 
       m := ConnectDb; 
       CreateThread(nil,0,@m.Code,m.Data,0,ThreadID); 
      

  6.   

    m := ConnectDb; ?[错误] dataset.pas(148): Incompatible types: 'TMethod' and 'procedure, untyped pointer or untyped parameter'
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    myMethod.Code   :=@ConnectDb;
    myMethod.Data   :=Self;  也错误[错误] dataset.pas(149): Variable required
      

  7.   

    看看你的ConnectDb的方法類型,定義一個,強制類型轉換
    T你的方法類型(M):= ConnectDb