![]() |
Datenbank: MySQL • Version: 5.6.11 • Zugriff über: MySQLConnector/DBExpress
Dienst und problembehaftete SQLConnection
Hallo,
ich habe ein Problem, was ich nicht so recht identifiziert bekomme. Bevor ich gleich mit Quelltext-Schnipseln komme eine kurze Erläuterung. Ich möchte einen Dienst erstellen, der einen Zugriff auf die vorhandene MySQL-Datenbank hat, um zukünfigt mit eingehenden Daten automatisiert abarbeiten kann. Hier die Funktion zum Aufbau der Verbindung. Die übergebene Variable für _SQLConnection ist deklariert und sie funktioniert so in meinem Hauptprogramm, da dies eine geteilt genutzte Unit ist.
Code:
In dem Dienst wird dies wie folgend aufgerufen:
function SQLConnect(_Object: TComponent; dbID: string; var _SQLConnection: TSQLConnection): boolean;
begin _SQLConnection := TSQLConnection.Create(_Object); with _SQLConnection do begin Name := 'SQLConnection' + dbID; ConnectionName := 'MySQLConnection'; // hier evtl. andere Datenbanken prüfen oder über Ini-Datei gehen DriverName := 'MySQL'; GetDriverFunc := 'getSQLDriverMYSQL'; LibraryName := 'dbexpmysql.dll'; LoadParamsOnConnect := False; LoginPrompt := False; KeepConnection := true; params.Values['DriverName'] := 'MySQL'; params.Values['HostName'] := 'localhost'; params.Values['Database'] := 'db_name'; params.Values['User_Name'] := 'user'; params.Values['Password'] := 'pw'; params.Values['BlobSize'] := '-1'; params.Values['LocaleCode'] := '0000'; params.Values['Compress'] := 'True'; params.Values['Reconnect'] := 'True'; params.Values['LoginTimeout'] := '60'; params.Values['ReadTimeout'] := '15'; params.Values['WriteTimeout'] := '15'; VendorLib := 'libmysql.dll'; try Connected := true; except on e:Exception do Protokoll(DateTimeToStr(now)+' ' + e.Message,'service.log'); end; end; Result := _SQLConnection.Connected; end;
Code:
Wenn ich den Teil mit dem SQLConnect auskommentiere kommt mein Dienst in die Schleife und schreibt 'Dienst läuft' in mein Protokoll. Führe ich das notwendige SQLConnect aus, steht der Protokolleintrag mit dem ' Dienst wird gestartet -1 !' als letzter Eintrag. Ich konnte die hängen bleibende Stelle ermitteln. Es ist das Connected=true, selbst ein Open bereitet mir hier ein gleiches Problem. Denn den nachfolgenden Eintrag ' Dienst wird gestartet -1a !' bekomme ich nicht und der Fehlerfall mit einer fehlenden Verbindung bekomme ich ebenso wenig. Im Task-Manager bzw. Dienst-Manager kann ich den Dienst als "laufend" identifizieren. Eine Status-Abfrage am MySQL-Server sagt, dass keine weitere Verbindung aufgebaut wurde.
procedure TOnlineThread.Execute;
begin Protokoll(DateTimeToStr(now)+' Dienst wird gestartet -1 !','service.log'); if SQLConnect(PZOnline, '1', PSPSQLConnection) = false then // Datenbank-Verbindung aufbauen! begin Protokoll('Verbindung zum Datenbank-Server nicht möglich!' + #13 + #10 + 'Programm wird beendet!','service.log'); Terminate; end; Protokoll(DateTimeToStr(now)+' Dienst wird gestartet -1a !','service.log'); //... weiterer Quellcode while not Terminated do begin Protokoll(DateTimeToStr(now)+' Dienst läuft!','service.log'); Sleep(500); end; end; Danke schon mal Edit: Funktion mit Try-Code erweitert mit gleichem Ergebnis. |
AW: Dienst und problembehaftete SQLConnection
Edit:
nach ein paar Änderungen bekomme ich folgende Meldung:
Code:
Ich habe die dbexpmysql.dll in den aktuellen Namen dbxmys.dll umbenannt. Ich habe die DLLs nun mit Pfad angegeben, habe die DLLs lokal und in Windows\SYSWOW64 kopiert. Das Hauptprogramm läuft immer, der Dienst mit der gleichen Funktion unter keiner der Bedinungen. Dazu reagiert das Hauptprogramm allergisch, wenn ich eine andere Version der libmysql.dll unterschiebe. Dies wird vom Dienst ignoriert.
01.07.2014 14:36:39 Dienst wird gestartet -1 !
01.07.2014 14:36:44 Unbekannter Treiber: MySQL Verbindung zum Datenbank-Server nicht möglich! Programm wird beendet! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz