Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bilder in die Paradoxtabelle speichern ? (https://www.delphipraxis.net/66671-bilder-die-paradoxtabelle-speichern.html)

Vader 2. Apr 2006 13:57

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery

Bilder in die Paradoxtabelle speichern ?
 
hallo,

möchte bilder in die paradoxtabelle speichern, hab in der suche nicht sehr viel gefunden, mit ttable
gehts ja so

Delphi-Quellcode:
try
  MyTable.Append;
  ...
  MyTableDasBild.LoadFromFile(opendialog1.filename);
  MyTable.Post;
except
  on E:exception do
  begin
    ShowMessage('Fehler beim Einfügen: '+E.Message);
    MyTable.Cancel;
  end
end;
aber wie geht das mit TQuery ?
mfg vader

mkinzler 2. Apr 2006 14:02

Re: Bilder in die Paradoxtabelle speichern ?
 
Da es eine Beschränkung für die Größe einer paradoxtabelle gibt, ist es imho nicht empfehlenswert Bilder in eine Paradox-DB zu speichern. Besser wäre es eine andere DB zu verwenden oder nur die Bilder extern zu speicher nund nur die Datenpfade in der Tabelle abzulegen. Willst du das aber trotzdem in Paradox machen, verwende UpdateSQL, dann gehts wie bei einer TTable.

Vader 2. Apr 2006 14:56

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo,

ich möchte nur zum lernen einmal die bilder in die paradoxtabelle speichern mit tquery

Zitat:

Willst du das aber trotzdem in Paradox machen, verwende UpdateSQL, dann gehts wie bei einer TTable.
ich komme aber mit

Delphi-Quellcode:
MyTableDasBild.LoadFromFile(opendialog1.filename);
zu Tqueryaufruf
Delphi-Quellcode:
Query1.SQL.Text := 'SELECT * FROM bilder

nicht klar ?
mfg vader

mkinzler 2. Apr 2006 15:02

Re: Bilder in die Paradoxtabelle speichern ?
 
Den Einsatz eine UpdateObjekts haben wir dir schon hier erklärt. Schau mal bei Beitrag #13.

Vader 2. Apr 2006 15:21

Re: Bilder in die Paradoxtabelle speichern ?
 
das mit den UpdateObjekts ist ja klar aber da habe ich mit dbedits gearbeitet und konnte
schreiben

Delphi-Quellcode:
query.append od query.post
aber ich muß ja den code:
Delphi-Quellcode:
LoadFromFile(opendialog1.filename);
irgenwie unterkriegen ?
mfg vader

mkinzler 2. Apr 2006 16:07

Re: Bilder in die Paradoxtabelle speichern ?
 
LoadFromFile ist eine Methode von TBlobField. Oder auch von TParameter. Du kannst also mal dies versuchen:

Delphi-Quellcode:
Query.Sql:text := 'insert into tabelle (dasBild) values (:bild);';
...
Query.ParamByName('bild').LoafFromFile (opendialog1.filename; ftBlobField);

Vader 2. Apr 2006 17:19

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo

fogende info: meine datenbankdatei heißt bilder.db, mein feld wo die bilder rein sollen heißt Bilder !

ich hab es so versucht aber ohne erfolg :

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text := 'insert into bilder (Bilder) values (:bild);';
  Query1.ParamByName('bild').LoadFromFile (opendialog1.filename, ftBlobField);
  Query1.Open
end;

fehlermeldung :

Delphi-Quellcode:
[Fehler] Unit1.pas(46): Undefinierter Bezeichner: 'ftBlobField'

was ist da falsch ?
mfg vader

mkinzler 2. Apr 2006 17:38

Re: Bilder in die Paradoxtabelle speichern ?
 
Sorry der FieldType muß ftBlob heißen nicht ftBlobField.

Vader 2. Apr 2006 18:07

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo,

wenn ich den code zur laufzeit ausführe

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text := 'insert into bilder (Bilder) values (:bild);';
  Query1.ParamByName('bild').LoadFromFile (opendialog1.filename, ftBlob);
  Query1.Open
end;

kommt die fehlermeldung :
Delphi-Quellcode:
Datei kann nicht geöffnet werden
mfg vader

mkinzler 2. Apr 2006 18:11

Re: Bilder in die Paradoxtabelle speichern ?
 
DML-Abfargen kann man nicht öffnen, da sie keine Ergebnis liefren. Statt .Open .ExecSQL verwenden.

marabu 2. Apr 2006 18:46

Re: Bilder in die Paradoxtabelle speichern ?
 
Hallo ihr beiden.

Wäre nicht ftGraphic der geeignetere TBlobType? Und die Fehlermeldung bezieht sich wohl auf LoadFromFile() - vermutlich ist im Opendialog noch gar keine Datei ausgewählt worden.

Grüße vom marabu

mkinzler 2. Apr 2006 19:26

Re: Bilder in die Paradoxtabelle speichern ?
 
Zitat:

Zitat von marabu
Hallo ihr beiden.

Wäre nicht ftGraphic der geeignetere TBlobType?

Ist wohl besser.Müßte aber auch so gehen, oder? Bin kien so Kenner de BDE (mehr).
Zitat:

Und die Fehlermeldung bezieht sich wohl auf LoadFromFile() - vermutlich ist im Opendialog noch gar keine Datei ausgewählt worden.

Grüße vom marabu
Ich sollte die Beiträge genauer durchlesen ;-) hab nur ..kann nicht öffnen und .Open gesehen und auch schon meine Antwort getippt. .Open ist aber definitiv bei DML falsch.
[Edit: tags korrigiert]

Vader 2. Apr 2006 19:52

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo,

hab viele beiträge in der suche durchgelesen, aber ich finde keinen beitrag wo man mit paradox und tquery bilder in die tabelle
gespeichert hat, wisst ihr ein beispiel oder einen link ?
mfg vader

mkinzler 2. Apr 2006 19:54

Re: Bilder in die Paradoxtabelle speichern ?
 
Nimm doch den Code von oben mit Achims Ergänzugnen und stelle sicher das eine Datei im Dateidialog ausgewählt wurde (opendialog1.Execute).

[Edit: Tippfehler entfernt]

marabu 2. Apr 2006 21:05

Re: Bilder in die Paradoxtabelle speichern ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein wenig Code:

Delphi-Quellcode:
procedure TDemoForm.SaveButtonClick(Sender: TObject);
var
  s: TStream;
begin
  s := TMemoryStream.Create;
  Image.Picture.Bitmap.SaveToStream(s);
  with Query do
  begin
    SQL.Text := 'update biotest set graphic = :graphic where speciesno = :speciesno';
    ParamByName('speciesno').Value := Table.FieldByName('SpeciesNo').Value;
    ParamByName('graphic').LoadFromStream(s, ftGraphic);
    ExecSQL;
    Table.Refresh;
  end;
  s.Free;
end;
marabu

Vader 3. Apr 2006 18:15

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo marabu,

dein code:
Delphi-Quellcode:
procedure TDemoForm.SaveButtonClick(Sender: TObject);
var
  s: TStream;
begin
  s := TMemoryStream.Create;
  Image.Picture.Bitmap.SaveToStream(s);
  with Query do
  begin
    SQL.Text := 'update biotest set graphic = :graphic where speciesno = :speciesno';
    ParamByName('speciesno').Value := Table.FieldByName('SpeciesNo').Value;
    ParamByName('graphic').LoadFromStream(s, ftGraphic);
    ExecSQL;
    Table.Refresh;
  end;
  s.Free;
end;
ich versteh die welt nicht mehr ??

1.was bedeutet "speciesno" ist das der feldname wo die fotos rein müssen ?
2.biotest ist das der name der datenbankdatei ?
3.warum brauche ich die tablekomponente wenn ich query und updatequery habe ?

mfg vader

Vader 3. Apr 2006 18:59

Re: Bilder in die Paradoxtabelle speichern ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab da einen code aufgeschnappt, und wollte das auf mein projekt umstricken

meine datenbankdatei heißt bilder.db und der feldname wo die fotos rein sollen heißt Foto !

habe mein projekt drangehängt, ich check das alles nicht, das kann doch nicht so schwer sein
ein bild in die tabelle speichern ?
könnte wer einmal über meine datei drüberschauen ?
mfg vader

mkinzler 3. Apr 2006 19:15

Re: Bilder in die Paradoxtabelle speichern ?
 
In deiner Projekt wird Bezug auf einige nicht vorhanden Kompoenenten genomme. Es fehlt die TQuery-Komponente welche im Code SQLTable heißt. Die Tabelle im Query muß bilder heißen. Die Tabelle besteht ja nur aus einem Feld und ist leer deshalb:

