AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bild in Datenbank speichern - Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Bild in Datenbank speichern - Problem

Ein Thema von Root2k · begonnen am 17. Apr 2012 · letzter Beitrag vom 17. Apr 2012
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#1

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 07:55
Ehrlich gesagt verstehe ich den Code auch nicht: von welchem Typ ist SQLQuery und wo kommt das überhaupt her? Wozu 3 Parameter, wenn davon nur einer genutzt wird? Wieso eine Funktion, die immer false zurückgibt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#2

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 08:12
- SQLQuery ist vom Typ TSQLQuery (Unit SqlExpr).
- Von den 3 Parametern werden eigentlich schon alle verwendet. Beim Speichern hab ich nachträglich noch ein rausgenommen.
- Der Rückgabewert ist zu vernachlässigen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 08:23
DBExpress ist nicht mein Gebiet, aber vielleicht geht Folgendes:
- Tabellen- und Feldname als Parameter entgegennehmen, die Grafik natürlich auch
- TSQLDataset/TSQLQuery innerhalb der Funktion anlegen und verbinden
- als SQL "SELECT * FROM Tabellenname WHERE 0" ausführen
- Append
- das BLOB-Feld (Parameter Feldname) befüllen
- Post
- TSQLDataset/TSQLQuery schließen und freigeben
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 08:39
Also ich sehe in diesem Abschnitt ein Problem:
Delphi-Quellcode:
SQLQuery.Append;
// Auch mit SQLQuery.Edit noch getestet
TBlobField(SQLQuery.FieldByName(AField)).LoadFromStream(s);
SQLQuery.Post;
Man kann nicht einfach einen Datensatz mit einem Blobfeld in eine Tabelle speichern ohne zumindest das Primärschlüsselfeld befüllt zu haben.

Ausserdem würde ich der Funktion nicht eine SQL-Query + Feldname als String übergeben, sondern gleich ein TField-Objekt.
Also z.B. so:
(das .Append und das .Post habe ich entfernt
auch der harte Cast auf TBlobfield war gefährlich
ausserdem wird jetzt auch der Result-Wert befüllt
und das schlechte Exception-Handling was auch unnötig)

Delphi-Quellcode:
function TDatabaseConnection.SetImage(field:TField): boolean;
var
  s: TMemoryStream;
begin;
  s := TMemoryStream.Create;
  try
    s.LoadFromFile('*BILDPFAD*\*BILDNAME*.jpg');
    s.Position := 0;
    result := s.Size > 0;
    if result then
      (field as TBlobField).LoadFromStream(s);
  finally
    s.Free;
  end;
end;
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#5

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 09:15
Danke erstmal für die Beiträge!

- TSQLDataset/TSQLQuery schließen und freigeben
Wenn ich das mache bekomme ich die Meldung "Eine Datenmenge, die nur zum Lesen ist, kann nicht geändert werden". Also hab ich da ein bisschen gesucht. Da liest man oft "RequestLive auf true setzen". Das TSQLQuery-Objekt besitzt allerdings keine solche Eigenschaft. Auch mit SQLQuery.Edit bin ich nicht weiter gekommen.

Also ich sehe in diesem Abschnitt ein Problem:

Man kann nicht einfach einen Datensatz mit einem Blobfeld in eine Tabelle speichern ohne zumindest das Primärschlüsselfeld befüllt zu haben.
Das Primärschlüsselfeld ist bereits gesetzt. Nur das BLOB-Feld ist noch zu befüllen.
Den Rest von deinem Beitrag nehm ich gerne zu Kenntnis, aber das hilft mir leider nicht bei dem Problem weiter. Bitte den Code auch nicht als endgültig oder super durchdacht ansehen. Mir geht es nur um die reine Funktionalität!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 10:12
Ginge das mit einer parametrisierten Query nicht einfacher? Wobei ich wie gesagt mit DBExpress nicht vertraut bin.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#7

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 11:57
Ehrlich gesagt versteh ich da jetzt nicht so richtig wie du das meinst.
kannst du mir vielelicht ein simples Code-Beispiel geben?

Ich probier es jetzt auch mal mit anderen Komponenten... z.B. TSimpleDataSet. Vielleicht komme ich da weiter. Allerdings hab ich mit den ganzen Datenbank-Komponenten keine Erfahrung.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 12:12
Ich dachte in etwa so:
Delphi-Quellcode:
procedure SavePictureToDB(ID: integer; const Filename: string);
begin
  SQLQuery.SQL.Text := 'UPDATE Tabelle SET Feld = :wert WHERE ID = :id';
  SQLQuery.ParamByName('id').Value := ID;
  SQLQuery.ParamByName('wert').LoadFromFile(Filename);
  SQLQuery.ExecSQL;
end;
Ungetestet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 18: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