AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bild in MySQL (Blob) mit mysql.pas speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Bild in MySQL (Blob) mit mysql.pas speichern

Ein Thema von Morfio · begonnen am 9. Apr 2004 · letzter Beitrag vom 27. Feb 2020
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.313 Beiträge
 
Delphi 12 Athens
 
#1

AW: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 22. Feb 2020, 07:11
Moin...
Zitat:
die Fichtner-Version ist älter
Aus welchem Grund kommt ein Umstieg auf was Aktuelles nicht in Frage?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 22. Feb 2020, 07:40
Hallo,
Zitat:
Aus welchem Grund kommt ein Umstieg auf was Aktuelles nicht in Frage?
Das war nur der erste Eintrag im Changelog.
Ich wollte damit zeigen, dass bereits so früh begonnen hatte.
Heiko
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 27. Feb 2020, 00:32
Ich habe es nun mit einem Prepared Statement gelöst. Für den Fall, dass jemand auch das mal braucht, das folgende Beispiel basiert auf das Prepared Statement Demo "StmtDemo", das im aktuellen mysql.pas ZIP dabei ist.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  stmt: PMYSQL_STMT;
  bind: PMYSQL_BIND;
  affected_rows: my_ulonglong;
  param_count: Integer;
  InsertQuery: String;
  fs: TFileStream;
  data: array of byte;
  filesize: Int64;
begin
  Memo.Lines.Add('mysql_stmt_init()');
  stmt := mysql_stmt_init(LibHandle);
  if (stmt=nil)
  then begin
    Memo.Lines.Add('mysql_stmt_init(), out of memory');
    exit;
  end;
  Memo.Lines.Add('mysql_stmt_init() done');

  InsertQuery := 'INSERT INTO testblob(filedata) VALUES(?)';

  Memo.Lines.Add('mysql_stmt_prepare()');
  if (mysql_stmt_prepare(stmt, PAnsiChar(InsertQuery), Length(InsertQuery))<>0)
  then begin
    Memo.Lines.Add('mysql_stmt_prepare(), INSERT failed');
    Memo.Lines.Add(mysql_stmt_error(stmt));
  end;
  Memo.Lines.Add('mysql_stmt_prepare() done');

  Memo.Lines.Add('mysql_stmt_param_count()');
  param_count := mysql_stmt_param_count(stmt);
  Memo.Lines.Add(Format('total parameters in INSERT: %d', [param_count]));
  if (param_count <> 1)
  then begin
    Memo.Lines.Add('invalid parameter count returned by MySQL');
    exit;
  end;

  bind := mysql_bind_init(1); //** Different to org. Demo: Alloc 3 MYSQL_BIND **
  try
    fs := TFileStream.Create('TestDatei1.txt',fmOpenRead);
    try
      SetLength(data,fs.Size);
      fs.ReadBuffer(data[0],fs.Size);
      filesize := fs.Size;
    finally
      fs.Free;
    end;

    mysql_bind_set_param(bind, 0, MYSQL_TYPE_BLOB, @data[0], filesize, @filesize, nil);
    Memo.Lines.Add('mysql_stmt_bind_param()');
    if mysql_stmt_bind_param(stmt, bind)
    then begin
      Memo.Lines.Add('mysql_stmt_bind_param() failed');
      Memo.Lines.Add(mysql_stmt_error(stmt));
      exit;
    end;
    Memo.Lines.Add('mysql_stmt_bind_param() done');

    Memo.Lines.Add('mysql_stmt_execute()');
    if (mysql_stmt_execute(stmt)<>0)
    then begin
      Memo.Lines.Add('mysql_stmt_execute() failed');
      Memo.Lines.Add(mysql_stmt_error(stmt));
      exit;
    end;
    Memo.Lines.Add('mysql_stmt_execute() done');
    affected_rows := mysql_stmt_affected_rows(stmt);
    Memo.Lines.Add(Format('total affected rows(insert 2): %u', [affected_rows]));
    if (affected_rows <> 1)
    then begin
      Memo.Lines.Add('invalid affected rows by MySQL');
      exit;
    end;

  finally
    FreeMem(bind);
  end;
  if mysql_stmt_close(stmt)
  then begin
    Memo.Lines.Add('failed while closing the statement');
    Memo.Lines.Add(mysql_stmt_error(stmt));
    exit;
  end;
end;
Wobei die testblob Tabelle wie folgt ausschaut:
Code:
CREATE TABLE `testblob` (
  `id` int(11) NOT NULL auto_increment,
  `filename` varchar(200) default NULL,
  `filesize` int(11) default NULL,
  `filedata` longblob,
  PRIMARY KEY (`id`));
Benutzt Du noch eine ältere Delphi-Version(<=Delphi 2007)?
ja, bei diesem Projekt immer noch Delphi 2007.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 10. Apr 2004, 12:55
Tut mir leid, da muss ich passen. Vergleich doch mal die Dateigröße oder ein MD5- oder CRC-Hash.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Morfio

Registriert seit: 15. Dez 2003
53 Beiträge
 
#5

Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 10. Apr 2004, 13:13
Hmm, der liest den Stream per Read gar nicht ein. Was er in die Datenbank schreibt ist einfach nur ein leerer String. Die Funktion Read muss an der Stelle irgendwie falsch sein.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 10. Apr 2004, 13:32
Was ist die Rückgabe von Read (=die Anzahl der gelesenen Bytes)?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Morfio

Registriert seit: 15. Dez 2003
53 Beiträge
 
#7

Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 10. Apr 2004, 13:43
Die entspricht der genauen Größe der Datei.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 10. Apr 2004, 13:53
Dann hat er die richtige Anzahl Zeichen gelesen.

Warum das Schreiben in die DB aber nicht funktioniert, weiß ich auch nicht
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
mfichtner

Registriert seit: 10. Feb 2003
1 Beiträge
 
#9

Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 24. Apr 2004, 01:27
Zitat von Morfio:
Nun möchte ich in einer MySQL-Datenbank innerhalb eines Blob-Feldes ein Bild speichern und das auch anzeigen und ändern.
Für Delphi hab' ich zwar gerade keinen Beispiel-Code parat, aber ich hab' was vergleichbares mal für TMT Pascal geschrieben:

http://www.fichtner.net/tmt/mysql/

Die Beispiele in mysql-blobs-1.0-tmt.zip müßten im Prinzip ohne allzu große Änderungen auch in Delphi compilierbar sein. Aber selbst wenn das nicht auf Anhieb klappt: Der Code zeigt auf jeden Fall, wie man ein JPG-Bild in einem Blob-Feld speichert und es wieder ausliest.

Hope this help.
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Re: Bild in MySQL (Blob) mit mysql.pas speichern

  Alt 16. Dez 2019, 23:30
Zitat von Morfio:
Nun möchte ich in einer MySQL-Datenbank innerhalb eines Blob-Feldes ein Bild speichern und das auch anzeigen und ändern.
Für Delphi hab' ich zwar gerade keinen Beispiel-Code parat, aber ich hab' was vergleichbares mal für TMT Pascal geschrieben:

http://www.fichtner.net/tmt/mysql/

Die Beispiele in mysql-blobs-1.0-tmt.zip müßten im Prinzip ohne allzu große Änderungen auch in Delphi compilierbar sein. Aber selbst wenn das nicht auf Anhieb klappt: Der Code zeigt auf jeden Fall, wie man ein JPG-Bild in einem Blob-Feld speichert und es wieder ausliest.

Hope this help.
sorry dass ich den alten Beitrag ausgrabe, aber hat jemand die obige mysql-blobs-1.0-tmt.zip irgendwo rumliegen? Ich habe die Fichtner mysql.pas im Einsatz und hätte gerne gewußt wie Fichtner Blob über mysql.pas blob Dateien zur DB schickt.

lg,
jus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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