Tässä Delphi 7:n koodi:
procedure TFormRaportinLogo.TallennaTiedostoKantaan(Tiedosto : String); var FileStream : TFileStream; BLOBStream : TBlobStream; begin FileStream := TFileStream.Create(Tiedosto, fmOpenRead); BLOBStream := TBlobStream.Create( FormPaalomake.QueryYhteisonPaivitys.FieldByName('RAPORTTI_LOGO') as TBlobField, bmReadWrite); BLOBStream.Seek(0, soFromBeginning); BLOBStream.Truncate; BLOBStream.CopyFrom(FileStream, FileStream.Size); FileStream.Free; BLOBStream.Free; end;
Miksiköhän kuvaa tallennettaessa tämän rivin kohdalla:
BLOBStream := TBlobStream.Create( FormPaalomake.QueryYhteisonPaivitys.FieldByName(
tulee tällaine virhe:
...EInvalidCast with message 'Invalid class typecast'. Process stopped...
(Mod. edit. Kannattaa käyttää toisinaan muotoiluja, kooditageja melkeinpä aina koodin kanssa. Liian pitkät välilyönnittömät koodirivitkin ovat vaarallisia, mutta niitähän ei koskaan voi aavistaa. :) Kiitän.)
Mitä tyyppiä on FieldByName-funktion palautusarvo, voiko sen muuttaa TBlobStream-tyyppiseksi? Mitä tapahtuu, jos muutos tehdään syntaksilla TBlobStream(...FieldByName(...))
?
Sain toimimaan jo tällä muutoksella:
var BLOBStream : TBlobStream; -> var BLOBStream : TStream;
Ilmeisesti siksi, että tuota blobstreamia käytetään vain BDE-kantoihin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.