ik ben momenteel bezig met het maken van een soort mail-client. Daarvoor wil ik de body van de mail en de attachments als BLOB opslaan in Interbase. De database heb ik al, alleen het vullen en het uitlezen wil niet.
Ik probeerde het als eerste met een TIBBLobStream. Daarbij hoort het volgende example, wat ik overigens letterlijk en ook met een hoop geklooi heb geprobeerd:
Echter: methode 1 zegt: too many actual parameters. De create van TIBBlobStream bevat GEEN parameters volgens de compiler.
De tweede methode zegt dat TIBBLobStream en TStream incompatible types zijn, terwijl TIBBlobStream een directe descendant van TStream is
Ik kan het oplossen door van TIBBlobStream een TStream te maken, maar dan moet ik zelf een SafeToFile en een LoadFromFile maken. Dat had ik gedaan (sort of, voor mijn situatie, via een TFileStream en dan een copyFrom), maar zodra ik dat uit probeer te lezen, dan krijg ik alleen maar wat vage tekst van 5 karakters lang?
Dat is dan dezelfde tekst als wanneer ik in WISQL de statement 'SELECT body FROM mails' uitvoer...
Hoe krijg ik dit dus werkend?
De body kan ik eventueel vervangen door een varchar van 65K of zo (als dat kan, weet ik zo nog niet), maar dan zit ik nog steeds met de attachments.
Ook kan ik wel een create zonder parameters meegeven aan TIBBlobStream, en dan zelf proberen in te vullen welke tabel en welke row de benodigde blob is, maar meer (niet read only) properties dan 'Database', 'Transaction', 'Mode' en BlobID zijn er niet, en aangezien er geen type opgegeven wat voor type BlobID is, weet ik niet wat ik daar mee moet doen. Moet ik daar die vage korte string geven die ik krijg bij mijn select?
Wet iemand hoe ik dit oplos? Het liefste op de officiele manier natuurlijk
Ik probeerde het als eerste met een TIBBLobStream. Daarbij hoort het volgende example, wat ik overigens letterlijk en ook met een hoop geklooi heb geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| procedure TForm1.Button1Click(Sender: TObject);
var
Stream1, Stream2 : TIBBlobStream;
begin
Stream1 := TIBBlobStream.Create(IBTable1Notes, bmRead);
try
IBTable2.Edit;
{ heres a different way to create a blob stream }
Stream2 := IBTable2.CreateBlobStream(IBTable2.FieldByName
('Remarks'), bmReadWrite);
try
Stream2.CopyFrom(Stream1, Stream1.Size);
IBTable2.Post;
finally
Stream2.Free;
end;
finally
Stream1.Free;
end;
end; |
Echter: methode 1 zegt: too many actual parameters. De create van TIBBlobStream bevat GEEN parameters volgens de compiler.
De tweede methode zegt dat TIBBLobStream en TStream incompatible types zijn, terwijl TIBBlobStream een directe descendant van TStream is
Ik kan het oplossen door van TIBBlobStream een TStream te maken, maar dan moet ik zelf een SafeToFile en een LoadFromFile maken. Dat had ik gedaan (sort of, voor mijn situatie, via een TFileStream en dan een copyFrom), maar zodra ik dat uit probeer te lezen, dan krijg ik alleen maar wat vage tekst van 5 karakters lang?
Dat is dan dezelfde tekst als wanneer ik in WISQL de statement 'SELECT body FROM mails' uitvoer...
Hoe krijg ik dit dus werkend?
De body kan ik eventueel vervangen door een varchar van 65K of zo (als dat kan, weet ik zo nog niet), maar dan zit ik nog steeds met de attachments.
Ook kan ik wel een create zonder parameters meegeven aan TIBBlobStream, en dan zelf proberen in te vullen welke tabel en welke row de benodigde blob is, maar meer (niet read only) properties dan 'Database', 'Transaction', 'Mode' en BlobID zijn er niet, en aangezien er geen type opgegeven wat voor type BlobID is, weet ik niet wat ik daar mee moet doen. Moet ik daar die vage korte string geven die ik krijg bij mijn select?
Wet iemand hoe ik dit oplos? Het liefste op de officiele manier natuurlijk
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock