Legacy-VB6-Anwendung unter Win7 SQL-Fehler

Legacy-VB6-Anwendung unter Win7 SQL-Fehler

Wir haben bei der Arbeit eine ziemlich unglückliche Legacy-Anwendung, die ursprünglich in VB6 geschrieben wurde und mindestens 5 Jahre älter ist als jeder in unserer IT-Abteilung. Wir haben einen Vertragsentwickler für die laufende Wartung und wo er kann, schreibt er Abschnitte in .NET-Code um (ich bin mir über seine Techniken hier nicht sicher, dies ist ein Nebenjob zu seiner regulären Arbeit als IBM-Ingenieur). Die Anwendung funktioniert (so wie sie ist) unter Windows XP einwandfrei. Wir haben nur ein paar Windows 7-Rechner, hauptsächlich zum Testen, und diese Anwendung scheint gegen eine Wand zu laufen. Dinge wie der Hintergrund, der nicht geladen wird, und SQL-Fehler. Dies läuft sogar als Administrator.

Das Ausführen einer SQL-Ablaufverfolgung über das ODBC-Kontrollfeld zeigt mehrere interessante Dinge. Zunächst wird erfolgreich eine Verbindung zur Datenbank hergestellt und eine Abfrage ausgeführt, um festzustellen, ob die richtige Version ausgeführt wird. Diese Abfrage funktioniert einwandfrei.

            558-1af0 ENTER SQLExecDirectW 
  HSTMT               0x020D7548
  WCHAR *             0x04C8F0F0 [     115] "SELECT count(*) c FROM tblSoftwareVersion WHERE  fldSoftwareVersion = '123456' AND fldSoftwareName = 'Application.VB'"
  SDWORD                   115

BMS             558-1af0 EXIT  SQLExecDirectW  with return code 1 (SQL_SUCCESS_WITH_INFO)
  HSTMT               0x020D7548
  WCHAR *             0x04C8F0F0 [     115] "SELECT count(*) c FROM tblSoftwareVersion WHERE  fldSoftwareVersion = '123456' AND fldSoftwareName = 'Application.VB'"
  SDWORD                   115

Dann scheint die Verbindung zu trennen und die ODBC-Verbindung kann nicht gefunden werden, obwohl sie mit derselben Datenbank verbunden ist. Aus der Ablaufverfolgung geht hervor, dass die Verbindung konfiguriert wird, dann SQLFreeStmt ausgelöst wird, um die Verbindung zu lösen und zu schließen. Wenn die Anwendung dann versucht, ihre Aufgabe zu erledigen, besteht keine Verbindung.

558-1af0 ENTER SQLFreeStmt 
  HSTMT               0x020D7548
  UWORD                        2 <SQL_UNBIND>

BMS             558-1af0 EXIT  SQLFreeStmt  with return code 0 (SQL_SUCCESS)
  HSTMT               0x020D7548
  UWORD                        2 <SQL_UNBIND>

Dann passiert dies, wenn ich versuche, etwas zu tun, das Daten zieht

            558-1af0 ENTER SQLDriverConnectW 
  HDBC                0x020DDA00
  HWND                0x00000000
  WCHAR *             0x73EF8634 [      -3] "******\ 0"
  SWORD                       -3 
  WCHAR *             0x73EF8634 
  SWORD                       -3 
  SWORD *             0x00000000
  UWORD                        0 <SQL_DRIVER_NOPROMPT>

BMS             558-1af0 EXIT  SQLDriverConnectW  with return code -1 (SQL_ERROR)
  HDBC                0x020DDA00
  HWND                0x00000000
  WCHAR *             0x73EF8634 [      -3] "******\ 0"
  SWORD                       -3 
  WCHAR *             0x73EF8634 
  SWORD                       -3 
  SWORD *             0x00000000
  UWORD                        0 <SQL_DRIVER_NOPROMPT>

  DIAG [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0)

Fast alle meine Recherchen zu diesem Thema stoßen auf Programmierprobleme, bei denen die Verbindungszeichenfolge ein Problem aufweist. Der einzige Unterschied in diesem speziellen Szenario ist jedoch Windows 7. Ich weiß, dass die Verbindungszeichenfolge in Ordnung ist, da sie auf den XP-Rechnern funktioniert. Die VB-Komponenten sollten unter Win7 weiterhin funktionieren. Auf meinem Computer läuft Win7 32-Bit und auf meinem VP Win7 64-Bit und beide haben dasselbe Problem, das kann also ausgeschlossen werden.

Ich habe bereits versucht, den SQL Native Client und die VB-Runtime sowie die betreffende Anwendung neu zu installieren. Hoffentlich kann ich eine Lösung finden und muss nicht auf die XP-VM zurückgreifen.

Bearbeiten - Nun, nach vielen Versuchen mussten wir uns hier für die XP VM als Lösung entscheiden. Entweder sind die VB-Komponenten nicht so kompatibel wie behauptet, oder diese alte App macht etwas Seltsames.

Antwort1

Wenn es sich um eine Anwendung handelt, die vom Desktop aus ausgeführt wird (also nicht als Dienst), haben Sie versucht, die Anwendung so einzustellen, dass sie im Kompatibilitätsmodus ausgeführt wird? Ich hatte ein ähnliches Problem mit einem VB6-Programm (dieselbe Funktion zum Lesen der Registrierung wird von zwei verschiedenen Teilen des Programms aus aufgerufen, einer funktioniert, der andere nicht, aber von der VB6-IDE aus funktionieren beide) und einfach mit der rechten Maustaste zu klicken und Win7 auf Kompatibilität testen zu lassen und den XP SP2-Modus auszuwählen, hat das Problem behoben.

Antwort2

Der XP-Modus war letztendlich die einzige Lösung, die funktionieren würde.

verwandte Informationen