21. juli 2004 - 13:19Der 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
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?
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.
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.
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.
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?
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.