Toon posts:

Access+delphi+afbeeldingen

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Klein vraagje:

K heb een accessdatabase (2000), hier wil ik een afbeelding/link naar afbeelding in opslaan. Nu heb ik dat via OLE-gedaan. Da werkt, mar nog nie zoals ik het wil.

Ik ben dus met delphi 5 een programmaatje in elkaar aan het frutte da de gegevens uit die accessdatabase ophaalt en ze afbeeld. Dit stuk lukt bijna. Het probleem is dat de afbeelding niet wordt afgebeeld.

K had eerst een DBimage opgenomen in mn programma, mar da werkte nie. Nu d8 k slim te zijn en een OLE-box te gebruiken, mar die kan ik nie connecten aan een datasource enz.

Iemand n ideetje?

Verwijderd

Topicstarter
Weet niemand dit?

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 09-09 09:06
ik heb er nog niet genoeg mee gewerkt, anders zou ik je kunnen helpen.
Kijk eens op wat speciale delphi fora: http://www.delphi3000.com, of anders, misschien is er al een component voor www.torry.net

Ik zou je graag helpen, maar nogmaals, geen ervaring mee tot nu toe.

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Kijk effe in de help bij CreateBLOBStream. Ik weet het zo niet uit m'n hoofd, maar als je er niet uit komt kan je me wel mailen. Dan zoek ik het nl. wel even op op m'n werk.

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Op vrijdag 18 januari 2002 16:25 schreef Destruction_Dimbo het volgende:

Het probleem is dat de afbeelding niet wordt afgebeeld.
Krijg je een foutmelding? Zoja, welke?

https://fgheysels.github.io/


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Kijk eens in de directory Delphi5\Demo\DB, daar in staat een voorbeeldje over een vis-db, daarin zijn ook plaatjes opgeslagen, denk alleen niet dat het access is maar het idee is hetzelfde

www.fendt.com | Nikon D7100 | PS5


Verwijderd

Welke foutmelding gaf hij bij gebruik met TDBImage?

Lukt dit? [Dit is alleen voor *.bmp]
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  BlbStr: TBlobStream;
  Btmp: TBitmap;
begin
  BlbStr := TBlobStream.Create([insert TBlobField, bv met
    MyTable.FieldByName('MyColumn')], bmRead);
  try
    Btmp := TBitmap.Create;
    try
    Btmp.LoadFromStream(BlbStr);
    [insert TImage].Picture.Graphic := Btmp;
    finally
    Btmp.Free;
    end;
  finally
    BlbStr.Free
  end;
end;

Wat voor plaatjes heb je? jpeg, gif?

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Op zondag 20 januari 2002 23:46 schreef FendtVario het volgende:
Kijk eens in de directory Delphi5\Demo\DB, daar in staat een voorbeeldje over een vis-db, daarin zijn ook plaatjes opgeslagen, denk alleen niet dat het access is maar het idee is hetzelfde
Idd, dat is met een Paradox db, maar het idee is idd hetzelfde.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb t al met n DBimage geprobeerd. K kreeg alleen een foutmelding dat het een ongeldige bitmap was.

De plaatjes zijn nl. .jpg en .gif.

Ik zal ns na de voorbeelddatabase kijken.

Is het anders misschien verstandiger om een paradox 7 database aan te maken en te werken met blob-velden ipv OLE?

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Op maandag 21 januari 2002 16:18 schreef Destruction_Dimbo het volgende:
Ik heb t al met n DBimage geprobeerd. K kreeg alleen een foutmelding dat het een ongeldige bitmap was.
Ik heb het eens getest vandaag met .bmp en ik kreeg dezelfde fout.
Misschien dat ik vanavond nog eens verder zoek.

https://fgheysels.github.io/


Verwijderd

Kijk ook effe hier.

Dit is waarschijnlijk het probleem:
MS Access stores the path of a linked OLE object as part of the object's definition in the OLE object field. Because the definition of OLE object storage is not documented (!? this is straight from MS) there is no way to know what gets written before the actual image data.

Verwijderd

Oke het is mij gelukt, wel in Access97, zal morgen effe in Access2000 testen:

Ik heb het component TGifImage van Anders Melander gebruikt, kun je hier vandaan halen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
unit main;

interface

uses
  Classes, Controls, Forms, StdCtrls, Db, Grids, DBTables, DBGrids, ExtCtrls;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Image1: TImage;
    Button1: TButton;
    Table1: TTable;
    { Ik gebruik een tabel van de vorm:

    ID | Naam | Plaatje
   
    Fields heb ik maar voor het gemak toegevoegd
    }
    Table1ID: TAutoIncField;
    Table1Naam: TStringField;
    Table1Plaatje: TBlobField;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  Graphics,
  JPEG,    // JPEG Unit die bij Delphi zit
  GifImage;     // GifImage van Anders Melander

{$R *.DFM}

type
  TPicType = (ptGif, ptJPEG);

{ Een plaatje heeft een bepaalde header:

  Bij gif plaatjes : GIF89a = $47, $49, $46, $38, $39, $61
  Bij JPEG plaatjes:      = $FF, $D8, $FF

  Deze header staat dus bij deze streams niet vooraan
  omdat microsoft er nog iets voor zet [OLE-pakket, naam
  bestand, lokatie etc]

  We moeten de cursor dus positioneren op $47 of $FF

  BTW: Het kan natuurlijk voorkomen dat in een gif plaatje eerst een JPEG header
     komt of andersom, of dat in een niet gif/JPEG plaatje toch een gif/JPEG
     header voorkomt... [Oplossing?]
}

function PositionBlob(ABlobStream: TBlobStream; var PicType: TPicType): Boolean;
var
  B: Byte;
  Status: Integer;

  procedure Iff(const EqualValue, Exp1, Exp2: Integer);
  begin
    if Status = EqualValue then
    Status := Exp1
    else
    Status := Exp2;
  end;
begin
  Result := False;
  Status := 0;
  { Status = 0: Nog nixs gevonden
         = 1: $47 gevonden
         = 2: $47, $49 gevonden
         = 3: $47, $49, $46 gevonden
         = 4: $47, $49, $46, $38 gevonden
         = 5: $47, $49, $46, $38, $39 gevonden
         = 6: $47, $49, $46, $38, $39, $61 gevonden, GIF!
         = 7: $FF gevonden
         = 8: $FF, $D8 gevonden
         = 9: $FF, $D8, $FF gevonden, JPEG!
  }

  { ABlobStream.Read(B, 1) is behoorlijk inefficient, sneller zou zijn om een
    hele hap in te lezen, maar daar had ik niet zo'n zin in :) }
  while (Status <> 9) and (Status <> 6) and (ABlobStream.Read(B, 1) = 1) do
    case B of
    $38:
      Iff(3, 4, 0);
    $39:
      Iff(4, 5, 0);
    $46:
      Iff(2, 3, 0);
    $47:
      Status := 1;
    $49:
      Iff(1, 2, 0);
    $61:
      Iff(5, 6, 0);
    $D8:
      Iff(7, 8, 0);
    $FF:
      Iff(8, 9, 7);
    else
    Status := 0;
    end;
  case Status of
    6:
    begin
      { Gif gevonden, cursor op de 'G' zetten }
      ABlobStream.Position := ABlobStream.Position - 6;
      PicType := ptGif;
      Result := True;
    end;
    9:
    begin
      { JPEG gevonden, cursor op de eerste $FF zetten }
      ABlobStream.Position := ABlobStream.Position - 3;
      PicType := ptJPEG;
      Result := True;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  BlobStream: TBlobStream;
  Pic: TGraphic;
  PicType: TPicType;
begin
  BlobStream := TBlobStream.Create(Table1Plaatje, bmRead);
  try
    if not PositionBlob(BlobStream, PicType) then Exit;

    case PicType of
    ptJPEG:
      Pic := TJPEGImage.Create;
    ptGif:
      Pic := TGIFImage.Create;
    else
    Exit;
    end;
    try
    Pic.LoadFromStream(BlobStream);
    Image1.Picture.Graphic := Pic;
    finally
    Pic.Free;
    end;
  finally
    BlobStream.Free
  end;
end;

end.

Dat was die :)

Verwijderd

Topicstarter
Bedankt ik zal het eens proberen!!!
Pagina: 1