TDBImage mit MySQL/Zeos/WinXP

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
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

TDBImage mit MySQL/Zeos/WinXP

Beitrag von MmVisual »

Hallo,

Ich schreibe mir gerade ein kleines Lagerverwaltungsprogramm und möchte bei den Artikel auch Bildchen in der Datenbank abspeichern. Dazu sollte das Bild im Hintergrund in PNG Format in die Datenbank.

Anbei der Code für Einfügen aus Zwischenablage:

Code: Alles auswählen

procedure TfrmMain.mnEinfuegenClipbrdClick(Sender: TObject);
Var st: TMemoryStream;
    png: TPortableNetworkGraphic;
    bmp: TPicture;
begin
  If Not Clipboard.HasPictureFormat Then Exit; // Kein Bild
  If qBauteil.EOF And qBauteil.BOF Then Exit;
  If qFoto.EOF And qFoto.BOF Then // Neuer Datensatz in der Foto-Tabelle nötig
  Begin
    qFoto.Append;
    qFotoTabelle.AsString := 'bauteil';
    qFotoBildTyp.AsString := 'BMP';
    qFoto.Post;
    If Not(qBauteil.State In [dsEdit, dsInsert]) Then
      qBauteil.Edit;
    qBauteilFoto_ID.AsInteger := qFotoID.AsInteger;
    qBauteil.Post;
  end;
  st := TMemoryStream.Create;
  If Clipboard.GetFormat(Clipboard.FindPictureFormatID, st) Then
  Begin
    png := TPortableNetworkGraphic.Create;  // Wandeln Bitmap in PNG Format
    bmp := TPicture.Create;
    st.Position := 0;
    bmp.LoadFromStream(st);
    png.Assign(bmp.Bitmap);
    st.Clear;
    png.SaveToStream(st);
    st.Position := 0;
    qFoto.Edit;
    stBar.SimpleText := 'Bildgroese: ' + IntToStr(st.Size) + ' Byte';
    DBImgBauteil.Picture.LoadFromStream(st);
    qFotoBildTyp.AsString := 'PNG';
    qFotoBezeichnung.AsString := qBauteilBezeichnung.AsString;
    qFoto.Post;
    bmp.Free;
    png.Free;
  end;
  st.Free;
end;
Warscheinlich ist das Wandeln in PNG etwas umständlich, so den TStream zu belästigen. Mir ist aber nichts besseres eingefallen.

Aber zu meinem Problem:
- Ich betätige das Einfügen (in der Zwischenablage ist das Bild)
- Bild ist im TDBImage korrekt sichtbar
- Datensatz neu öffnen
- Bild wird im TDBImage nur Teilweise angezeigt. (Siehe Bild)

Meine Vermutung: Die Datenbankverbindung empfängt das Bild, aber nicht alle Daten.

Wie kann ich das beheben? Ich suche jetzt schon seit einigen Stunden, auch habe ich ohne die Wandlung PNG das gleiche Problem. Mir scheint so, als wenn das Bild mehr als 32KB (oder 64KB) hat, dass es dann zu diesem Problem kommt.
Wenn ich das Bild als PNG mit einem Zeichenprogramm ablege, dann hat es 12KB auf der Festplatte, aber in der Datenbank steht (phpMyAdmin) 64KB. Also irgendwie klappt meine PNG-Wandlung auch nicht.

Danke im Voraus für eure Hilfe.
Grüße Markus
Dateianhänge
AD628_Fehler.png
AD628_Fehler.png (12.15 KiB) 683 mal betrachtet
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten