使用ADO连接Access数据库,显示错误是"尚末调用CoInitialize",可我加上CoInitialize(nil);还是不行,那位高手指点一下,源代码如下
----------------------------------------------------------------------
procedure TfrmViewFun.pADOData();
begin
    CoInitialize(nil);
    {Join ODBC}
    AConnection:=CreateOleObject('ADODB Connection');
    AConnection.Open('DSN=Wordpad');    {Join Table}
    // ProList table
    ARecordPro:=CreateOleObject('ADODB RecordSet');
    ARecordPro.Open('ProList',AConnection);
    //FunType table
    CoInitialize(nil);
    ARecordType:=CreateOleObject('ADODB RecordSet');
    ARecordType.Open('FunType',AConnection);
end;

解决方案 »

  1.   

    >>可我加上CoInitialize(nil);还是不行
    可能是別的錯了, 你應該將還是不行的出錯提示, 或什麼异常說出來啊!
      

  2.   

    也是一样啊,错误提示是"尚末调用CoInitialize"
      

  3.   

    把它加在这个unit最后:
    //.......
    CoInitialize(nil);
    end.
      

  4.   

    少了一句:
    //.......
      Initialization
      CoInitialize(nil);
    end.
      

  5.   

    还是不行,同样的错误提示,整个unit的代码如下
    ---------------------------------------------------------------
    unit ViewFun;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,Main, ComCtrls, ExtCtrls, ToolWin, StdCtrls,ComObj, ImgList,ActiveX;type
      TfrmViewFun = class(TForm)
        treFunList: TTreeView;
        CoolBar1: TCoolBar;
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        ToolButton2: TToolButton;
        ToolButton3: TToolButton;
        ToolButton4: TToolButton;
        ToolButton5: TToolButton;
        ToolButton6: TToolButton;
        ToolButton7: TToolButton;
        ToolButton8: TToolButton;
        ToolButton9: TToolButton;
        ToolButton12: TToolButton;
        ToolButton13: TToolButton;
        ToolButton14: TToolButton;
        panFrame: TPanel;
        ToolButton10: TToolButton;
        ToolButton15: TToolButton;
        lsvFunName: TListView;
        redFunInfo: TRichEdit;
        ToolButton16: TToolButton;
        ImageList1: TImageList;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure ToolButton15Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure pCreateTree();
        procedure pADOData();
        //procedure pViewFun();
      end;var
      frmViewFun: TfrmViewFun;
      AConnection: variant;
      ARecordPro:variant;
      ARecordSort:variant;
      ARecordFun:variant;
      ARecordType:variant;implementation
    uses DataBox;{$R *.dfm}procedure TfrmViewFun.pADOData();
    begin
        //CoInitialize(nil);
        {Join ODBC}
        AConnection:=CreateOleObject('ADODB Connection');
        AConnection.Open('DSN=Wordpad');    {Join Table}
        // ProList table
        ARecordPro:=CreateOleObject('ADODB RecordSet');
        ARecordPro.Open('ProList',AConnection);
        //FunType table
        CoInitialize(nil);
        ARecordType:=CreateOleObject('ADODB RecordSet');
        ARecordType.Open('FunType',AConnection);
    end;//Create tree
    procedure TfrmViewFun.pCreateTree();
    var
        MainNode:TTreeNode;
    begin
        pADOData();
        // Get fields value
        ARecordPro.MoveFirst; // Get program list
        while not ARecordPro.Eof do
        begin
            MainNode:=treFunList.Items.Add(nil,ARecordPro.Fields['sProName']);        ARecordType.MoveFirst; // Get handle type list
            while not ARecordType.Eof do
            begin
                treFunList.Items.AddChild(MainNode,ARecordType.Fields['sTypeName']);
                ARecordType.MoveNext;
            end;        ARecordPro.MoveNext;
        end;
    end;procedure TfrmViewFun.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        AConnection.Close;
        ARecordType.Close;
        ARecordPro.Close;
        ARecordFun.Close;
        ARecordSort.Close;
        Action:=caFree;
        frmMain.getViewFun(true);
    end;procedure TfrmViewFun.ToolButton15Click(Sender: TObject);
    begin
        Close;
    end;procedure TfrmViewFun.FormCreate(Sender: TObject);
    begin
        pCreateTree();
    end; Initialization
      CoInitialize(nil);
    end.
      

  6.   

    还是直接用 VCL 组件吧,不会出错
      

  7.   

    不要使用变体!导入 ADO 类型库,或者直接 use ADOInt。 在程序中直接使用 ADO 的接口类型。例如:
    ConnectionObject: _Connection;
    ConnectionObject := CreateOleObject('ADODB.Connection') as _Connection;
    CoInitialize(nil) 可以放在 .dpr 文件中。
      

  8.   

    楼主的代码 在关键地方就有错。 例如:   AConnection:=CreateOleObject('ADODB Connection');CreateOleObject 的参数是一个 COMCLASS 的 ProgID。 “ADODB”“Connection”之间应该是个“.” 而不是空格!