SQL-Code:
Insert into Bilder( foto) values( :Bild);
Es wird auch Bezug auf eine nichvorhandenes Datenmodul genommen.

Vader: Auch wenn du stolz bist, ohne ein Buch nun mit ein "klein wenig Hilfe" einige Testprogramme erstellt zu haben, solltest du doch langsam gemerkt haben, das dir gewisse Grundlagen über Datenbanken fehlen.
Das ist nicht böse gemeint ;-) aber du solltest den Code den dir wir hier zeigen, oder den du von woanderst her hast, nicht nur eintippen/kopieren, sondern versuchen zu verstehen. dann hättest du gesehen das wenn deine Tabelle Bilder heißt und in der Abfrage Tabelle steht nicht funktionieren kann.

Vader 3. Apr 2006 19:58

Re: Bilder in die Paradoxtabelle speichern ?
 
Liste der Anhänge anzeigen (Anzahl: 2)
hallo,

hab den code jetzt auf mein projekt abgeändert

mußte aber eine neue tabelle anlegen !

meine datenbankdatei heißt losch.db und der feldname wo die Fotos rein sollen heißt jetzt Tennis!

die jpeg habe ich auskommentiert da schreit er gleich fehler
Delphi-Quellcode:
[Fehler] Unit1.pas(44): Undefinierter Bezeichner: 'TJPEGImage'
bitte schau noch mal drüber , habe mir mühe gegeben !

wenn ich jetzt auf speichern gehe in der laufzeit kommt der fehler: siehe anhang

Vader 3. Apr 2006 20:04

Re: Bilder in die Paradoxtabelle speichern ?
 
hab in der eile was vergessen zum ausbessern

die datenbankdatei heißt jetzt losch statt bilder !!!

Delphi-Quellcode:
query1.SQL.Text := 'Insert into losch Set Tennis= :Bild ';
mfg vader

mkinzler 3. Apr 2006 20:12

Re: Bilder in die Paradoxtabelle speichern ?
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DBCtrls, DBTables, DB, ExtDlgs;

type
  TForm1 = class(TForm)
    Query1: TQuery;
    DataSource1: TDataSource;
    UpdateSQL1: TUpdateSQL;
    DBImage1: TDBImage;
    DBGrid1: TDBGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    SavePictureDialog1: TSavePictureDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
query1.append;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
   blob : TMemoryStream;
  // jpeg : TJPEGImage;
   bmp : TBitmap;
   s: String;
begin
    blob := TMemoryStream.Create();
  //  jpeg := TJPEGImage.Create;
    bmp := TBitmap.Create;
   TRY
     if OpenpictureDialog1.Execute then
     begin
          s :=ExtractFileExt(OpenPictureDialog1.FileName);
          if uppercase(s) = '.BMP' then
          begin
             bmp.loadfromfile(OpenPictureDialog1.FileName);
             blob.Clear;
             bmp.saveToStream(blob);
          end else
          begin
         //    jpeg.LoadFromFile(OpenPictureDialog1.FileName);
             blob.Clear;
         //    jpeg.SaveToStream(blob);
          end;
        //  query1.SQL.Text := 'Update Tabelle Set Foto = :Bild where ID = :id';
          query1.SQL.Text := 'Insert into losch( Tennis) values( :Bild);';

          query1.ParamByName('bild').LoadFromStream(blob,ftGraphic);
        //  query1.ParamByName('id').AsInteger := DM.FahrerID.AsInteger;
          query1.ExecSQL;
     end;
   Finally
      freeandnil(blob);
    //  freeandnil(jpeg);
      freeandnil(bmp);
      DBImage1.LoadPicture;
   END
end;



end.

Vader 3. Apr 2006 20:36

Re: Bilder in die Paradoxtabelle speichern ?
 
super danke,

das funktoniert, aber es wäre nicht schlecht auch mit den jpeg's

die fehlermeldung :
Delphi-Quellcode:
[Fehler] Unit1.pas(44): Undefinierter Bezeichner: 'TJPEGImage'
warum erkennt er 'TJPEGImage' nicht ?
mfg vader

mkinzler 3. Apr 2006 20:55

Re: Bilder in die Paradoxtabelle speichern ?
 
Dazu mußt du die Unit jpegimage von der Delphi-CD nachinstallieren.

