具体讲就是用 Cn:=CreateOleObject('ADODB.Connection');
 Rs:=CreateOleObject('ADODB.RecordSet');
 Cn.open('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=db1.mdb'); Rs.Open('select * from 1234',Cn,adOpenStatic,adLockOptimistic,adCmdText);
uses里用ComObj, ADODB,ADOINT;在98下可以吗?

解决方案 »

  1.   

    你的代码没仔细看,不过在win98下用:=CreateOleObject('ADODB.Connection')是可行的,给你个例子,自己看看吧。。procedure TForm1.Button1Click(Sender: TObject);
    {*****************************************************
     用ADO操作ODBC数据库本程序中,将创建一个临时的ODBC系统数据源,指向一个MsAccess数据库,然后对其中的数据表进行显示、增加、修改、删除和查询操作注意:请在Uses语句中包含ComObj单元 *****************************************************}const{ 一些常量声明,详细请参见adovbs.inc }
    { ---- CommandType的常量说明 ---- }
     adCmdUnknown = 0008;//未知,
    需要系统来判断,速度慢,为缺省值
     adCmdText = 0001;//命令语句如SQL语句
     adCmdTable = 0002;//数据表名称
     adCmdStoredProc = 0004;//存储过程名称{ ---- CursorType的常量说明 ---- }
     adOpenForwardOnly = 0;//只能由前向后单向访问,为缺省值
     adOpenKeyset = 1;//可见其他用户对数据的修改,
    但对其它用户的增加和删除不可见
     adOpenDynamic = 2;//其他用户对数据的增加修改和删除均可见
     adOpenStatic = 3;//其他用户对数据的增加修改和删除均不可见{---- LockType的常量说明 ---}
     adLockReadOnly = 1;//只读,为缺省值
     adLockPessimistic = 2;//在修改时,按单个记录锁定
     adLockOptimistic = 3;//在修改后更新时,按单个记录锁定
     adLockBatchOptimistic = 4;//在成批更新时记录锁定
    var
     AConnection, ARecordSet : variant;
     longintTemp : integer;
     strTemp : string;
     intIndex : integer;
    begin
      {创建一个临时的ODBC数据源,
      指向一个MsAccess数据库,
      并利用此DSN建立一个数据库连接}
      AConnection := CreateOleObject('ADODB.Connection');
      AConnection.Open('Driver={Microsoft Access Driver 
      (*.mdb)};DBQ=C:\inetpub\wwwroot\test');  {建立一个数据集对象,并从数据表中提取数据}
      ARecordSet := CreateOleObject('ADODB.RecordSet');
      ARecordSet.open( 'wfjcommu',AConnection,
      adOpenStatic,adLockOptimistic,adCmdTable );  memo1.lines.clear;
      memo1.lines.add('********数据表原有的内容如下********');
      {显示各个域的域名}
      strTemp := '';
      for intIndex := 0 to ARecordSet.Fields.count - 1 do
       strTemp := strTemp + ARecordSet.Fields[intIndex].name+';';
      memo1.lines.add( strTemp );  {显示各个域的内容}
      while not ARecordSet.eof do
       begin
        strTemp := '';
        for intIndex := 0 to ARecordSet.Fields.count - 1 do
         strTemp := strTemp + ARecordSet.Fields
          [intIndex].value+';';
      memo1.lines.add( strTemp );
       ARecordSet.MoveNext;//移到下条,Next
       end;  {增加一个记录}
      ARecordSet.AddNew;//增加,Append
      ARecordSet.Fields['AName'] := '1';
      //以FieldByName的方式存取
      ARecordSet.Fields['Portable'] := '2';
      ARecordSet.Fields(2) := '3';
      //以Fields[index]的方式存取
      ARecordSet.Fields(3) := '4';
      ARecordSet.Fields(4) := '5';
      ARecordSet.Update;//更新,Post
      ARecordSet.MoveFirst;//移到首条,First
      memo1.lines.add('********增加了一条
           记录后的数据表的内容如下********');
      {显示各个域的内容}
      while not ARecordSet.eof do
       begin
        strTemp := '';
    for intIndex := 0 to ARecordSet.
     Fields.count - 1 do
         strTemp := strTemp + 
         ARecordSet.Fields[intIndex].value+';';
      memo1.lines.add( strTemp );
       ARecordSet.MoveNext;//移到下条,Next
       end;  {修改最后一条记录}
      ARecordSet.MoveLast;
      ARecordSet.Fields['AName'] := '11';
       //以FieldByName的方式存取
      ARecordSet.Fields['Portable'] := '22';
      ARecordSet.Fields(2) := '33';
      //以Fields[index]的方式存取
      ARecordSet.Fields(3) := '44';
      ARecordSet.Fields(4) := '55';
      ARecordSet.Update;//更新,Post
      ARecordSet.MoveFirst;//移到首条,First
      memo1.lines.add('********修改了最后一条
       记录后的数据表的内容如下********');
      {显示各个域的内容}
      while not ARecordSet.eof do
       begin
        strTemp := '';
    for intIndex := 0 to 
     ARecordSet.Fields.count - 1 do
         strTemp := strTemp + 
         ARecordSet.Fields[intIndex].value+';';
      memo1.lines.add( strTemp );
       ARecordSet.MoveNext;//移到下条,Next
       end;  {删除最后一条记录}
      ARecordSet.MoveLast;//移到末条,Last
      ARecordSet.delete;//删除,delete
      ARecordSet.Update;//更新,在Delphi不需要
      ARecordSet.MoveFirst;//移到首条,First
      memo1.lines.add('********删除了最后一条
      记录后的数据表的内容如下********');
      {显示各个域的内容}
      while not ARecordSet.eof do
       begin
        strTemp := '';
        for intIndex := 0 to ARecordSet.Fields.count - 1 do
         strTemp := strTemp + ARecordSet.
         Fields[intIndex].value+';';
      memo1.lines.add( strTemp );
       ARecordSet.MoveNext;//移到下条,Next
       end;  ARecordSet.Close;{关闭数据集}  {用SQL语句进行查询,查询姓名为“张三”的记录}
      {注意,在SQL语句中,字符串应该用单引号包括起来}
      ARecordSet.open( 'select * from wfjcommu
       where AName = ''张三''',
          AConnection,adOpenStatic,adLockOptimistic,
        adCmdText );
      memo1.lines.add('********张三的内容如下********');
      memo1.lines.add( '共有' + IntToStr
      ( ARecordSet.RecordCount ) + '条匹配的记录' );
      {显示各个域的内容}
      while not ARecordSet.eof do
       begin
        strTemp := '';
        for intIndex := 0 to ARecordSet.Fields.count - 1 do
         strTemp := strTemp + ARecordSet.Fields
        [intIndex].value+';';
      memo1.lines.add( strTemp );
       ARecordSet.MoveNext;//移到下条,Next
       end;  {关闭数据集和数据库连接}
      ARecordSet.close;
      AConnection.close;
    end;
      

  2.   

    当然可以,不过不至于要你这样写把?
    uses里面要有 db,adodb,
    下面用:
    var 
      Conn : TAdoconnection;
    begin
      Conn := Tadoconnection.create(nil)
      然后赋参数和连接字符串,后面即可用了
    end;