Avatar billede kolme Nybegynder
21. juli 2004 - 13:19 Der er 9 kommentarer og
1 løsning

Gemme JPG i BDE Paradox database - Hvordan?!

Hej Eksperter,

Nu har jeg efterhånden søgt både højt og lavt på internettet, men har ikke kunnet finde noget der kan hjælpe mig. Om det er mig, der er dårlig til at søge, skal jeg lade være usagt.

Jeg ønsker at gemme JPG-filer i min Paradox database, men kan simpelthen ikke finde ud af det.
Er der nogen der kan hjælpe mig?
Hvornår vil i mene at en Paradox database er for stor/krævende når man gemmer billeder i den også? Billeder vil forhåbentlig højst fylde 10 KB/stk. og i Database Desktop'en har jeg valgt at billeder ingenting gemmer i selve database-filen, men i stedet gemmer i *.MB

På forhånd tak for hjælpen :-)
Avatar billede kolme Nybegynder
21. juli 2004 - 19:52 #1
Er folk gået på sommerferie, eller er hva'? :-)

Jeg er selv kommet en smule videre. Jeg har fundet følgende:

Procedure TForm1.LoadJpegfromblob;
Var
  str : tblobstream;
  img:Tjpegimage;
begin
  Str := Tblobstream.Create(Table1.fieldbyname('YourField'));
  img:=tjpegimage.create;
  img.loadfromstream(str);// or
  image1.picture.assign(img);
  img.free;
  str.free;
end;

Procedure SaveJpegtoblob;
Var
  str : tblobstream;
  img:Tjpegimage
begin
  Str := Tblobstream.Create(Table1.fieldbyname('YourField');
  img:=tjpegimage.create;
  img.assing(image1.picture); // or if you have the picture on file you can
load it using img.loadfromfile('c:\yourjpg.jpg')
  img.savetostream(str);
  img.free;
  Str.Free;
end;

Men ved validering giver det fejlen:
Incompatible types: 'TBlobField' and 'TField'
Hvad betyder det. Dvs. hvordan skal jeg løse dette?
Avatar billede whynot Nybegynder
21. juli 2004 - 22:32 #2
procedure TForm1.Button1Click(Sender: TObject);
var
  fil: file;
  jpg: TJpegImage;
  memStream: TMemoryStream;
  blob: Tblobfield;
begin
  if OpenpictureDialog1.Execute then
  begin
    with MyQuery1 do
    begin
      sql.Clear;
      sql.Add('insert into tabelnavn (billede, ext) values (":parambillede", ":paramext");
      myquery1.Params.ParamByName('parambillede').LoadFromFile(openpicturedialog1.FileName, ftBlob);
      myquery1.Params.ParamByName('paramext').Value := extractfileext(openpicturedialog1.FileName);
      myquery1.Execute;
    end;
      image1.picture.Assign(nil);
  // her checkes for JPG
      if lowercase(myquery1.FieldByName('ext').AsString) = '.jpg' then
      begin
        memStream := TMemoryStream.Create;
        try
          jpg := TJpegImage.Create;
          try
            if not (myquery1.FieldbyName('logo') as TBlobfield).IsNull
              then
            begin
              (myquery1.FieldbyName('logo') as TBlobfield).SaveToStream(memStream);
              memStream.Seek(0, 0);
              jpg.LoadFromStream(memStream);
              Image1.Picture.Assign(jpg);
            end;
          finally
            jpg.free;
          end;
        finally
          memStream.free;
        end;
      end;
    // her checkes for bmp
      if (lowercase(myquery1.FieldByName('ext').AsString) = '.bmp') then
      try
        Blob := myquery1.FieldByName('logo') as TBlobField;
        Image1.Picture.Bitmap.Assign(Blob);
      finally
      end;
    end;
  end;
end;

prøv dette her.. det er en procedure jeg bruger i et program jeg har lavet.

håber det hjælper dig på vej.
Avatar billede kolme Nybegynder
21. juli 2004 - 22:54 #3
MyQuery? Hvad er det? Jeg kan ikke finde den.
Avatar billede whynot Nybegynder
22. juli 2004 - 08:30 #4
MyQuery har ikke meget med præcis din problemstilling med BDE - det er en komponent som jeg anvender der hedder MyDAC. Jeg synes den er væsentlig lettere at anvende.. men som jeg skrev - jeg håbede at det kunne give dig nogle hints om hvordan det virkede for BDE.. og hvad du skulle lede efter.
Avatar billede janbb Juniormester
29. juli 2004 - 02:03 #5
Der findes en meget simpel metode: Hvor man lægger sit jpg-billede i clipboardet (win)
Herefter peger og klikker man på sit imagefelt i sin Paradoxdatabaseprogram med musen
(så databasen peger på dette felt).
Man trykker så ctrl-shift og insert knapperne ned på tastaturet og så er billedet indsat i databasen.
Databasen kan da godt vokse lidt rigeligt, hvis man ikke er lidt påpasselig,
men med nutidens harddiskstørrelser skal man vel osse 'slå lidt til søren* en gang i mellem ?.
Der har været nogen eksempler på nogle smarte ADO-databaseprogrammer til jpg- og bmp-filer her på E for nogle 4-måneder siden tror jeg.Det er ikke umuligt jeg kan finde referencen, hvis det har nogen interesse.

  V.h. Jan
Avatar billede janbb Juniormester
29. juli 2004 - 02:06 #6
DB-image-felt er det self. nok.
Avatar billede janbb Juniormester
29. juli 2004 - 02:16 #7
Jeg fandt lige det nævnte ADO-program - referencen altsaa:

http://www.eksperten.dk/spm/404672


Med dette eks. kan du gemme/vise jpg/bmp billeder.
Hvis du vil have flere formater burde du selv kunne rette til.

http://www.tradestone.dk/tradestone/eksperten/eks404672/eks404672.zip
Avatar billede janbb Juniormester
29. juli 2004 - 02:18 #8
Og det er 10 mdr. siden - ak ja.
Avatar billede kolme Nybegynder
18. august 2004 - 18:59 #9
Jeg har ikke kunnet få jeres metoder til at virke - Det er det der med at Streame der går galt. Tilgengæld har jeg fundet en meget meget let metode - Og det undrer mig at det ikke er den, som folk nænver når man spørger. Den ser sådan her ud:

  (Table1.FieldByName('blob') as TBlobField).loadfromfile ('c:\billede.jpg');

hvor min blob er af typen Binary.
Er det en dårlig metode eller hva', siden den sjældent foreslås?
Avatar billede kolme Nybegynder
07. december 2004 - 16:19 #10
Lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester