Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL .sql ausführen (https://www.delphipraxis.net/175870-mysql-sql-ausfuehren.html)

SyntaxXx 24. Jul 2013 22:09

Datenbank: MYSQL • Version: 5.5.27 • Zugriff über: dbExpress

MySQL .sql ausführen
 
Nabend zusammen,
ich versuche mich gerade an einer MySQL Datenbank, bzw das Importieren einer solchen.

Dazu habe ich von dbExpress "TSQLConnection" und "TSQLQuery" eingerichtet.
Einfache Abfragen funktionieren auch wunderbar, doch das Ausführen einer ganzen .sql Datei funktioniert leider nicht.

Dazu habe ich einfach mal eine Testdatenbank geladen: http://www.mysqltutorial.org/mysql-sample-database.aspx
Dort musste ich noch "USE `classicmodels`;" zu "/*USE `classicmodels`;*/" ändern, damit ich meine Datenbank verwenden konnte.

Aber wenn ich nun die Querys aus der Datei ausführen möchte bekomme ich folgenden Fehler:

Zitat:

xception-Klasse TDBXError mit Meldung
'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CH' at line 18'.
Ich verstehe aber nicht, warum diese Meldung kommt.
Wenn ich das über PHPMyAdmin aufrufe, funktioniert alles wunderbar.


Desweiteren würde mich noch interessieren, ob man auch eine Verbindung mit "TSQLConnection" herstellen kann, ohne eine DB anzugeben, da ich diese erst zur Laufzeit erstellen möchte.

RWarnecke 25. Jul 2013 07:45

AW: MySQL .sql ausführen
 
Zitat:

Zitat von SyntaxXx (Beitrag 1222572)
Wenn ich das über PHPMyAdmin aufrufe, funktioniert alles wunderbar.

Wie rufst Du es Denn über PHP auf ? Im Reiter Importieren oder SQL ?

Eine einfache Query kann nicht ein komplettes SQL-Skript abarbeiten.

SyntaxXx 25. Jul 2013 12:36

AW: MySQL .sql ausführen
 
Achso natürlich, sollte man vielleicht erwähnen ^^
Also über PhpMyAdmin über den Reiter "importieren".


Über mein Programm:

Delphi-Quellcode:
SQLQuery.SQL.LoadFormFile(Edit1.Text); // Pfad/script.sql
SQLQuery.Open;

Ich habe gedacht, da es ja die Funktion "LoadFromFile" gibt, sollten daher mehrere Befehle problemlos möglich sein.

Sir Rufo 25. Jul 2013 12:54

AW: MySQL .sql ausführen
 
Daraus kann man die Funktionalität nicht ableiten.

Teilweise muss ein Skript noch interpretiert werden (z.B. bei MSSQL das "GO"), bzw. hier muss das Skript 1:1 an den Server geschickt werden.

Einige Komponenten prüfen ihrerseits aber nochmal die Syntax und werfen dann einen Fehler bevor der Server was von dem Skript sieht

SyntaxXx 25. Jul 2013 12:58

AW: MySQL .sql ausführen
 
Ok das heißt, ich muss das Script irgendwie an den Server senden, ohne das eine Überprüfung statt findet?

Es wird doch bestimmt eine saubere Lösung geben, anstatt die Fehler abzufangen aber einfach zu ignorieren oder?

Sir Rufo 25. Jul 2013 13:07

AW: MySQL .sql ausführen
 
Nach meiner kleinen Google Rundreise, sieht es wohl so aus, dass du bei dbExpress tatsächlich das Skript auseinanderpflücken musst und jeden Befehl einzeln zum Server schickst.

Am Besten sogar mit Delphi-Referenz durchsuchenTSQLConnection.ExecuteDirect

BTW wenn du XE4 hast, warum dann nicht mit FireDAC Bei Google suchenTADScript?
(Das ist bei der Architect Version doch inklusive)

SyntaxXx 26. Jul 2013 22:02

AW: MySQL .sql ausführen
 
Hmmm jetzt bin ich aber ein wenig erstaunt, dass etwas recht einfaches nicht einfach so umzusentzen ist.
Es muss ja nur Text an den Server gesendet werden. Der Rest wird ja automatisch verarbeitet.


Jetzt habe ich mir mal die ZeosLib angesehen, aber auch damit geht es nicht.

Jetzt stelle ich mir die Frage, wie ich am effektivsten das Script zerlege, dass jeder Command einzeld ausgeführt wird.
Je nach Datenbank, sind es ja mehrere tausend Zeilen.
Ich weiß nicht, wie ich die effektiv zerlegen soll.

EgonHugeist 26. Jul 2013 22:10

AW: MySQL .sql ausführen
 
??? Zeos: Die Antwort lauted TZSQLProzessor... Der zerlegt dir das Script. Achte auf korrekte Delimiter, ansonstent wird keine Componente das Script splitten können. Welche verwendest du? ";" gilt hier nicht in jedem Fall!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 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