2016-06-06 5 views
2

Sorry zu viele Fragen, um durchzusehen. Mein Code:ADODB.Connection # 424: Objekt erforderlich

Function GetConnection(ByVal Server, ByVal Database, ByVal UserID, ByVal Password) 
    Dim conn 
    On Error Resume Next 
    Set conn = Server.CreateObject("ADODB.Connection") 
    If Err.Number <> 0 Then 
     Set conn = Nothing 
     Response.Write "#" & Err.Number & ": " & Err.Description 
     Response.End 
     Exit Function 
    End If 
    CONST connStringFormat = "Provider=SQLOLEDB.1;[email protected];Persist Security Info=True;User [email protected];Initial [email protected];Data [email protected]" 
    Dim myConnectionString 
    myConnectionString = Replace(Replace(Replace(Replace(connStringFormat, "@Server", Server), "@Database", Database), "@UserID", UserID), "@Password", Password) 

    conn.Open myConnectionString 
    On Error GoTo 0 
    Set GetConnection = conn 
End Function 

Der zurück Fehler als auf meiner Webseite zu sehen ist:

# 424: Objekt

erforderlich

Irgendwelche Ideen, was ist der Grund dafür? Bitte ignoriere die Tatsache, dass ich nicht nach korrekten connectonstring den Punkt suche, ist es Bomben auf der Server.CreateObject("...") Aussage!

+0

Wenn Sie ein zeigte [MCVE] würde es im Moment helfen Ihnen zeigen, sind nicht, wie Sie sind Verwenden Sie 'GetConnection()' in Ihrem Code, um ein 'ADODB.Connection'-Objekt zu instanziieren. – Lankymart

Antwort

0

Nachdem ich meinen Code tausend Mal angesehen habe und weggegangen bin, habe ich meinen CreateObject-Aufruf aus der Funktion genommen und es funktionierte (warum, warum, warum), d. H. Ich verwandelte meine Funktion in ein Sub und benutzte eine globale Variable.

Sub SetupConnection(ByVal Server, ByVal Database, ByVal UserID, ByVal Password) 
    CONST connStringFormat = "Provider=SQLOLEDB.1;[email protected];Persist Security Info=True;User [email protected];Initial [email protected];Data [email protected]" 

    Dim myConnectionString 
    myConnectionString = Replace(Replace(Replace(Replace(connStringFormat, "@Server", Server), "@Database", Database), "@UserID", UserID), "@Password", Password) 

    conn.Open myConnectionString 
End Sub 

Dim conn 
Set conn = Server.CreateObject("ADODB.Connection") 
SetupConnection ... 
+1

Sie haben nicht gezeigt, wie Sie die 'GetConnection()' Funktion verwenden, um die 'ADODB.Connection' zu instanziieren. Meine Vermutung ist, dass du das nicht getan hast * (bevor du es in ein "Sub" änderst) * 'Setze MyConnObject = GetConnection (" ... "," ... "," ... "," ... ")". – Lankymart

+0

Ihre Vermutung ist richtig. Also, was ist dein Punkt? Sie haben mir nicht Ihre Lösung gegeben, wo Sie es reparieren können! Muss ich "Set" in einigen Fällen verwenden und nicht in anderen? – Glen

+0

Ohne zu sehen, wie Sie zuerst die 'GetConnection()' Funktion in der ursprünglichen Frage * aufgerufen haben (nicht nur die Funktionsdefinition) * würde ich nur raten, weshalb ich keine Lösung gepostet habe. – Lankymart

0

Ok, also es ist nichts falsch mit dem Ansatz, wie es (Bit einer Annahme als ich keine Berufung Code gesehen haben) genannt.

Während Fehlerbehandlung ist eine gute Sache, die ist derzeit nicht sehr nützlich und erfasst nur Probleme mit der Instanziierung eines ADODB.Connection Objekts, das nicht oft passieren wird.

Function GetConnection(ByVal Server, ByVal Database, ByVal UserID, ByVal Password) 
    Dim conn: Set conn = Server.CreateObject("ADODB.Connection") 
    Const connStringFormat = "Provider=SQLOLEDB.1;[email protected];Persist Security Info=True;User [email protected];Initial [email protected];Data [email protected]" 
    Dim myConnectionString: myConnectionString = Replace(Replace(Replace(Replace(connStringFormat, "@Server", Server), "@Database", Database), "@UserID", UserID), "@Password", Password) 

    'You are more likely to get errors here, when trying to open the connection. 
    Call conn.Open(myConnectionString) 
    Set GetConnection = conn 
    Set conn = Nothing 
End Function 

das Sie noch richtig zu nennen, müssen die Set Anweisung verwenden, so dass das neue Objekt korrekt instanziiert wird.

Zum Beispiel wird diese

Dim conn: Set conn = GetConnection("YourServer", "YourDatabase", "YourUserName", "YourPassword") 

arbeiten Aber dies fehl, weil das ADODB.Connection Objekt übernimmt wir die Standard-String-Darstellung wollen, die die ConnectionString sein wird.

Dim conn: conn = GetConnection("YourServer", "YourDatabase", "YourUserName", "YourPassword") 

dass Um hier zu beweisen, ist ein Schnelltest

Dim conn: conn = GetConnection("YourServer", "YourDatabase", "YourUserName", "YourPassword") 
Call Response.Write("conn is " & TypeName(conn) & "<br />") 

Set conn = GetConnection("YourServer", "YourDatabase", "YourUserName", "YourPassword") 
Call Response.Write("conn is " & TypeName(conn) & "<br />") 

Ausgang:

conn is String 
conn is Connection 
+0

Ich denke, dass Sie meinen Punkt vermissen oder das Offensichtliche sagen, wie ich es sehe. Bitte beachten Sie, dass ich den On Error-Code nur als Nachdenkzeit hinzugefügt habe, als ich den Fehler erhielt. Ich habe gerade den On Error am Standort platziert, wie in meiner Frage oben, um zu betonen, wo die Linie fehlerhaft war und ich mich auf diese Linie beschränkte. Der Punkt meiner Frage war nicht meine Absicht, auf diese Weise einen richtigen Fehlerprüfcode zu schreiben oder tatsächlich überhaupt zu haben. Wenn ich nicht irgendwo einen Tippfehler habe, ist mein ursprünglicher Code im Wesentlichen der gleiche wie dein, aber ich sage, dass es nicht funktioniert! – Glen

+0

Es ist ein bisschen wie das Spiel, das Sie als Kind spielen, sehen Sie die 10 Unterschiede in den angrenzenden Bildern. Das ist die gleiche Sache, in der ich etwas offensichtlich dumm tue und ich kann es nicht sehen – Glen