jeg har prøvet både med image1.picture.assign(table1photo); (feltet hedder photo og er added til tablet på formen) og med image1.picture.assign(table1.fieldbyname('photo')) i tablets afterscroll event.
Begge giver samme fejl.
Når jeg bare bruger image1.assign(table1photo); får jeg en fejl der siger: "cannot assign a tblobfield to a timage"
kender du flere muligheder eller er der andre der har nogle ideer ?
zieglersoft det virker stadig ikke. den siger stadig det samme \"bitmap image is not valid\"
jeg har tidligere prøvet med en stream og en bitmap på samme måde, men uden den linie med at fjerne headeren og fik samme fejl
er du sikker på at det skal være 79 ? for jeg er ret sikker på at det er headeren der er problemet, men jeg kender ikke formatet og ved ikke hvor mange tegn den er på
Well, det har altid været 79 med bitmaps (BMP fil). Men nu ved jeg jo ikke hvordan du har fået filen ind i databasen. Denne metode virker ved bitmaps der fysisk ligger i databasen, ikke ved lænker m.m.)
Hvilke database kontroller briger du? Jeg benytter ADO og ikke BDE, det har måske noget at sige.
jno, jeg faldt over en access database med billeder i, hvor billederne var gemt i et olecontainerfelt sådan som du omtaler.
Jeg prøvede derfor med D5 at åbne en record men fik samme fejl med DBImage som du omtaler.
Jeg prøvede så som zieglersoft skrev med position og det virkede heller ikke med 79. Så lavede jeg et loop hvor jeg prøvede med positions fra 1 til 255 men i alle tilfælde fik jeg samme fejl.
Så det lykkedes mig ikke og jeg opgav det. Men ham der har lavet db\'en fortæller mig at han sagtens kan se billederne i en formular i Access (jeg har ikke selv access installeret og kunne derfor ikke prøve) men han mener at det kun er en reference til billedet og ikke selve billedet (som bitmap) der ligger i feltet. Alle billederne har han desuden liggende et andet sted på disken. Og når han f.eks renamer, eller fjernet, et kan han ikke længere se det i access, men får en fejl.
Så jeg tror sket ikke det kan lade sig gøre med et DBImagefelt.
Well, det virker nu fint hvis, og kun hvis, billederne er i databasen, og ikke kun henvisninger til billederne.
Nu har jeg kun testet det med en Access 95 database, så det er muligt det gemmes anderledes i de øvrige access baser.
Her er en alternativ metode:
procedure TForm1.Tabel1AfterScroll(DataSet: TDataSet); Var TBS : TStream; BM : tBitmap; POSI: Integer; Fundet:Boolean; Buffer : Array[0..1] of Char; begin TBS := Tabel1.CreateBlobStream(Tabel1Photo, bmRead); // Åben som stream Try Fundet:=False; POSI:=-1; While (Fundet=False) and (POSI<TBS.Size) Do Begin Inc(POSI,1); TBS.Position:=POSI; TBS.Read(Buffer,2); If (Buffer[0]=\'B\') and (Buffer[1]=\'M\') Then Fundet:=True; End; If Fundet Then begin TBS.Position:=POSI; BM:=tBitmap.Create; // Lave en ny bitmap Try BM.LoadFromStream(TBS); // Load bitmap fra stream Image1.Picture.Assign(BM); // Assign bitmap til image Finally BM.Free; End; End Else Begin Image1.Picture.Assign(Nil); End; Finally TBS.Free; End; end;
zieglersoft, tak for dit eksempel men det virker desværre ikke hos mig. jeg får en access violation i BM.loadfromstream(TBS) efter at POSI er talt op til 2220. I 2220 og 2221 findes øjensynligt bogstaverne B og M men det er altså ikke rigtigt.
nu har jeg brugt for meget tid på det og har givet op. ham der har databasen må ændre det hvis jeg skal bruge det.
jeg deler point mellem jer og håber så i er tilfredse med det.
Noget tyder på at billederne så ikke er i databasen, men kun henvisninger til disse.
Jeg beklager jeg ikke kunne være til mere hjælp
Synes godt om
Ny brugerNybegynder
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.