Connection / Befehl zur MySQL DB auf dem Host geht einfach nicht... (Logging)

Hallo liebe mAirList Gemeinde!

Ich werkle nun schon seit ein paar Tagen daran, wie der String in der Konfiguration aussehen muss,
damit ich die Logging-Daten zum Server beim Hoster hinaufsenden kann, für Liveticker und Song-Suche
(Wann wurde was gespielt). Ich habe schon so viele Tests gemacht, (arbeite mangels Wissen mittels
“Try & Error-Verfahren”), werde aber aus den Fehlermeldungen einfach nicht schlau genug um die Lösung
zu finden da ich unter Anderem nicht genau weiss, ob sich die Fehlermeldung auf den Login-String oder den
“SQL Befehl beim Start eines Elementes” bezieht… Ich hab auch manchmal das Gefühl, die Errormeldungen
lügen mich stinkfrech an… :wink:

Meine Vorgehensweise:
Zuallererst habe ich den MySQL Connector “libmysql.dll” in den Program-Ordner von mAirlist kopiert.
(Hab ich im INet bei “www.opendll.com” gefunden)

In der mAirList Konfiguration hab ich ein neues Logger-Element erstellt (unter Logging > Hinzufügen > SQL Datenbank) und darin unter “Datenbank Connection String” folgenden String eingegeben

DriverID=mysql;Server=dbxxx.mydbserver.com;Database=DBNAME;User_Name=USERNAME;Password=PASSWORD
(Aus Sicherheitsgründen modifiziert)

und im Feld “SQL-Befehl beim Start eines Elementes” diesen:
INSERT INTO tbl_SongLogger (crdate, title, artist, album, datetime, length, kid, secret) VALUES (NOW(), “%b”, “%a”, “%u{Album}”, “%Y-%M-%D %h:%m:%s”, “%L”, “%V”, “******”);

Ich erhalte dann - wenn ich einen Song im Playerr abspiele - diese Fehlermeldung in der Statuszeile:
18.06.2015 08:46:14 Fehler Fehler beim Logging (SQL-Datenbank): Invalid param: p1

Worauf bezieht sich denn der param p1? Logging-String oder Insert befehl?

Noch verwirrender ist für mich der weitere Test, den ich machte um dies zu analysieren…
Habe dann im zweiten Feld (SQL-Befehl beim Start eines Elementes) folgenden Befehl eingegeben, um zu schauen, ob ich eine andere Fehlermeldung erhalte

select * from tbl_SongLogger

Und wiederum einen Song abgespielt, folgende Fehlermeldung erhalten:

18.06.2015 09:02:01 Fehler Fehler beim Logging (SQL-Datenbank): [FireDAC][Phys][MySql]-310. Cannot execute command returning result sets. Hint: use Open method for SELECT-like commands

In dem Fall gehe ich davon aus, dass der Login-Befehl korrekt sein muss da diese Fehlermeldung sich auf den zweiten Befehl bezieht… richtig?

Kann mir diesbezüglich jemand helfen? Ich bin etwas verwirrt und komme echt nicht mehr weiter…

Noch einige Eckdaten:
Ich teste mit mAirList V 5.1.2 Build 2780.
Der Hoster arbeitet mit einer MySql DB (V5.5).

Wenn zu kompliziert ist, was ich hier versuchte zu beschreiben - bitte nach Details fragen, ich werde so gut wie möglich kooperien… :slight_smile:

Besten Dank!!
Glg
Maexchen

Lass mal die Anführungszeichen um die Parameter weg, also nur %L statt “%L”.

Allerdings wird das mit dem %Y-%M-%D %h:%m:%s nicht funktionieren, weil man nur einen Parameter pro Spalte verwenden kann. Du könntest hier wohl einfach NOW() reinschreiben, hat denselben Effekt :wink:

Zur Funktionsweise:

Aus der Anfrage

INSERT INTO tabelle VALUES(%a, %b)

wird intern die parametrisierte Anfrage

INSERT INTO tabelle VALUES(:p1, :p2)

gemacht, und dann mittels SetParam die Werte eingesetzt. So wird das korrekte Escaping sichergestellt, und außerdem SQL Injections vermieden. Die Anführungszeichen werden dabei nach Bedarf automatisch wieder hinzugefügt.

Zu der Frage nach dem SELECT: Die Fehlermeldung bedeutet, dass du keine Anfragen verwenden darfst, die Werte zurückliefern, also kein SELECT, sondern nur INSERT oder UPDATE.

Hallo Torben

Danke für Deine Antwort; ich hab gerade mal versucht, Deine Tipps zu implementieren. Leider erhalte ich wiederum eine andere Fehlermeldung, die ich nicht interpretieren kann…

Login String:
DriverID=MySql;Server=xxxxx.mydbserver.com;Database=uxxxxxx1;User_Name=pxxxxx2;Password=*****

