Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: Tiedoston tallentaminen Firebird-kantaan

tupuutt [01.03.2007 15:32:15]

#

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('RAPORTTI_LOGO') as TBlobField, bmReadWrite);

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.)

Metabolix [01.03.2007 19:03:37]

#

Mitä tyyppiä on FieldByName-funktion palautusarvo, voiko sen muuttaa TBlobStream-tyyppiseksi? Mitä tapahtuu, jos muutos tehdään syntaksilla TBlobStream(...FieldByName(...))?

tupuutt [02.03.2007 12:02:29]

#

Sain toimimaan jo tällä muutoksella:
var BLOBStream : TBlobStream; -> var BLOBStream : TStream;

Ilmeisesti siksi, että tuota blobstreamia käytetään vain BDE-kantoihin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta