简体   繁体   English

ADODB记录集打开返回错误#:13

[英]ADODB Recordset Open returns Error#:13

I've been using stackoverflow for over a year now but this is my first post so if I do something wrong, please let me know and I'll try to do better next time. 我已经使用stackoverflow一年多了,但这是我的第一篇文章,因此,如果我做错了什么,请告诉我,下次我将尝试做得更好。

I'm currently using MS Access 2003 as a front-end data entry application with an MS SQL 2008 back end. 我目前正在使用MS Access 2003作为带有MS SQL 2008后端的前端数据输入应用程序。 A function used by just about every form in the app is breaking for no reason that I can determine when called from a specific subroutine. 应用程序中几乎每种表单使用的功能都无故中断,我无法确定何时从特定子例程中调用该函数。

Calling subroutine: 调用子程序:

Private Sub Form_Load()

strRep = GetAppCtl("ConUID")

FLCnnStr = GetAppCtl("ConStrApp")

strSQL2 = "SELECT EMPNMBR, First, Last, TSLogin, IsITAdmin, " & _
           " IsManager, Pwd, AppAuthLvl, SEX, AppTimeOutMins " & _
            " FROM utEmplList WHERE EMPNMBR = " & _
            strRep & ";"

Set cnn = New ADODB.Connection
With cnn
    .ConnectionString = FLCnnStr
    .Open
End With

Set rst = New ADODB.Recordset
rst.Open strSQL2, cnn, adOpenDynamic, adLockReadOnly

intAppAuthLvl = rst!AppAuthLvl

' Loaded/opened with parameters / arguments (OpenArgs)?
If Not IsNull(Me.OpenArgs) And Me.OpenArgs <> "" Then
    Me.txtEmpSecLvl = Me.OpenArgs
Else
    Me.txtEmpSecLvl = "99999<PROGRAMMER>Login:-1,-1\PWD/999|M!60$"
End If

Me.lblDateTime.Caption = Format(Now, "dddd, mmm d yyyy hh:mm AMPM")

If FirstTime <> "N" Then

    ' Set default SQL select statement with dummy WHERE clause
    '   (DealID will always be <> 0!)

    strDate = DateAdd("d", -14, Now())

    strSQLdefault1 = "SELECT *, DealHasTags([PHONE10],[REP]) as DealHasTags FROM utDealSheet WHERE DealID <> 0 AND (STATUS BETWEEN '00' AND '99') "
    strSQLdefault2 = "SELECT *, DealHasTags([PHONE10],[REP]) as DealHasTags FROM utDealSheet WHERE DATE >= #" & strDate & "# AND DealID <> 0 AND (STATUS BETWEEN '00' AND '99') "

    Me.LoggingDetail.Enabled = False
    Me.LoggingDetail.Visible = False

    If rst!AppAuthLvl <= 200 Then
        strSQL = strSQLdefault1 & ";"
        Me.LoggingDetail.Form.RecordSource = strSQL
    Else
        strSQL = strSQLdefault2 & ";"
        Me.LoggingDetail.Form.RecordSource = strSQL
    End If

    FirstTime = "N"

End If

DoCmd.Maximize

End Sub

Function that is breaking: 中断的功能:

Public Function GetAppCtl(strFldDta As String) As Variant

Dim strSQL As String
Dim cnn As ADODB.Connection
Dim rst  As ADODB.Recordset
Dim strConnString As String

If IsNull(strFldDta) Then GetAppCtl = "ERR"

' Starting string
strConnString = "ODBC;Description=SQLUmgAgr;DRIVER=SQL Server;SERVER="

' Set a connection object to the current Db (project)
Set cnn = CurrentProject.Connection

strSQL = "Select ConStrApp, ConStrTS, DftOfficeID, RecID, VerRelBld, SeqPrefix, ConDb, ConDbTs, ConUID, ConUIDTS, ConPWD, ConPWDTs, ConServer, ConServerTS, ConWSID, ConWSIDTS from tblAppCtl WHERE RecID = 1;"

Set rst = New ADODB.Recordset
rst.Open strSQL, cnn, adOpenKeyset, adLockReadOnly

' If a Db error, return 0
If Err.Number <> 0 Then
    GetAppCtl = ""
    GoTo CleanUp
End If

' If no record found, return 0
If rst.EOF Then
    GetAppCtl = ""
Else        ' Otherwise, return Version/Build

    Select Case strFldDta

        Case Is = "ConStrApp"               ' connection string - application

            strConnString = strConnString & Trim(rst!Conserver) & ";" _
                    & "UID=" & Trim(rst!ConUID) & ";PWD=" & Trim(rst!conpwd) & ";" _
                    & "DATABASE=" & Trim(rst!ConDb) & ";WSID=" & Trim(rst!ConWSID)

            GetAppCtl = strConnString

        Case Is = "ConStrTS"             ' connection string - TouchStar

            strConnString = strConnString & Trim(rst!ConserverTS) & ";" _
                    & "UID=" & Trim(rst!ConUIDTS) & ";PWD=" & Trim(rst!conpwdTS) & ";" _
                    & "DATABASE=" & Trim(rst!ConDbTS) & ";WSID=" & Trim(rst!ConWSID)

            GetAppCtl = strConnString

        Case Is = "DftOfficeID"             ' Default AGR office ID

            GetAppCtl = rst!DftOfficeID

        Case Is = "VerRelBld"               ' Current APP ver/rel/bld (to be checked against SQL Db
            GetAppCtl = rst!VerRelBld

        Case Is = "SeqPreFix"               ' Sales seq# prefix (ID as per office for backward capability)
            GetAppCtl = rst!SeqPrefix

        Case Is = "ConUID"
            GetAppCtl = rst!ConUID
    End Select

End If

CleanUp:

    rst.Close
    Set rst = Nothing
    cnn.Close
    Set cnn = Nothing

End Function

The function is breaking here, but only when called by the above sub: 该函数在此处中断,但仅在上述子函数调用时才中断:

Set rst = New ADODB.Recordset
rst.Open strSQL, cnn, adOpenKeyset, adLockReadOnly

' If a Db error, return 0
If Err.Number <> 0 Then
    GetAppCtl = ""
    GoTo CleanUp
End If

When called from any other sub it works fine and returns the appropriate value. 当从任何其他子调用时,它可以正常工作并返回适当的值。 Please help. 请帮忙。

I don't have an actual explanation as to why it was returning an error code but by removing the error checking the process worked. 关于它为什么返回错误代码,我没有实际的解释,但是通过删除错误检查了该过程是否有效。 If anyone has an actual explanation as to what was actually causing the issue it would be greatly appreciated. 如果有人对导致问题的真正原因有实际的解释,将不胜感激。

I know this post's a bit old and OP might have solved the problem. 我知道这篇文章有点老了,OP可能已经解决了这个问题。 I encountered the same problem and solved it by changing "Microsoft ActiveX Data Objects 2.5 Library" to "Microsoft ActiveX Data Objects 2.8 Library" from VBA Tools => References. 我遇到了相同的问题,并通过从VBA工具=>引用将“ Microsoft ActiveX数据对象2.5库”更改为“ Microsoft ActiveX数据对象2.8库”来解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 ADODB 记录集循环期间,在 vb6 中键入不匹配错误 13 - Type Mismatch error 13 in vb6, during ADODB Recordset loop ADODB 记录集记录计数总是返回 -1 - ADODB recordset recordcount always returns -1 记录集打开期间adodb连接错误 - adodb connection erroring during open of recordset 在表单的 On Open 事件上将 ADODB.Recordset 连接到 forms RECORDSET 时出现问题 - Problem with connecting ADODB.Recordset to a forms RECORDSET on the On Open event of the form 错误类型:ADODB.Recordset(0x800A0E79)打开对象时,不允许进行操作 - Error Type: ADODB.Recordset (0x800A0E79) Operation is not allowed when the object is open 从ADODB命令/记录集更新ACCESS时出错 - Error Updating ACCESS from ADODB Command / Recordset 从ADODB设置表单的VBA记录集时出错 - Error setting VBA Recordset of form from ADODB.recordset HOWTO:从允许更新的命令对象中打开ADODB记录集? - HOWTO: Open an ADODB recordset from a command object that allows updating? 为什么有些 SELECT 语句打开 RecordSet,而其他语句返回“错误 13,类型不匹配” - Why some SELECT statements open a RecordSet, while others return "Error 13, Type Mismatch" VBA Excel中的ADODB.Recordset运行时错误91 - Runtime error 91 in VBA excel for ADODB.Recordset
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM