是不是你装了高版本MDAC之后,根本就找不着 OLEDB3.5了呢?
难度巨高!

解决方案 »

  1.   

    CSDN上真的没有高手吗?????????????????
    CSDN上真的没有高手吗?????????????????
    CSDN上真的没有高手吗?????????????????
      

  2.   

    你在什么系统下?
    为什么要用acces97?
    您不要告诉我您的系统是win95 or win98 第一版!
    如果真的是这样的话,它不仅仅是需要MDAC2.7 or 2.5 2.6;
    升级它的IE;
      

  3.   

    我是用的WINDOWS2000 SERVER,Delphi 5
      

  4.   

    这是你的数据库引擎的问题,3.51不能用在Access2000上。我向你推荐VC++里ADO连接数据库的方法,我不知道Delphi中怎么做,不过我想应该可以的。
    1.在程序中动态加载动态连接库文件,想创建Access2000的数据库加载版本高的,否则加载版本底的。
    2。查询IConnection,IDataSet等接口来完成你的功能.VC中使用ADO连接数据库的方法网上太多了,随便找个搜索引擎搜索一下能找出n多
      

  5.   

    3.51当然不能用在ACCESS2000上,我想创建ACCESS97的数据库啊,
    一到运行ExecSQL指令就出现"不能使用,文件正在使用中"的提示
    看来这种方法只能创建ACCESS2000O数据库了?
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, comobj,adox_tlb,Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      Catalog: _Catalog;
      Table: _Table;
      Index : _Index;
      //FKey : _key;
      strCon:string;//定义连接字符串
      yourname:string;
      yourpwd:string;
    begin
        yourname:=trim(edit1.Text);
        yourpwd:=trim(edit2.text);
        Catalog := CoCatalog.Create;
        strCon := 'Provider=Microsoft.Jet.OleDB.4.0;'
        //通过Jet OleDb直接操作Access数据库
        +'Data Source=c:\windows\desktop\'+yourname+'.mdb;'
        //数据库位置
        +'Jet OLEDB:Engine Type=5;'
        //Jet 4.x格式,如为4,则Jet 3.x格式
        +'Locale Identifier=0x0804;'
         //支持简体中文(一定要有)
        +'Jet OLEDB:Database Password='+yourpwd;//修改密码也在此;
        //加入密码
        Catalog.Create(strCon); //建立数据库
        {建立数据表和索引}
        Catalog.Set_ActiveConnection(strCon);
        //连接到数据库    with Catalog do
        begin //建立数据表
        Table:= CoTable.Create(); //建立Table实例    with Table do
        begin
        Name := 'MyTable1';    //建表 MyTable1
        Table.ParentCatalog := Catalog ;
        Columns.Append('ID',adInteger,8);
        
        Columns.Item['ID'].Properties.Item['AutoIncrement'].Value := true;
        
        Columns.Append('Name',adVarWChar,40);
        Columns.Append('Parent_ID',adInteger,8);
        Columns.Item['Parent_ID'].Properties['Default'].Value := 0;
                                               
        Columns.Append('Sort_ID',adInteger,8);
        Columns.Append('Counter',adInteger,8);
        Columns.Item['Counter'].Properties.Item['Default'].Value := 0;    //数据类型详见MDAC SDK
        Tables.Append(Table);  //建表 MyTable1    Index := CoIndex.Create() as _Index; //建立索引
        with Index do
        begin
        Name:='Idx1';
        PrimaryKey := True ;
        Unique := True;
        Columns.Append('ID',adInteger,8);
        _Release;
        end;
        Table.Indexes.Append(Index,EmptyParam);    Table._Release;
        Table:= CoTable.Create();
        end;           //with table do
        end;           //with catalog doend;end.
      

  7.   

    因为我的机子装了ACCESS2000,我不知道是不是能生成97,试一下吧!
      

  8.   

    可能是你你创建的数据库文件已经存在,建立时应先判断文件
    是否存在,存在就Del File ,我也用过和你一样的代码,没问题,记得在
    CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source='+AppPath+'\'+tablename+'.mdb');中还有一参数,好象是
    CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source='+AppPath+'\'+tablename+'.mdb',5);可能是4
      

  9.   

    TO luoshumeng(乡村意外) 麻烦老兄看完贴子再"COPY别人的代码"好不好
    如果能用你这种方法我早就用了,因为我的资源库里有这段程序,你的这
    段程序要动态拼SQL很难,我的SQl.add(sqlstr)要改成动态重一个数据表
    得到值重新拼SQL的,并且我要创建的是3.15的数据库
      

  10.   

    不是 menye(menye) 的原因
      

  11.   

    其实还有有一变能的办法:
    你建一个空的.MDB,要用时将该文件复制一份成为新一文件,然后在新文件里建表就可以了,这样可以不考试ADO的版本文件。
    我曾经这样处理过,我的一个程序由于当时考虑的是系统安装方便使用ADO+ACCESS,但启示录太多,所以每天建立一个.MDB用的就是这个方法。
      

  12.   

    uses ComObj;function CreateDatabase(mDatabaseName: string): Boolean;
    var
      CreateAccess: OLEVariant;
    begin
      Result := False;
      try
        CreateAccess := CreateOleObject('ADOX.Catalog');
        try
          CreateAccess.Create(Format(
    'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
          [ExtractFilePath(Application.ExeName), mDatabaseName]));
        finally
          CreateAccess := Unassigned;
        end;
      except
        Exit;
      end;
      Result := True;
    end;function CreateTable(mDatabaseName: string; mADOQuery: TADOQuery): Boolean;
    begin
      Result := False;
      try
        mADOQuery.Close;
        mADOQuery.ConnectionString := Format(
    'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
          [ExtractFilePath(Application.ExeName), mDatabaseName]);
        mADOQuery.SQL.Text := 'CREATE TABLE Table1 (Field1 varchar(10), Field2 varchar(10))';
        mADOQuery.ExecSQL;
      except
        Exit;
      end;
      Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      DeleteFile(ExtractFilePath(Application.ExeName) + 'test.mdb');
      CreateDatabase('test'); //分开执行//这样被创建的库就不会冲突了
      CreateTable('test', ADOQuery1);
    end;
      

  13.   

    uses ComObj;function CreateDatabase(mDatabaseName: string): Boolean;
    var
      CreateAccess: OLEVariant;
    begin
      Result := False;
      try
        CreateAccess := CreateOleObject('ADOX.Catalog');
        try
          CreateAccess.Create(Format(
    'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
          [ExtractFilePath(Application.ExeName), mDatabaseName]));
        finally
          CreateAccess := Unassigned;
        end;
      except
        Exit;
      end;
      Result := True;
    end;function CreateTable(mDatabaseName: string; mADOQuery: TADOQuery): Boolean;
    begin
      Result := False;
      try
        mADOQuery.Close;
        mADOQuery.ConnectionString := Format(
    'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
          [ExtractFilePath(Application.ExeName), mDatabaseName]);
        mADOQuery.SQL.Text := 'CREATE TABLE Table1 (Field1 varchar(10), Field2 varchar(10))';
        mADOQuery.ExecSQL;
      except
        Exit;
      end;
      Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      DeleteFile(ExtractFilePath(Application.ExeName) + 'test.mdb');
      CreateDatabase('test');
      CreateTable('test', ADOQuery1);
    end;
      

  14.   

    而且处理起来很简单,代码也要不了这么多,当时我觉得还是很好用的,但是现在我写的程序基本都用SQLSERVER。也许是现在做的工程都比以前的大得多的原因。
      

  15.   

    花了一小时,终于调试成功
    主要是因为COM对象在一个区域中创建就不能关闭//也许是我没有找到方法
    所有把它分在两段区域中执行嘻嘻嘻成了嘻嘻嘻嘻
      

  16.   

    花了一小时,终于调试成功
    主要是因为COM对象在一个区域中创建就不能关闭//也许是我没有找到方法
    所有把它分在两段区域中执行嘻嘻嘻成了嘻嘻嘻嘻
      

  17.   

    我试了以下没有问题
    我是用的WINDOWS2000 SERVER,Delphi 6
      

  18.   

    TO: zswang(伴水)(* 嘻 *) 
    你的程序在我的系统里不成功,没有错误提示,也没有文件生成。
    我的系统是XP + D5,我的系统还安装有OFFICE 2000。