SQL-Start-String:
INSERT INTO tx_twwcstreamer_domain_model_pushinfo(crdate, title, artist, album, datetime, length, kid, secret) VALUES(NOW(),%b,%a,%u{Album},NOW(),%L,%V,******);

Erhalte ich folgende Fehlermeldung:

22.06.2015 08:00:06 Fehler Fehler beim Logging (SQL-Datenbank): [FireDAC][Phys]-321. Character [(] is missed

Ich “sehe” da kein “Missing [(]” in meinem String…?

Was könnte diese Meldung bedeuten? Und kommt die vom ersten Login String oder doch vom SQL-Start String?
Wie könnte ich das herausfinden?

btw: von meinem Test-PC aus komme ich via telnet auf die MySql-DB beim Hoster, dies habe ich schon getestet…

Er liefert mir zwar seltsame Zeichen zurück, könnte evtl mit einem Protokoll nicht stimmen, dass er diese Zeilen nicht richtig interpretieren kann? Oder siehst Du da keinen Zusammenhang?

im Command Prompt gebe ich ein: c:>telnet xxxxx.mydbserver.com 3306
Und erhalte diese Meldung zurück:
[hr]
J
5.5.28¯▼0jE~&>☻ǧ#|j|TmGZm7i,mysql_native_password
[hr]

nach ca 10 Sekunden bricht die Verbindung ab mit der Meldung “Verbindung zu Host verloren” - Egal ob ich am Passwort eingeben bin oder nix mache… hmm…

und dann bin ich wieder beim C:>…

Any idea?

Glg
Maexchen - Radio Kanal K Schweiz

Das secret (****) hast du aber schon noch in Anführungszeichen geschrieben, ja? Das musst du.

Nur bei den Parametern mit %, die mAirList ergänzen soll, die Anführungszeichen weglassen.

Die Verbindung zum MySQL-Server funktioniert jetzt jedenfalls, die Meldung ist ein Syntaxfehler, vom Server ausgegeben, also antwortet er und lässt dich auch rein.

Jaa Super!! :slight_smile: Soweit funktionert das Logging, Also wenn ich den String kürze und “nur” diesen Teil eingebe:

INSERT INTO tx_twwcstreamer_domain_model_pushinfo(crdate) VALUES(NOW());

erhalte ich keine Fehlermeldung mehr und der SQL Server hat den Eintrag drin! Cool!

:slight_smile: :smiley: 8) 8)

Nun muss ich nur noch herausfinden, wo der falsche Syntax liegt, das muss ich aber alleine schaffen, das wird noch eine Herausforderung…

Jedenfalls vielen herzlichen Dank für Deine Hilfe!! Wie immer hast Du mich einen grossen Schritt weiter gebracht!

Liebe Grüsse aus der Schweiz
Maexchen (René)

Hab den “faulen” String herausgefunden… Aber ich weiss nicht, wie ich den korrigieren könnte…?

INSERT INTO tx_twwcstreamer_domain_model_pushinfo(crdate,title,artist,album) VALUES(NOW(),%b,%a,%u{Album});

Erhalte ich folgende Fehlermeldung:

22.06.2015 12:40:54 Fehler Fehler beim Logging (SQL-Datenbank): [FireDAC][Phys]-321. Character [(] is missed

Also der %u{Album} geht nicht…

Ich bin doch sicher nicht der Einzige, der das Album auf dem Liveticker haben muss… Wie haben das die anderen gemacht? Bzw wo habe ich was Falsch?

Wenn ich jedoch ein Log auf dem lokalen PC schreibe - mit denselben Parameter - gibt er den String korrekt aus…
Format des Start Eintrages:
%Y-%M-%D %h:%m - Song: %b%tInterpret: %a%tAlbum: %u{Album}%tLänge: %L
Ergebnis:
2015-06-22 12:40 - Song: BACK TO YOU Interpret: TWERPS Album: RANGE ANXIETY Länge: 00:02:30

hmmm…
glg
Maexchen – René

Teste mal bitte den neuen Build 2781.

Lieber Torben

Habe gestern Dein neuestes Build installiert und durchgetestet…

[size=12pt][font=impact]Heureka!!![/font][/size] Es funktioniert!! Suuuper!
Vielen Dank für Deine Korrektur!
War es ein Bug den Du behoben hast, oder eine Korrektur / Anpassung für mich?

Vielen herzlichen Dank für Deine Hilfe!! Wie immer hast Du mich mit Deiner superschnellen Hilfe einen grossen Schritt weiter gebracht!

Liebe Grüsse aus der Schweiz
Maexchen (René)

War ein Bug - er hat den Parameter-Teil von Variablen wie %u{Album} nicht richtig ausgewertet bzw. ersetzt, so dass immer das “{Album}” in der Anfrage stehen blieb:

INSERT INTO xxx VALUES ("Das Album"{Album})

statt:

INSERT INTO xxx VALUES ("Das Album")