delphi6怎么链Access2000的数据库?,在delphi6中只能联sybase的数据库,看书上说要配置BDE Administrator才能联其他的数据库,而且,在delphi6中,只能联*.dbf的表,Access的表也不行,我该怎么办?请大侠详细介绍一下

解决方案 »

  1.   

    用ADO,看我的例子:
    /创建access数据库(d:\dd.mdb)
    uses
      comobj
    const
      CCreateMDB='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s';
    procedure TForm1.Button1Click(Sender: TObject);
    var
      cat:Variant;
      fname:string;
    begin
      fname:='d:\dd.mdb';
      cat:=CreateOleObject('ADOX.Catalog');
      cat.Create(Format(CCreateMDB,[fname]));
      cat:=Unassigned;
    end;//连接数据库操作
    uses
      adodb;
    const
      connectstringA ='Provider=MSDataShape.1;Persist Security Info=True;Data Source=';
      connectstringB =';Data Provider=Microsoft.Jet.OLEDB.4.0';
    var
      Adoconnecyion:TadoConnection;
      T2:TADOquery;
    begin
    ADOConnection:=TADOConnection.create(Application);
              ADOConnection.connectionstring:=connectstringA + 'd:\test.mdb'+ connectstringB;
     ADOConnection.LoginPrompt:=False;
    T2.connection:=AdoConnection;      SqlClause:='select * from tablename';
          T2.SQL.Clear;
          T2.SQL.Add(SqlClause);
          T2.Open;赠送一些例子://对表中ole对象字段附值
      adotable1.Edit ;
      tblobfield(adotable1.FieldByName('s6')).loadfromfile('c:\test.txt');//或者是loadfromstream() ;
      adotable1.Post ; 
      
     //取出表中ole对象字段的值 
        adoquery1.SQL.Clear ;
        adoquery1.SQL.Add('select * from  bb');
        adoquery1.Open ;
        tblobfield(adoquery1.FieldByName('s6')).savetofile('c:\test1.txt') ;
        richedit1.Lines.Clear ;
        richedit1.Lines.LoadFromFile('c:\test1.txt') ;
        richedit1.Text :=  tblobfield(adoquery1.FieldByName('s6')).value ;  
     
     //用动态sql语句插入有ole对象字段的记录
        sqlstring := 'insert into bb(s1,s2,s6) values("12","45",:bb)' ;
        adoquery1.SQL.Add(sqlstring) ;
        adoquery1.Parameters.ParamByName('bb').loadfromfile('c:\test1.txt',ftblob) ;
        adoquery1.execsql; 说明:用ADO连接数据库时对parambyname()函数赋值时,后面只能跟VALUE不能跟asstring,asinteger等,
     即parambyname('bb').value正确,而parambyname('bb').asstring|asinteger却不正确。//更改有memo对象字段的的值
       sqlstring  := 'update bb set s3 = :aa, s4 = :bb where s1=234' ;
         adoquery1.SQL.Clear ;
         adoquery1.SQL.add(sqlstring) ;
         adoquery1.Parameters.ParamByName('aa').value:= 78 ;     
         adoquery1.Parameters.ParamByName('bb').Value :=  memo1.text;(更改ole对象字段此种方法不行)
         adoquery1.ExecSQL ;   
      
      //取出ole对象字段到richedit1空间中
       adoquery1.sql.Add('select * from  bb');
       adoquery1.Open ;
       richedit1.Text :=  tblobfield(adoquery1.FieldByName('s6')).value ;  //用adotable控件插入数据
        adotable1.Edit ;
        adotable1.FieldByName('s1').asinteger := 100 ;
        adotable1.FieldByName('s4').asstring := memo1.lines.Text;
        tblobfield(adotable1.FieldByName('s6')).LoadFromFile('c:\setuplog.txt') ;
        adotable1.Post ;  
     
     //用adotable控件取出字段数据
       memo1.Text :=  adotable1.FieldByName('s4').asstring  ;//memo字段
       richedit1.Text :=  adotable1.FieldByName('s6').value ; //ole对象字段//查询access库中的表名、表中的字段名
        ss:= tstringlist.Create ;
        adoconnection1.GetTableNames(ss,false); //把表名放入ss字符串列表中
        adoconnection1.GetFieldNames('cc',ss) ;//把cc表中的字段名放入ss字符串列表中//修改access表中字段类型、长度
     sqlstring  :='alter table cc ALTER COLUMN tbindex smallint';
     adoquery1.SQL.Clear ;
     adoquery1.SQL.Add(sqlstring);
     try
          adoquery1.ExecSQL;
     except
           showmessage( 'create failer');
     end;//用adoquery动态创建access表举例
     sqlstring :=  'create table cc '+
                      '(tbid  integer,' +
                      ' tbindex  integer,'+
                      ' tbname  varchar(100),'+
                      ' tbpreid  integer,' +
                      ' rowser     integer ,'+
                      ' cols     integer ,'+
                      ' cellsta  image,'+
                      ' appinfo  memo,'+
                      ' tbre  varchar(250),'+
                      ' primary key (tbid))' ;
        adoquery1.SQL.Clear ;
        adoquery1.SQL.Add(sqlstring);
        try
           adoquery1.ExecSQL;
        except
            showmessage( 'create failer');
        end;
      

  2.   

    用ODBC加BDE,或者直接用ADO吧(JET 4.0)很方便呀
      

  3.   

    你可以用bde,或则是odbc方法:在控制面版中---odbc数据源--加入Access的驱动程序--添入你的数据源名称和Access数据库 
    在delphi 的table控件 的数据源就选择你建立的数据源
    table 的tablename 就可以选择你的表
      

  4.   

    谢谢各位了,但是每次用delphi连接Access2000表的时候都要一个帐号和密码,这是怎么回事?
      

  5.   

    设置TDataBase(BDE)或者TADOConnection的LoginPrompt为False