Wenn Nicht RS.EOF und Nicht RS.BOF dann geschrieben für ADODB und aktuelle DAO-format
Momentan habe ich Verwendung, Wenn Nicht RS.EOF und Nicht RS.BOF ist ein DAO-Recordset, aber ich kann nicht DAO in die neue SQL-back-End-Umgebung. Code ist wie folgt:
Function CloseSession()
'This closes the open session
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("SELECT * FROM Tbl_LoginSessions WHERE fldLoginKey =" & LngLoginId)
If Not Rs.EOF And Not Rs.BOF Then
Rs.Edit
Rs.Fields("fldLogoutEvent").Value = Now()
Rs.Update
Rs.Close
End If
Set Rs = CurrentDb.OpenRecordset("SELECT * FROM [Tbl_Users] WHERE PKUserID =" & LngUserID)
'Flag user as being logged out
If Not Rs.EOF And Not Rs.BOF Then
Rs.Edit
Rs.Fields("fldLoggedIn").Value = 0
Rs.Fields("FldComputer").Value = ""
Rs.Update
Rs.Close
End If
Set Rs = Nothing
End Function
Im wesentlichen habe ich begonnen, den code zu schreiben in der ADODB. Jedoch, bei der recherche, Wenn Nicht RS.EOF-Thema auf dem internet für ADODB, ich war völlig erfolglos. Hat jemand das wissen über die Nutzung der RS.Und EOF RS.BOF, das könnte hilfreich sein, um mein Schicksal zu umschreiben?
Function CloseSession()
'/This closes the open session
'/Define the OLE DB connection string.
StrConnectionString = "DRIVER=SQL Server;SERVER=dbswd0027;UID=Mickey01;PWD=Mouse02;DATABASE=Regulatory;"
'/Instantiate the Connection object and open a database connection.
Set cnn = CreateObject("ADODB.Connection")
cnn.Open StrConnectionString
Dim strSQL1 As String
Dim strSQL2 As String
Dim StrLoginName As String
Dim StrComputerName As String
'/passing variables
StrComputerName = FindComputerName
strLoggedIn = "False"
'/Declaring what table you are passing the variables to
strSQL1 = "Update tTbl_LoginSessions SET fldLogoutEvent = '" & Now() & "'" & _
" WHERE fldLoginKey = " & LngLoginId
'/Declaring what table you are passing the variables to
strSQL2 = "Update tTbl_LoginUsers SET fldLoggedIn = '" & strLoggedIn & "', fldComputer = '" & StrComputerName & "'" & _
" WHERE intCPIIUserID = " & LngUserID
cnn.Execute strSQL1, , adCmdText + adExecuteNoRecords
cnn.Execute strSQL2, , adCmdText + adExecuteNoRecords
'/close connections and clean up
cnn.Close
Set cnn = Nothing
End Function
If Not Rs.EOF And Not Rs.BOF Then
gilt auch für ADO (obwohl in der Regel nur die überprüfung EOF ist ausreichend)- SQL Server kann nicht akzeptieren, dass die Datum-Zeit-stirng von '" & Jetzt() & "', sollen Sie es konvertieren in format, zum Beispiel, 'yyyy-mm-ddThh:mm:ss'.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der DAO Fall Ihre mithilfe von code (DAO) - Recordset-Objekte und die Vermeidung von expliziten SQL-Anweisungen; in der ADO, falls Sie mit expliziten SQL-Anweisungen und die Vermeidung der Verwendung von (ADO) - Recordset-Objekte. Als solche, die kurze Antwort auf Ihre Frage ist: verwenden von ADO-Recordset-Objekte, und haben Sie Ihre
BOF
undEOF
Eigenschaften, die wie bei DAO (http://msdn.microsoft.com/en-us/library/windows/desktop/ms675787%28v=vs.85%29.aspx). Als ein beiseite, du bist auch die späte Bindung in der ADO-Fall, und ich würde vorschlagen, Sie verwenden die frühe Bindung statt (D. H., fügen Sie einen Verweis auf die ADO-Typbibliothek und stark, nicht schwach typisierte Objekt-Variablen).Das heißt, dass das DAO-Recordset-Fall Sie in der Regel eine Instanz durch das aufrufen eines
Database
ObjektOpenRecordset
Methode; im Gegensatz, Sie instanziieren von ADO-version direkt vor dem Aufruf seinerOpen
Methode in der Regel übergeben eines ADO -Connection
Objekt (ein ADO -Connection
entspricht etwa einer DAODatabase
). Es gibt auch keine expliziteEdit
Methode:Werde ich Sie vorschlagen, um dies zu testen, habe ich kompiliert, aber nicht ausgeführt, wie ich es habe, nicht geschaffen, solche Tabellen in der db:
RS.EOF wird hier nicht benutzt, da wir ein direktes update.
Dies war meine Antwort:
"Wenn Nicht Rs.EOF Und Nicht Rs.BOF Then" ist eine Möglichkeit zu sehen, wenn das recordset leer ist oder nicht. Nur, wenn das recordset leer ist, kann der Rs.BOF und Rs.EOF beide wahr sein.