Vader 4. Apr 2006 17:39

Re: Bilder in die Paradoxtabelle speichern ?
 
du schreibst:
Zitat:

Dazu mußt du die Unit jpegimage von der Delphi-CD nachinstallieren.
wie nachinstallieren,mit benutzerdefinerter installation oder wie ?
mfg vader

mkinzler 4. Apr 2006 17:54

Re: Bilder in die Paradoxtabelle speichern ?
 
Nein, das Package befindet sich auf der CD. Suche mal auf der Inst-Cd nach jpg oder jpeg

Vader 4. Apr 2006 18:33

Re: Bilder in die Paradoxtabelle speichern ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
das habe ich gefunden,siehe anhang !
wie muß ich das installieren ?
mfg vader

mkinzler 4. Apr 2006 18:39

Re: Bilder in die Paradoxtabelle speichern ?
 
Am besten kopierst du die .bpl .dcp und .map-datei in dein bpl-Verzeichnis und fügst die bpl deinen Packages hinzu.

Vader 4. Apr 2006 19:11

Re: Bilder in die Paradoxtabelle speichern ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
es kommt der fehler, siehe anhang !

ich glaub ich habe das schon drauf auf der platte, aber ich muß es richtig aufrufen in meinen programm ?
mfg vader

mkinzler 4. Apr 2006 19:17

Re: Bilder in die Paradoxtabelle speichern ?
 
Ja,, das package war wohl schon installiert! Zum testen kannst du ja mal versuchen ein Jpeg-Bild in eine TImage-Komponente zu Laden. Sollte dann gehen.

Vader 4. Apr 2006 19:33

Re: Bilder in die Paradoxtabelle speichern ?
 
ja,ich kann ein jpg in ein Timage laden , aber wieso kommt dann der fehler, wie ich im beitrag #22 geschrieben
habe ?

Delphi-Quellcode:
[Fehler] Unit1.pas(44): Undefinierter Bezeichner: 'TJPEGImage'
mfg vader

mirage228 4. Apr 2006 19:43

Re: Bilder in die Paradoxtabelle speichern ?
 
Hi,

hast Du die Unit JPEG in Deiner Uses-Liste?

mfG
mirage228

Vader 4. Apr 2006 20:08

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo,

JPEG habe ich in uses aufgenommen,dann hat er auch den code kompiliert
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
   blob : TMemoryStream;
  jpeg : TJPEGImage;
   bmp : TBitmap;
   s: String;
begin
    blob := TMemoryStream.Create();
    jpeg := TJPEGImage.Create;
    bmp := TBitmap.Create;
   TRY
     if OpenpictureDialog1.Execute then
     begin
          s :=ExtractFileExt(OpenPictureDialog1.FileName);
          if uppercase(s) = '.BMP' then
          begin
             bmp.loadfromfile(OpenPictureDialog1.FileName);
             blob.Clear;
             bmp.saveToStream(blob);
          end else
          begin
            jpeg.LoadFromFile(OpenPictureDialog1.FileName);
             blob.Clear;
            jpeg.SaveToStream(blob);
          end;
        //  query1.SQL.Text := 'Update Tabelle Set Foto = :Bild where ID = :id';
          query1.SQL.Text := 'Insert into losch( Tennis) values( :Bild);';

          query1.ParamByName('bild').LoadFromStream(blob,ftGraphic);
       //   query1.ParamByName('id').AsInteger := DM.FahrerID.AsInteger;
          query1.ExecSQL;
     end;
   Finally
      freeandnil(blob);
      freeandnil(jpeg);
      freeandnil(bmp);
      DBImage1.LoadPicture;
   END
end;
er läßt mich auch posten, aber wenn ich das jpeg dann in der dbimage anschauen will kommt der fehler


Delphi-Quellcode:
bitmap ist ungültig
mfg vader

hanspeter 5. Apr 2006 06:46

Re: Bilder in die Paradoxtabelle speichern ?
 
Mit Paradox und Blob sollte man sehr vorsichtig sein.
Damit bin ich schon vor 8 Jahren in der Hochzeit der BDE auf die Nase gefallen.
Paradox hat einen nie beseitigten Handlingfehler bei Blobs. Irgendwann kommt dann die Meldung
Blob kann nicht gelesen werden und ist dann irreversibel zerschossen.
Wenn die Blob unbedingt in der Datenbank gespeichert werden soll, dann sollte man auf eine andere
Datenbank ausweichen. Firebird hat z.B. keinerlei Probleme mit Blob.

Gruß Peter

mikhal 5. Apr 2006 07:01

Re: Bilder in die Paradoxtabelle speichern ?
 
Trotz Einbinden der Unit Jpeg ist es mir noch nie gelunden, Jpegs direkt aus einem BLOB-Feld in TDBImage anzuzeigen. Ich erhielt immer eine Fehlermeldung (keine gültige Bitmap oder ähnlich). Deshalb verwende ich immer TImage und weise TImage im Ereignis AfterScroll des Datasets das Jpeg-File aus dem Blob-Feld zu.

Ansonsten kann auch ich nur anraten, bei Paradox keine Blob-Felder zu verwenden, weil auch ich nur schlechte Erfahrungen damit gemacht habe.

Grüße
Mikhal

Vader 5. Apr 2006 11:46

Re: Bilder in die Paradoxtabelle speichern ?
 
ok,überredet
ich lasse die finger mit dem abspeichern in die paradox !!!
aber wie geht das, das ich nur den pfad in der datenbank habe zu dem foto ??
MFG VADER

mikhal 5. Apr 2006 11:58

Re: Bilder in die Paradoxtabelle speichern ?
 
Delphi-Quellcode:
function ExtractFilePath(const FileName: string): string;
In der Unit SysUtils findest du diese Funktion, sie extrahiert den Pfad aus dem Dateinamen.

Grüße
Mikhal

marabu 5. Apr 2006 12:14

Re: Bilder in die Paradoxtabelle speichern ?
 
Da liegt wohl ein Missverständnis vor - nicht der absolute Pfadanteil einer Photodatei wird in der Datenbank gespeichert, sondern der Dateiname, allenfalls mit einem relativen Pfadanteil, sollte gespeichert werden. Der absolute Bezugspunkt im Dateisystem sollte als Konfigurationsparameter zugänglich sein, so dass man die Bilddateien nach Bedarf im Dateisystem verschieben kann, ohne dass die Referenzen in der Datenbank ungültig werden.

Grüße vom marabu

Vader 5. Apr 2006 16:50

Re: Bilder in die Paradoxtabelle speichern ?
 
hallo marabu,
hast du ein beispiel wie das ausschaut ?

Zitat:

sondern der Dateiname, allenfalls mit einem relativen Pfadanteil, sollte gespeichert werden. Der absolute Bezugspunkt im Dateisystem sollte als Konfigurationsparameter zugänglich sein, so dass man die Bilddateien nach Bedarf im Dateisystem verschieben kann, ohne dass die Referenzen in der Datenbank ungültig werden.

mfg vader

mkinzler 5. Apr 2006 18:02

Re: Bilder in die Paradoxtabelle speichern ?
 
Du entscheidest dich für ein Verzeichnis, in das du die Bilder ablegen willst, in die datenbank speicherst du dann nicht den absoluten Dtanpfad sondern nur relativ zu diesem Verzeichnis. Z.B. du hast dich entschieden, das die Bilder relativ zu 'c:\tennis' abzulegen. Ein Bild liegt nun auf c:\tennis\maenner\boris.jpg'. dann schreibst du in die Datenbank 'maenner\boris.jpg'. Den Pfad c:\tennis schreibst du zusammen mit den Datenbankparametern z.B. in eine Ini oder XML-Datei.

Vader 5. Apr 2006 18:21

Re: Bilder in die Paradoxtabelle speichern ?
 
das ist alles so kompliziert diese datenbankprogrammierung, jetzt brauche ich eine xml datei oder ini mit den
datenbankparameter,

eddy schreibt:
Zitat:

Da es immer wieder aus verschiedensten Gründen mit Paradox-Datenbanken zu Problemen kommen kann, vertrete ich die Meinung, nur den Verweis auf den Speicherort (LW:\Path\Filename) in einem ftString in der Paradox-Datenbank zu hinterlegen und die Bilder in einem entsprechenden Verzeichnis LW:\meinProgramm\Bilder zu hinterlegen. Ob dabei die Bilder ihren eigentlichen Namen behalten oder automatisch ein Name generiert wird, kann man ja festlegen.

ist das das gleiche, und brauche ich dort auch eine ini oder xlm datei ?
mfg vader


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
Seite 1 von 2  1 2      

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