Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bilder über client dataset in eine Db speichern (https://www.delphipraxis.net/174156-bilder-ueber-client-dataset-eine-db-speichern.html)

Natcree 7. Apr 2013 17:22

Bilder über client dataset in eine Db speichern
 
Habe ein Clientdataset und will Bilder in die xml ablegen.

vorher habe ich das mit einer ttable gemacht und es in eine DB Datei gespeichert.

Jetzt geht es mit dem clientdataset nicht mehr

Hier der code zum einfügen

Delphi-Quellcode:
if OpenpictureDialog1.Execute then
DBImage1.Picture.LoadFromFile(OpenpictureDialog1.FileName);
danach klicke ich auf speichern mittels Clientdataset1.post;

Woran kann es liegen

Uwe Raabe 7. Apr 2013 17:40

AW: Bilder über client dataset in eine Db speichern
 
Was geht denn nicht? Kommt eine Fehlermeldung?

Natcree 7. Apr 2013 17:43

AW: Bilder über client dataset in eine Db speichern
 
nee fehler kommt nicht ich setzte das dataset auf edit dann hole ich das bilde siehe code oben. das bild wird auch im Fenster angezeigt dann gehe ich auf speichern und setze das dataset auf post.
Beim aufrufen des datensatzes ist das bild aber nicht drinne.

Es kommt keine Fehlermeldung

Uwe Raabe 7. Apr 2013 18:01

AW: Bilder über client dataset in eine Db speichern
 
Zitat:

Zitat von Natcree (Beitrag 1210431)
nee fehler kommt nicht ich setzte das dataset auf edit dann hole ich das bilde siehe code oben. das bild wird auch im Fenster angezeigt dann gehe ich auf speichern und setze das dataset auf post.
Beim aufrufen des datensatzes ist das bild aber nicht drinne.

Es kommt keine Fehlermeldung

Bei mir kommt auch kein Fehler - dafür wird aber das Bild korrekt angezeigt. Auch bei mehrfachem Programmaufruf und Speichern in einer Datei.

Natcree 7. Apr 2013 18:14

AW: Bilder über client dataset in eine Db speichern
 
das ist die bild holen procedure vorher wird clientdataset1.edit gesetzt

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
begin
ShellExecute(handle,PChar('open'),PChar('mspaint.exe'),PChar(''),PChar(ExtractFilePath(Application.Exename)),SW_SHOW);
clientdataset1.Edit;
if OpenpictureDialog1.Execute then
DBImage1.Picture.LoadFromFile(OpenpictureDialog1.FileName);
end;
danach speichere ich hiermit

Delphi-Quellcode:
If Clientdataset1.State in [dsEdit,dsInsert] then
Clientdataset1.Post;
wo liegt denn der fehler

das clientdataset1 speichert alles in eine XML Datei habe nur das dataset und ne datasource kompo

habe für das bild ein dbimage gesetzt und die felder zugeordnet

Natcree 7. Apr 2013 18:19

AW: Bilder über client dataset in eine Db speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier noch die Einstellung fürs field im clientdataset

Uwe Raabe 7. Apr 2013 19:39

AW: Bilder über client dataset in eine Db speichern
 
Der einzige Unterschied, den ich sehe ist, daß bei mir Size = 0 und bei dir Size = 1 ist. Ansonsten macht mein Code erstmal dasselbe.

Natcree 7. Apr 2013 19:48

AW: Bilder über client dataset in eine Db speichern
 
ist bei dir auch nur ein cliendataset und ne datasource

hast du als field type blob oder grafic

ich verstehe es nicht.

Natcree 7. Apr 2013 20:11

AW: Bilder über client dataset in eine Db speichern
 
wie es aussieht haben die datasets Probleme mit jpeg Dateien denn mit bmp funktioniert es. gibt es da irgendwas um dieses Problem zu lösen. habe schon jpeg in die uses Klausel aufgenommen

Volker Z. 8. Apr 2013 01:37

AW: Bilder über client dataset in eine Db speichern
 
Hallo,

also, wenn Du nur die Bilddaten speichern möchstest (und Dir das ursprüngliche Format egal ist), dann kannst Du mal folgedes versuchen:

Delphi-Quellcode:
uses
  jpeg;

function LoadBitmap (const Filename : string) : TBitmap;
begin
  Result := TBitmap.Create;
  try
    Result.LoadFromFile (Filename)
  except
    FreeAndNil (Result)
    // raise an exception or whatever you wanna do
  end
end;

function LoadIcon (const Filename : string) : TBitmap;
var
  i : TIcon;
begin
  i := TIcon.Create;
  try
    Result := nil;
    try
      i.LoadFromFile (Filename);
      Result := TBitmap.Create;
      with Result do
        begin
          Height := i.Height;
          Width := i.Width;
          Canvas.Draw (0, 0, i)
        end
    except
      // raise an exception or whatever you wanna do
    end
  finally
    FreeAndNil (i)
  end
end;

function LoadJPEG (const Filename : string) : TBitmap;
var
  i : TJPEGImage;
begin
  i := TJPEGImage.Create;
  try
    Result := nil;
    try
      i.LoadFromFile (Filename);

      Result := TBitmap.Create;
      Result.Assign (i);
    except
      // raise an exception or whatever you wanna do
    end
  finally
    FreeAndNil (i)
  end
end;

function LoadGraphic (const Filename : string) : TBitmap;
var
  s : string;
begin
  s := LowerCase (ExtractFileExt (Filename));
  if Pos ('.', s) = 1 then
    Delete (s, 1, 1)
  else
    s := '';
 
  if s = '' then
    raise Exception.Create ('File extention of the given filename ought not to be empty');

  if s = 'bmp' then
    begin
      Result := LoadBitmap (Filename);
      Exit
    end;

  if (s = 'jpg') or (s = 'jpeg') then
    begin
      Result := LoadJPEG (Filename);
      Exit
    end;

  if s = 'ico' then
    begin
      Result := LoadIcon (Filename);
      Exit
    end;

  // weitere Grafikformate abklopfen und entsprechende Funktionen schreiben
  // falls es keine gültige Dateierweiterung gibt
  // raise an exception or whatever you wanna do
  // or
  Result := nil
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  b : TBitmap;
begin
  if OpenPictureDialog1.Execute then
    try
      b := LoadGraphic (OpenpictureDialog1.FileName);

      ClientDataSet1.Append;
      ClientDataSet1.FieldByName ('Passbild').Assign (b);
      ClientDataSet1.Post;
    finally
      FreeAndNil (b)
    end;
end;
Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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