Vista: Zugriff auf SQL Server 2005

13/06/2008 - 13:36 von Stefan Voit | Report spam
Hallo Newsgroup,

ich greife mit einem VB6-Programm (Startprogramm für ein Access-Frontend, das die aktuelle Version des Frontends làdt) auf unseren SQL 2005 Server über den SQL Server Native Client zu.
Unter Windows 2000 und XP funktioniert das Programm wunderbar.

Jetzt habe ich eine Vista-Arbeitsstation und wenn ich auf dieser das Programm ausführe, ignoriert es jede
Code-Zeile, in der ein Datenzugriff stattfindet.

Anbei ein Ausschnitt aus dem Quellcode:

************************
Dim Con As ADODB.Connection

'Connection zum SQL-Server
Set Con = New ADODB.Connection
With Con
.Provider = "SQLNCLI.1"
.Properties("Data Source") = "server"
.Properties("Integrated Security") = "SSPI" ' ActiveDirectory-Authentifizierung
.Properties("Persist Security Info") = False
.Properties("Initial Catalog") = "Datenbank"
.CursorLocation = adUseClient
.Open
End With

frmStatus.Show
frmStatus.lstStatus.AddItem " aktuelle Versionsnummer aus Datenbank holen... "
frmStatus.Refresh

' aktuell benötigte Version aus tblVersion holen
Dim rs As New ADODB.Recordset

rs.Open "SELECT * FROM tblVersion", Con, adOpenKeyset, adLockReadOnly
MsgBox rs.RecordCount

MsgBox "TEST"

If rs.EOF Then
MsgBox "FEHLER beim Holen der aktuellen Versionsnummer aus Datenbank!" & vbCr & vbCr & _
"Bitte Admin benachrichtigen!", vbCritical, "Fehler"
End
Else
MsgBox rs!version & vbCr & vbCr & " TEST!", vbInformation, "TEST"
End If

End
************************

Auf der XP-Arbeitsstation bringt er die erste Message-Box mit der Anzahl der Datensàtze, dann 'TEST' und dann die Message-Box im ELSE-Teil mit der ersten Versionsnummer.

Auf dem Vista-PC bringt er die Anzahl der Datensàtze nicht, dann kommt aber das 'TEST' und dann bringt er die Message-Box aus dem THEN-Teil.

Zugriffsrechte hat der Benutzer des Vista-PCs auf den SQL-Server, da dass Access-Frontend, das auch über Active-Directory-Authentifizierung arbeitet, funktioniert.

Den aktuellsten SQL-Server-Native-Client habe ich von folgendem Link installiert: http://www.microsoft.com/downloads/...8B9D835CDC

Weiß jemand eine Lösung?

Vielen Dank im Voraus!

Mit freundlichen Grüßen

Stefan Voit
 

Lesen sie die antworten

#1 Peter Götz
01/07/2008 - 10:06 | Warnen spam
Hallo Stefan,

ich greife mit einem VB6-Programm (Startprogramm
für ein Access-Frontend, das die aktuelle Version des
Frontends làdt) auf unseren SQL 2005 Server über
den SQL Server Native Client zu.



Hmm, auch nach mehrmaligem Lesen verstehe
ich den vorstehenden Satz nicht. Insbesondere
im Zusammenhang mit Deinem nachfolgenden
Programmcode sehe ich erst mal keinen Zusammen-
hang mit Access.

Unter Windows 2000 und XP funktioniert das Programm
wunderbar.

Jetzt habe ich eine Vista-Arbeitsstation und wenn ich auf
dieser das Programm ausführe, ignoriert es jede
Code-Zeile, in der ein Datenzugriff stattfindet.




Was meinst Du mit "ignoriert es jede Code-Zeile"?


Anbei ein Ausschnitt aus dem Quellcode:

************************
Dim Con As ADODB.Connection

'Connection zum SQL-Server
Set Con = New ADODB.Connection
With Con
.Provider = "SQLNCLI.1"
.Properties("Data Source") = "server"
.Properties("Integrated Security") = "SSPI" '


ActiveDirectory-Authentifizierung
.Properties("Persist Security Info") = False
.Properties("Initial Catalog") = "Datenbank"
.CursorLocation = adUseClient
.Open
End With



Für das Con.Open im vorstehenden Codeblock wàre
eine Fehlerüberwachung sinnvoll und dringend anzuraten.

Was sagt ein

Debug.Print (Con.State and adStateOpen) ?

an dieser Stelle im Deinem Code, also nach dem
Con.Open?

frmStatus.Show
frmStatus.lstStatus.AddItem " aktuelle Versionsnummer
aus Datenbank holen... "
frmStatus.Refresh

' aktuell benötigte Version aus tblVersion holen
Dim rs As New ADODB.Recordset

rs.Open "SELECT * FROM tblVersion", Con, adOpenKeyset, adLockReadOnly




CursorType = adOpenKeyset
und
CursorLocation = adUseClient

passen nicht zusammen.
CursorType = adOpenStatic
wàre z.B. sinnvoll.


MsgBox rs.RecordCount

MsgBox "TEST"

If rs.EOF Then



Da Dein Programm offenbar bis hierhin làuft,
ist davon auszugehen, dass das Recordset rs
existiert und geöffnet ist. Andernfalls würde hier
ein Fehler ausgelöst, sofern Du nicht vorher
irgendwo ein > On Error Resume Next < in
Deinem Code hast.

Ein

Debug.print (RS.State and adStateOpen)

sollte folglich hier ein adStateOpen (1) liefern.

MsgBox "FEHLER beim Holen der aktuellen
Versionsnummer aus Datenbank!" & vbCr & vbCr & _
"Bitte Admin benachrichtigen!", vbCritical, "Fehler"
End



Was soll dieses "End" an dieser Stelle?

Else
MsgBox rs!version & vbCr & vbCr & " TEST!", vbInformation, "TEST"
End If

End



Und auch hier die Frage nach dem Grund für das "End".
Wenn Du Dein Programm beenden möchtest, dann
schliesse alle DB-Objekte wie Connections u. Recordsets,
löse alle Verweise auf und entlade alle Forms. Mit dem
Entladen der letzten Form endet auch Dein Programm.
Ein > End < ist an keiner Stelle erforderlich oder sinnvoll.

Ein > End < zum Beenden eines Programmes ist so,
als würdest Du Dein Auto gegen einen Baum fahren
um es zum Stehen zu bringen.
U.a. hat > End < zur Folge, dass Aufràumcode in den
Ereignisprozeduren "_QueryUnlaod" u. "_Unload" der
noch geladenen Forms nicht ausgeführt wird, evtl.
noch existierende Objektverweise können u.U. nicht
mehr aufgelöst werden und eine Reihe weiterer
unschöner Dinge.

************************

Auf der XP-Arbeitsstation bringt er die erste
Message-Box mit der Anzahl der Datensàtze,



Also wurde das rs geöffnet und enthàlt offenbar
auch mindestens einen Datensatz.

dann 'TEST' und dann die Message-Box im
ELSE-Teil mit der ersten Versionsnummer.

Auf dem Vista-PC bringt er die Anzahl der Datensàtze
nicht,



Was heisst "bringt nicht"?
Kommt die MsgBox überhaupt?
Sagt die MsgBox 0 Datensàtze?
Oder was sonst?

Auch hier nochmal die Frage:
hast Du irgendwo, und wenn ja, an welcher
Stelle, ein > On Error Resume Next <
in Deinem Code stehen?


dann kommt aber das 'TEST' und dann bringt er
die Message-Box aus dem THEN-Teil.

Zugriffsrechte hat der Benutzer des Vista-PCs
auf den SQL-Server, da dass Access-Frontend,



Welches "Access-Frontend"?

das auch über Active-Directory-Authentifizierung
arbeitet, funktioniert.



Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen