AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Dienst und problembehaftete SQLConnection
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst und problembehaftete SQLConnection

Ein Thema von dannyl2912 · begonnen am 1. Jul 2014 · letzter Beitrag vom 1. Jul 2014
Antwort Antwort
dannyl2912

Registriert seit: 23. Okt 2013
3 Beiträge
 
Delphi XE7 Enterprise
 
#1

Dienst und problembehaftete SQLConnection

  Alt 1. Jul 2014, 09:19
Datenbank: MySQL • Version: 5.6.11 • Zugriff über: MySQLConnector/DBExpress
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:
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;
In dem Dienst wird dies wie folgend aufgerufen:

Code:
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;
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.


Danke schon mal

Edit: Funktion mit Try-Code erweitert mit gleichem Ergebnis.

Geändert von dannyl2912 ( 1. Jul 2014 um 12:00 Uhr)
  Mit Zitat antworten Zitat
dannyl2912

Registriert seit: 23. Okt 2013
3 Beiträge
 
Delphi XE7 Enterprise
 
#2

AW: Dienst und problembehaftete SQLConnection

  Alt 1. Jul 2014, 13:25
Edit:


nach ein paar Änderungen bekomme ich folgende Meldung:

Code:
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!
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.

Geändert von dannyl2912 ( 1. Jul 2014 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz