我在VB模块中设定如下
Public Function Oracle_ConnectString() As String    Oracle_ConnectString = "UID=budget20;PWD=ysbz;DRIVER={Microsoft ODBC for Oracle};SERVER=budget20;"End FunctionPublic Function Oracle_ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset    Dim conn As ADODB.Connection
    Dim rest As ADODB.Recordset
    
    On Error GoTo ExecuteSQL_Error
    
    Set conn = New ADODB.Connection
    
    conn.Open Oracle_ConnectString
    
    Set rest = New ADODB.Recordset
    
    rest.Open Trim$(sql), conn, adOpenKeyset, adLockOptimistic
    
    Set Oracle_ExecuteSQL = rest
    MsgString = "查询到" & rest.RecordCount & "条记录"
   
ExecuteSQL_Exit:
   
    Set rest = Nothing
    Set conn = Nothing
    Exit Function
    
ExecuteSQL_Error:
    
    MsgString = "查询错误:" & Err.Description
    Resume ExecuteSQL_ExitEnd Function
在窗体中设定
 Private Sub Form()
  Dim TempRecordset As ADODB.RecordsettxtSQL = " select * from enterprise "
Set TempRecordset = Oracle_ExecuteSQL(txtSQL, MsgText)end sub
此时为单表查询,运行正常查询成功并建立数据集 msgtext值为查到数据记录
如果将txtsql更改为多表询
txtsql ="select a.* from enterprise a,users b where a.eid=b.eid"
为多表查询,则msgtext值为-1 何解

解决方案 »

  1.   

    txtsql   = "select   a.*   from   enterprise   a,users   b   where   a.eid=b.eid " 
    改成txtsql   = "select   *   from   enterprise   a,users   b   where   a.eid=b.eid " 调用的时候在 a.字段
      

  2.   

    手上没有oracle
    用SQL试验了一下没有问题啊  ~
      

  3.   

    adOpenKeyset和adLockOptimistic说明你打开的游标是可修改的,可能ORACLE不支持多表的可写游标,改用只读的试试。
      

  4.   

    还有个更好的办法,
    将rest.CursorLocation属性设置成 adUseClient
    还是要谢谢各位,特别是Tiger_Zhao指点.
      

  5.   

    通常应该用adUseClient的,服务端游标的确会有些功能限制。
      

  6.   

    如果用了adUseClient,我想对数据库进行更新,会不会有所限制