Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Blobfeld in DB schreiben mit INSERT-Befehl (https://www.delphipraxis.net/65717-blobfeld-db-schreiben-mit-insert-befehl.html)

Moony 20. Mär 2006 14:58

Datenbank: MySQL • Zugriff über: ADO

Blobfeld in DB schreiben mit INSERT-Befehl
 
Hallo zusammen,

hab da ein kleines Problem mit dem Schreiben von Blobfelder in eine MySQL-DB. Habe vorher mit Append & Co gearbeitet, aber ich mußte aufgrund von Performance Treibereinstellungen ändern. Nun funktionieren die einfachen Dinge des Lebens nicht mehr. Also muß ich mich der weiteren Dinge behelfen und das ist die Speicherung von Sachen in der DB über einen direkten SQL-Befehl. Leider versuche ich vergeblich zu finden wie man Blobfelder über SQL-Befehle speichert.

Hoffe mir kann da jemand weiterhelfen.

Gruß, Moony

marabu 20. Mär 2006 15:32

Re: Blobfeld in DB schreiben mit INSERT-Befehl
 
Hallo Moony,

MySQL kennt folgende Syntax:

SQL-Code:
UPDATE myTable SET myBlob = LOAD_FILE("c:/tmp/picture-1") WHERE id = 1
Aber wer zwingt dich dazu auf einen BlobStream zu verzichten?

Grüße vom marabu

Moony 20. Mär 2006 15:51

Re: Blobfeld in DB schreiben mit INSERT-Befehl
 
Dafür brauch ich einen MySQL Client. Ich hole mir die Dateien aber irgendwo her und nicht vom Server direkt.
Wer sagt dass ich auf den Stream verzichten muß. Ich wüßte nur nicht wie genau das Ganze in die Datenbank gebracht werden soll.

Gruß, Moony

marabu 20. Mär 2006 16:16

Re: Blobfeld in DB schreiben mit INSERT-Befehl
 
Vielleicht so:

Delphi-Quellcode:
var
  s: TMemoryStream;
  fn: TFileName;
begin
  with ADOQuery do
  begin
    SQL.Text := 'SELECT myBlob FROM myTable WHERE id = 1';
    Open;
    Edit;
    TBlobField(Fields[0]).LoadFromStream(s); // Daten intern?
    TBlobField(Fields[0]).LoadFromFile(fn); // Daten extern?
    Post;
    Close;
  end;
end;
marabu

Moony 20. Mär 2006 16:30

Re: Blobfeld in DB schreiben mit INSERT-Befehl
 
@ marabu: Danke, aber das Problem besteht eben, dass ich keinen normalen Post-Befehl ausführen kann, weil über den MySQL-Treiber ein Fehler ausgespuckt wird(E_FAIL). Deshalb muß ich über einen ADOCommand einen direkten SQL-Befehl ausführen.

marabu 20. Mär 2006 17:53

Re: Blobfeld in DB schreiben mit INSERT-Befehl
 
Sorry - manchmal verstehe ich etwas langsamer. Du scheinst per OLEDB Provider für ODBC über den MySQL ODBC Treiber auf die Datenbank zuzugreifen. Ich kann das mit dem Fehler jetzt nicht untersuchen, aber mit ADOCommand sollte es auch gehen. Setze den CommandText auf 'UPDATE myTable SET myBlob = :blob WHERE id = 1' oder was immer dir vorschwebt und befülle den Parameter blob mit den notwendigen Daten - LoadFromStream() und LoadFromFile() stehen dir auch dort zur Verfügung.

marabu

joachimd 21. Mär 2006 08:17

Re: Blobfeld in DB schreiben mit INSERT-Befehl
 
Zitat:

Zitat von Moony
hab da ein kleines Problem mit dem Schreiben von Blobfelder in eine MySQL-DB. Habe vorher mit Append & Co gearbeitet, aber ich mußte aufgrund von Performance Treibereinstellungen ändern. Nun funktionieren die einfachen Dinge des Lebens nicht mehr. Also muß ich mich der weiteren Dinge behelfen und das ist die Speicherung von Sachen in der DB über einen direkten SQL-Befehl. Leider versuche ich vergeblich zu finden wie man Blobfelder über SQL-Befehle speichert.

Hoffe mir kann da jemand weiterhelfen.

Delphi-Quellcode:
ADOQuery1.SQL.Text:='Insert into mytable(myfield) values(:blob)';
ADOQuery1.Parameters.ParamByName('blob').LoadFromFile('c:\test.txt',ftBlob);
ADOQuery1.ExecSQL;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz