20535
Nov 23, 2005, updated at Nov 29, 2005 (UTC)
8138
18
0
Datei per Batch in Datenbank speichern
Guten Morgen zusammen,
ich habe folgendes Problem.
Ich benötige eine Batch Datei die eine Datenbankverbindung aufbaut. Das ist soweit klar. Anschließend muss in die Datenbank einiges geschrieben werden, das ich über eine fertige SQL Datei machen kann. Das Problem ist jetzt aber, in ein Feld in der Datenbank muss der Inhalt einer beliebigen Datei, zB Powerpoint Präsentation oder eine Excel Datei. Bin mir derzeit nicht sicher ob das Problem auf MySQL Ebene zu lösen ist, oder auf Batch Ebene.
Lieben Gruß,
Stephan
ich habe folgendes Problem.
Ich benötige eine Batch Datei die eine Datenbankverbindung aufbaut. Das ist soweit klar. Anschließend muss in die Datenbank einiges geschrieben werden, das ich über eine fertige SQL Datei machen kann. Das Problem ist jetzt aber, in ein Feld in der Datenbank muss der Inhalt einer beliebigen Datei, zB Powerpoint Präsentation oder eine Excel Datei. Bin mir derzeit nicht sicher ob das Problem auf MySQL Ebene zu lösen ist, oder auf Batch Ebene.
Lieben Gruß,
Stephan
Please also mark the comments that contributed to the solution of the article
Content-Key: 20217
Url: https://administrator.de/contentid/20217
Printed on: April 26, 2024 at 19:04 o'clock
18 Comments
Latest comment
hallo Stephan,
'MySQL' ist nicht die DB, mit der ich mihc normalerweise beschäftige - aber Du wirst sicherlich nicht den Inhalt von Powerpoint- oder Excel-Dateien in einer Datenbank speichern wollen, sondern die Dateien selbst. Stichwort dazu: Datentyp BLOB (Binary Large OBject). In den BLOB-Datenfeldern kannst Du alles an binären Objekten ablegen, was Du greifen kannst.
Wenn Du die Tabelle entsprechend definiert hast, wirst Du sicherlich das ganze aus einer Batchdatei heraus abwickeln können.
Gruß
dba
'MySQL' ist nicht die DB, mit der ich mihc normalerweise beschäftige - aber Du wirst sicherlich nicht den Inhalt von Powerpoint- oder Excel-Dateien in einer Datenbank speichern wollen, sondern die Dateien selbst. Stichwort dazu: Datentyp BLOB (Binary Large OBject). In den BLOB-Datenfeldern kannst Du alles an binären Objekten ablegen, was Du greifen kannst.
Wenn Du die Tabelle entsprechend definiert hast, wirst Du sicherlich das ganze aus einer Batchdatei heraus abwickeln können.
Gruß
dba
@20535
Hi,
alles auf Kommandozeilenebene.
Wechsle in das Verz., in dem sich deine Dateien befinden.
Erstelle eine Datei, z.B. dateien.txt. Inhalt der Datei könnte sein:
Wichtig!: Letzte Zeile nicht mit Return abschließen, Cursor
hinter pps stehenlassen und abspeichern.
Erstelle eine weitere Datei, z.B. insert.sql. Inhalt der Datei:
Wenn deine Tabelle eh' nur 2 Felder hat, kannst du die Angabe der Spaltennamen
weglassen.
Starte nun den mysql-Monitor, event. mit vollem Pfadnamen, z.B. c:\mysql\mysql
oder wo immer du mysql installiert hast.
Wenn der Monitor gestartet ist, gibst du einen Backslash gefolgt von einem Punkt ein,
ein Leerzeichen, dann den Dateinamen des Scripts zum Einlesen:
mysql>\. insert.sql, dann Enter.
Hoppla, vorher natürlich zur Datenbank wechseln: mysql> \u Datenbankname, sorry.
Anschließend läßt du dir mit select * from tabellenname den Inhalt ausgeben, welcher
sein müßte(die zwei Datenfelder betreffend):
<table border="1">
<tr>
<td>feldname1</td><td>feldname2</td>
</tr>
<tr>
<td> Umsatz2005</td><td> mappe01.xls </td>
</tr>
<tr>
<td> PraesMeyer</td><td> praesmeyer.pps</td>
</tr>
</table>
Gruß
Günni
Hi,
alles auf Kommandozeilenebene.
Wechsle in das Verz., in dem sich deine Dateien befinden.
Erstelle eine Datei, z.B. dateien.txt. Inhalt der Datei könnte sein:
Umsatz2005,mappe01.xls
PraesMeyer,praesmeyer.pps
Wichtig!: Letzte Zeile nicht mit Return abschließen, Cursor
hinter pps stehenlassen und abspeichern.
Erstelle eine weitere Datei, z.B. insert.sql. Inhalt der Datei:
LOAD DATA
LOCAL INFILE 'dateien.txt'
INTO TABLE tabellenname(feldname1,feldname2)
FIELDS TERMINATED BY ",";
Wenn deine Tabelle eh' nur 2 Felder hat, kannst du die Angabe der Spaltennamen
weglassen.
Starte nun den mysql-Monitor, event. mit vollem Pfadnamen, z.B. c:\mysql\mysql
oder wo immer du mysql installiert hast.
Wenn der Monitor gestartet ist, gibst du einen Backslash gefolgt von einem Punkt ein,
ein Leerzeichen, dann den Dateinamen des Scripts zum Einlesen:
mysql>\. insert.sql, dann Enter.
Hoppla, vorher natürlich zur Datenbank wechseln: mysql> \u Datenbankname, sorry.
Anschließend läßt du dir mit select * from tabellenname den Inhalt ausgeben, welcher
sein müßte(die zwei Datenfelder betreffend):
<table border="1">
<tr>
<td>feldname1</td><td>feldname2</td>
</tr>
<tr>
<td> Umsatz2005</td><td> mappe01.xls </td>
</tr>
<tr>
<td> PraesMeyer</td><td> praesmeyer.pps</td>
</tr>
</table>
Gruß
Günni
Was passiert denn, wenn Du das manuell über das MySQL Control Center machst? Hast Du dann die Dateim im Feld?
Gruss Peter
zahlt es sich überhaupt noch aus?
Gruss Peter
zahlt es sich überhaupt noch aus?
EI dann gehe mal auf sysinternals.com und lade Dir den Filemonitor runter, starte diesen und schau mal im Protokoll, ob während der Verarbeitung der Batch das zu importierende File angezogen wird. Kannst mir auch das LOG mal senden.
Gruss Peter
mailto:troubleni@arcor.de
Gruss Peter
mailto:troubleni@arcor.de
... das dachte ich mir! Dann musst nur noch herausfinden warum. Ich denke einmal darüber nach, falls Du vorher die Lösung hast, lasse es mich wissen!
Genau, das habe ich beim Reproduzieren des Problems auch festgestellt. Ich suche nun nach einer anderen Lösung!
Gruss Mummenschanz
(dies ist auch meine skype-ID)
Gruss Mummenschanz
(dies ist auch meine skype-ID)
Hallo schau mal hierhin:
16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
http://www.php-faq.de/q/q-db-blob.html
16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
http://www.php-faq.de/q/q-db-blob.html
Moin Talyr,
wenn ich mich als alter Bätch-Anwender auch mal einmengen darf...
Wenn Daten oder in diesem Fall Dateien in ein BLOB-Feld gespeichert werden sollen, ist die Mimik -relativ unabhängig von der verwendeten Programmiersprache- IMHO gleich:
- der Dateiinhalt wird Zeichen für Zeichen und von Dateianfang bis Dateiende binär in eine Variable gelesen,
- diese Variable wird in das BLOB-Feld geschrieben.
Die merkwürdigen Wunschträume dort oben... *kopfschüttel*... da könntest Du mehr Erfolg mit einem "copy c:\*.* Mysql\Blobfeld" haben...
Worauf ich hinauswollte: unter purem Batch kann es nicht gehen, weil es gar nicht möglich ist, derart große Dateien in Umgebungsvariablen mit einer Maximallänge von 255 Zeichen zu speichern. Ende.
Somit bleiben zwei weitere Möglichkeiten:
a) Du treibst irgendwo ein Utililty auf, das "WriteFileIntoMySQLBlob.exe" heißt und sich von der Konsole aus starten lässt. Halte ich für ausgeschlossen, dass es so etwas gibt. Macht wenig Sinn.
b) Du befüllst die MYSQL-DB via PHP, VB, C oder meinetwegen BASIC .. halt irgendeine Sprache mit MySQL-API und der Möglichkeit, Dateien binär einzulesen.
In einer dieser Sprachen dann ein Funktionspärchen PutFileIntoBlob()/GetFileFromBlob() zusammenzubraten, das wiederum schaffen wir hier im Forum.
Mit was greifst Du denn normalerweise auf MySQL zu?
Grüße Biber
wenn ich mich als alter Bätch-Anwender auch mal einmengen darf...
Wenn Daten oder in diesem Fall Dateien in ein BLOB-Feld gespeichert werden sollen, ist die Mimik -relativ unabhängig von der verwendeten Programmiersprache- IMHO gleich:
- der Dateiinhalt wird Zeichen für Zeichen und von Dateianfang bis Dateiende binär in eine Variable gelesen,
- diese Variable wird in das BLOB-Feld geschrieben.
Die merkwürdigen Wunschträume dort oben... *kopfschüttel*... da könntest Du mehr Erfolg mit einem "copy c:\*.* Mysql\Blobfeld" haben...
Worauf ich hinauswollte: unter purem Batch kann es nicht gehen, weil es gar nicht möglich ist, derart große Dateien in Umgebungsvariablen mit einer Maximallänge von 255 Zeichen zu speichern. Ende.
Somit bleiben zwei weitere Möglichkeiten:
a) Du treibst irgendwo ein Utililty auf, das "WriteFileIntoMySQLBlob.exe" heißt und sich von der Konsole aus starten lässt. Halte ich für ausgeschlossen, dass es so etwas gibt. Macht wenig Sinn.
b) Du befüllst die MYSQL-DB via PHP, VB, C oder meinetwegen BASIC .. halt irgendeine Sprache mit MySQL-API und der Möglichkeit, Dateien binär einzulesen.
In einer dieser Sprachen dann ein Funktionspärchen PutFileIntoBlob()/GetFileFromBlob() zusammenzubraten, das wiederum schaffen wir hier im Forum.
Mit was greifst Du denn normalerweise auf MySQL zu?
Grüße Biber