MySQL Anweisung formtiert übergeben

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
berlin1109
Beiträge: 8
Registriert: So 29. Apr 2012, 22:46

MySQL Anweisung formtiert übergeben

Beitrag von berlin1109 »

Hallo,

habe folgende SQL-Anweisung in MySQL-workbench erstellt und sie macht das was sie machen soll:

Code: Alles auswählen

LOAD DATA INFILE 'C:/Users/KP/Documents/solar-Datalogg/datalog_120423.txt' INTO TABLE solar_import
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(Volt, Ampere, Zeit, Datum, Wh_Netz);
 
 
Leider schaffe ich es nicht diese Anweisung in ein Programm einzufügen.
Trotz vieler Versuche und viel "google" weiß ich nicht mehr weiter:
 

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  SD_datum: string;
begin
  SD_datum := InputBox('Datum eingeben: JJ.MM.DD', 'Please type in some information',
    'Some sample text');
  ZQuery1.SQL.Text := 'LOAD DATA INFILE ' + QuotedStr('C:/Users/KP/Documents/solar-Datalogg/datalog_' + SD_datum + '.txt') + ' INTO TABLE solar_import'
    + 'FIELDS TERMINATED BY ' + QuotedStr(';') + ' LINES TERMINATED BY ' + QuotedStr('\n')
    + ' IGNORE 1 LINES (Volt, Ampere, Zeit, Datum, Wh_Netz)';
  ZQuery1.ExecSQL;
end;
Was mache ist da falsch?

Gruß Klaus

PS. nutze die zeosDBO in Version 7
Zuletzt geändert von Lori am Mo 7. Mai 2012, 18:43, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: MySQL Anweisung formtiert übergeben

Beitrag von MmVisual »

Das kann ja wohl nur gehen wenn der Server der localhost ist.

Lade doch besser die Datei in eine TStringList und füge Zeilenweise diese in ein TZQuery einzeln hinzu.
Dabei kannst Du gleich eine Überprüfung der Daten einbauen, denn wenn die Datei korrupt ist, sollte wohl auch nichts in die Datenbank.
EleLa - Elektronik Lagerverwaltung - www.elela.de

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: MySQL Anweisung formtiert übergeben

Beitrag von hde »

Enable LOAD DATA LOCAL handling: By default, the LOCAL option of the LOAD DATA statement is disabled for security reasons. Enabling this option will allow you to load data from the local machine (the machine where the client GUI application is running). This option corresponds to starting a MySQL command-line tool with the --local-infile=1 option. (Note that this option is ineffective unless the MySQL server allows LOCAL handling.)

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: MySQL Anweisung formtiert übergeben

Beitrag von DiBo33 »

Und nicht zu vergessen, das Leerzeichen zwischen solar_import und FIELDS

berlin1109
Beiträge: 8
Registriert: So 29. Apr 2012, 22:46

Re: MySQL Anweisung formtiert übergeben

Beitrag von berlin1109 »

Hallo,

wie so oft steckt der Teufel im Detail...

@DiBo33
Es war das Leerzeichen, danke DiBo33 und jetzt funktioniert es auch im Lazarus-Programm! :D

@MmVisual & hde
Danke für die Hinweise, aber wie oben geschrieben, lief die Anweisung unter MySQL(workbench) ja schon und ich hatte die entsprechenden lokalen Einstellungen für MySQL gesetzt.

Zum Verständnis:
Ein Datenlogger (arduino-Selbstentwicklung) erfasst täglich ca. 2000 Datensätze und speichert die auf einer SD-card im .txt - Format.
Diese Datei lese ich ein und mein Programm verarbeitet die Daten weiter.
Alles läuft lokal.

... dank eurer Hilfe läuft es jetzt

Gruß Klaus

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MySQL Anweisung formtiert übergeben

Beitrag von Aliobaba »

Hallo,

eigentlich ist das sicher eine Anfängerfrage, aber es passt zu diesem Thread:
Genau das Übertragen "innerhalb" von Lazarus
von:

LOAD DATA INFILE 'C:/Users/KP/Documents/solar-Datalogg/datalog_120423.txt' INTO TABLE solar_import
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(Volt, Ampere, Zeit, Datum, Wh_Netz);


zu:

ZQuery1.SQL.Text := 'LOAD DATA INFILE ' + QuotedStr('C:/Users/KP/Documents/solar-Datalogg/datalog_' + SD_datum + '.txt') + ' INTO TABLE solar_import'
+ 'FIELDS TERMINATED BY ' + QuotedStr(';') + ' LINES TERMINATED BY ' + QuotedStr('\n')
+ ' IGNORE 1 LINES (Volt, Ampere, Zeit, Datum, Wh_Netz)';


ist auch mein aktuelles Problem: "QuotedStr" , die eingefügten Pluszeichen, das Setzen der Klammern und der Anführungsstriche an der richtigen Stelle :cry: :(

Wo bekomme ich als Anfänger die Infos her, dies zu lernen??

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: MySQL Anweisung formtiert übergeben

Beitrag von Antrepolit »

Aliobaba hat geschrieben:Hallo,

eigentlich ist das sicher eine Anfängerfrage, aber es passt zu diesem Thread:
Genau das Übertragen "innerhalb" von Lazarus
(...)
ist auch mein aktuelles Problem: "QuotedStr" , die eingefügten Pluszeichen, das Setzen der Klammern und der Anführungsstriche an der richtigen Stelle :cry: :(

Wo bekomme ich als Anfänger die Infos her, dies zu lernen??

Aliobaba
Es mag dich nun erschrecken, aber es ist nunmal so:

- Es gibt Bücher über Lazarus
- Es gibt Tutorials über Lazaurs mit Beispielen
- Es gibt Bücher über MySQL
- Es gibt Tutorials über MySQL mit Beispielen
- Es gibt Google

Falls du eine detailierte Anleitung benötigst, wie man diese einzelenen Dinge benutzt, dann scheu' dich nicht hier zu fragen. :wink:
Grüße, Antrepolit

care only if your os is really burning

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: MySQL Anweisung formtiert übergeben

Beitrag von knight »

Aliobaba hat geschrieben: ist auch mein aktuelles Problem: "QuotedStr" , die eingefügten Pluszeichen, das Setzen der Klammern und der Anführungsstriche an der richtigen Stelle :cry: :(

Aliobaba
Du solltest Parameter verwenden.

knight

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MySQL Anweisung formtiert übergeben

Beitrag von Aliobaba »

Antrepolit hat geschrieben: Es mag dich nun erschrecken, aber es ist nunmal so:
- Es gibt Bücher über Lazarus
- Es gibt Tutorials über Lazaurs mit Beispielen
- Es gibt Bücher über MySQL
- Es gibt Tutorials über MySQL mit Beispielen
- Es gibt Google
Hallo,
natürlich ist die Kritik berechtigt - bitte aber auch um Verständnis für einen "lernbegierigen" Anfänger, der oft vor lauter Wald die Bäume nicht mehr sieht: http://www.lazarusforum.de/viewtopic.ph ... 0&start=15" onclick="window.open(this.href);return false;
Ich lese wirklich viel, aber oft ist das Problem ja, dass man - bei dieser umfangreichen Materie - oft einfach nicht weiß, wo man die richtige Info findet.

Aliobaba

Trotzdem: Hat trotzdem noch jemand einen konkreten Tip, wo man die besten Infos findet, wie man die SQL-Strings als Parameter übergibt?
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: MySQL Anweisung formtiert übergeben

Beitrag von Hitman »

Aliobaba hat geschrieben:Trotzdem: Hat trotzdem noch jemand einen konkreten Tip, wo man die besten Infos findet, wie man die SQL-Strings als Parameter übergibt?
Ich wüsste da was ... :-)
Rückfragen sind hier natürlich erlaubt, wenn die verlinkte Wiki Seite nicht hilft.

Antworten