Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono sposób otwierania obiektów zestawu rekordów i połączeń ADO.
Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 168336
Podsumowanie
Obiekty danych ActiveX (ADO) oferują kilka sposobów otwierania obiektów Connection i Recordset. W tym artykule przedstawiono przykładowy kod dla kilku typowych technik dla każdego obiektu.
Więcej informacji
Istnieje kilka sposobów otwierania obiektu połączenia w obrębie obiektu ADO:
- Ustawiając
ConnectionStringwłaściwość na prawidłowy ciąg Połączenia, a następnie wywołując metodęOpen(). Ten parametry połączenia jest zależny od dostawcy. - Przekazując prawidłowy ciąg Connect do pierwszego argumentu
Open()metody . - Przekazując prawidłowy obiekt Command do pierwszego argumentu metody Open zestawu rekordów.
- Przekazując nazwę źródła danych ODBC oraz opcjonalnie identyfikator użytkownika i hasło do metody obiektu
Open()połączenia.
Istnieją trzy sposoby otwierania obiektu zestawu rekordów w ramach ADO:
- Otwierając zestaw rekordów poza
Connection.Execute()metodą . - Otwierając zestaw rekordów poza
Command.Execute()metodą . - Otwierając obiekt zestawu rekordów bez obiektu Connection lub Command i przekazując prawidłowy parametr połączenia do drugiego argumentu
Recordset.Open()metody.
W tym kodzie przyjęto założenie, że Nwind.mdb jest zainstalowana w języku Visual Basic i znajduje się w pliku C:\Program Files\DevStudio\VB directory:
Option Explicit
Private Sub cmdOpen_Click()
Dim Conn1 As New adodb.Connection
Dim Cmd1 As New adodb.Command
Dim Errs1 As Errors
Dim Rs1 As New adodb.Recordset
Dim i As Integer
Dim AccessConnect As String
' Error Handling Variables
Dim errLoop As Error
Dim strTmp As String
AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
'---------------------------
' Connection Object Methods
'---------------------------
On Error GoTo AdoError ' Full Error Handling which traverses
' Connection object
' Connection Open method #1: Open via ConnectionString Property
Conn1.ConnectionString = AccessConnect
Conn1.Open
Conn1.Close
Conn1.ConnectionString = ""
' Connection Open method #2: Open("[ODBC Connect String]","","")
Conn1.Open AccessConnect
Conn1.Close
' Connection Open method #3: Open("DSN","Uid","Pwd")
Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
"DBQ=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
Conn1.Close
'--------------------------
' Recordset Object Methods
'--------------------------
' Don't assume that we have a connection object.
On Error GoTo AdoErrorLite
' Recordset Open Method #1: Open via Connection.Execute(...)
Conn1.Open AccessConnect
Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
Rs1.Close
Conn1.Close
' Recordset Open Method #2: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Set Rs1 = Cmd1.Execute
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #3: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Rs1.Open Cmd1
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #4: Open w/o Connection & w/Connect String
Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
Rs1.Close
Done:
Set Rs1 = Nothing
Set Cmd1 = Nothing
Set Conn1 = Nothing
Exit Sub
AdoError:
i = 1
On Error Resume Next
' Enumerate Errors collection and display properties of
' each Error object (if Errors Collection is filled out)
Set Errs1 = Conn1.Errors
For Each errLoop In Errs1
With errLoop
strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
strTmp = strTmp & vbCrLf & " Description " & .Description
strTmp = strTmp & vbCrLf & " Source " & .Source
i = i + 1
End With
Next
AdoErrorLite:
' Get VB Error Object's information
strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
strTmp = strTmp & vbCrLf & " Description " & Err.Description
MsgBox strTmp
' Clean up gracefully without risking infinite loop in error handler
On Error GoTo 0
GoTo Done
End Sub
UWAGI O BŁĘDACH
Tylko obiekt połączenia ADO ma kolekcję błędów. Obserwujący czytelnik zauważy, że w przykładach RecordSet.Open działa uproszczona procedura obsługi błędów. W przypadku błędu podczas otwierania obiektu RecordSet obiekt ADO powinien zwrócić najbardziej wyraźny błąd dostawcy OLEDB. Niektóre typowe błędy, które można napotkać z poprzednim kodem, postępuj zgodnie z instrukcjami.
Jeśli pominięto (lub wystąpił błąd) parametr DefaultDir w ciągu połączenia, może zostać wyświetlony następujący błąd:
Błąd ADO # -2147467259
Description [Microsoft][ODBC Microsoft Access 97 Driver] "(unknown)"
nie jest prawidłową ścieżką. Upewnij się, że nazwa ścieżki to
poprawnie napisane i że masz połączenie z serwerem
na którym znajduje się plik.
Źródłowy dostawca microsoft OLE DB dla sterowników ODBC
Jeśli w parametrze Dbq w ciągu połączenia wystąpi błąd, może zostać wyświetlony następujący błąd:
Błąd ADO # -2147467259 Opis [Microsoft][ODBC Sterownik programu Microsoft Access 97] Nie można odnaleźć pliku "(unknown)".
Źródłowy dostawca microsoft OLE DB dla sterowników ODBC
Powyższe błędy wypełniają również kolekcję Błędy połączenia następującymi błędami:
Błąd ADO # -2147467259
Opis sterownika [Microsoft][Menedżer sterowników ODBC]
SqlSetConnectAttr nie powiodło się
Źródłowy dostawca microsoft OLE DB dla sterowników ODBC
Błąd ADO # -2147467259
Logowanie do opisu nie powiodło się
Źródłowy dostawca microsoft OLE DB dla sterowników ODBC
Uwaga 16.
Dla każdego błędu numer błędu ADO jest taki sam, w tym przypadku tłumaczenie na 0x80004005, czyli ogólny komunikat o błędzie E_FAIL. Podstawowy składnik nie miał określonego numeru błędu dla napotkanego warunku, ale przydatne informacje nigdy nie zostały podniesione do ADO.