ttrobin
asked on
Invalida class Typecast
Hi everyone,
I'm developing a database application on delphi 7 and Microsoft Access.
I have a memo field in a table called 'requrimientos' and in my form a dbgrid showing this table. There is a TMemo in the form wich i want to put the info from the dbmemo field everytime the user clicks on a cell in the dbgrid.
This is my source:
procedure TForm1.DBGrid1CellClick(Co lumn: TColumn);
var
memo: TBlobStream;
Aux : TMemo;
begin
memo := TBlobStream.Create(Conex.J uegosrequr imientos, bmRead);
Memo1.Lines.LoadFromStream (memo);
end;
Where 'Conex' it's a DataModule where i have all de objects related to the database.
The project is well compiled, but the problem is at runtime, when i click on a cell i get a 'Invalid class typecast' error.
Someone knows why?
Thanks in advance.
I'm developing a database application on delphi 7 and Microsoft Access.
I have a memo field in a table called 'requrimientos' and in my form a dbgrid showing this table. There is a TMemo in the form wich i want to put the info from the dbmemo field everytime the user clicks on a cell in the dbgrid.
This is my source:
procedure TForm1.DBGrid1CellClick(Co
var
memo: TBlobStream;
Aux : TMemo;
begin
memo := TBlobStream.Create(Conex.J
Memo1.Lines.LoadFromStream
end;
Where 'Conex' it's a DataModule where i have all de objects related to the database.
The project is well compiled, but the problem is at runtime, when i click on a cell i get a 'Invalid class typecast' error.
Someone knows why?
Thanks in advance.
why your field is BLOB? It the field should contain only text, it can be defined as TEXT. Then all you have to do is to change TMemo with TDBMemo and attach it to the same DataSet as the DBGrid...
ASKER
hi Ivanov_G,
it must have several lines of text, not only one, that's the reason.
it must have several lines of text, not only one, that's the reason.
is Conex.Juegosrequrimientos a blob field?
if not, that's the problem... you can try something like:
memo := TBlobStream.Create(TBlobFi eld(Conex. Juegosrequ rimientos) , bmRead);
if not, that's the problem... you can try something like:
memo := TBlobStream.Create(TBlobFi
ASKER
Hi BlackTigerX,
yes it is a TBLobField, in fact its a Memo access field.
Anyway i have tried to put it as OLE field, and use CreateBLobStream method, but nothing its shown in the memo field in the form1 ... And of course, the fields in the data base contains data :)
yes it is a TBLobField, in fact its a Memo access field.
Anyway i have tried to put it as OLE field, and use CreateBLobStream method, but nothing its shown in the memo field in the form1 ... And of course, the fields in the data base contains data :)
you can always read it as a string with .AsString :)
Memo1.Lines.Text:=Conex.Ju egosrequri mientos.As String;
Memo1.Lines.Text:=Conex.Ju
why not use a tdbmemo-component?
TEXT is not VARCHAR... use can have several lines of text...
what ? and a varchar can't have crlf's ? is that what you're implying ?
the only difference is internal handling .. you can't sort, group, query on blobs .. and they are differently allocated than varchars
especialy in ms access !
AFAIK a text field in access is max 255 chars large, TEXT is 64k bytes max .. binary can be larger
the only difference is internal handling .. you can't sort, group, query on blobs .. and they are differently allocated than varchars
especialy in ms access !
AFAIK a text field in access is max 255 chars large, TEXT is 64k bytes max .. binary can be larger
>and a varchar can't have crlf's ?
a varchar can have crlf's, as any other string-type
a varchar can have crlf's, as any other string-type
well I know that :)
Hi guys :)
I'd also use a TDBMemo, btw, as the question is about the Invalid Typecast, it must be solved with the correct syntax as follows:
memo := TBlobStream(Juegos.CreateB lobStream( Juegosrequ rimientos, bmread)); //The tream must be created by the table
Memo1.Lines.LoadFromStream (memo);
I'd also use a TDBMemo, btw, as the question is about the Invalid Typecast, it must be solved with the correct syntax as follows:
memo := TBlobStream(Juegos.CreateB
Memo1.Lines.LoadFromStream
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi Ferruccio68,
I have tried what u said to me, and already dong get invalid class typecast message but nothing is shown in the TMemo object in the form ...
Maybe i have missing something ...
I have tried what u said to me, and already dong get invalid class typecast message but nothing is shown in the TMemo object in the form ...
Maybe i have missing something ...
btw, why a tblobstream?
var
ms : TMemoryStream;
begin
ms := TMemoryStream.Create;
try
TBlobField(DataSet.FieldBy Name('Blob FieldName' )).SaveToS tream(ms);
ms.position := 0; //spool back
memo1.lines.loadfromstream (ms);
finally
ms.free;
end;
end;
just as alternative, just from head
meikl ;-)
var
ms : TMemoryStream;
begin
ms := TMemoryStream.Create;
try
TBlobField(DataSet.FieldBy
ms.position := 0; //spool back
memo1.lines.loadfromstream
finally
ms.free;
end;
end;
just as alternative, just from head
meikl ;-)
--> btw, why a tblobstream?
because he's declared it in db as MEMO and become of type TMemoField on Dataset....
--> nothing is shown in the TMemo object
are you sure that there are datas in the tested record? for me it's working fine....
because he's declared it in db as MEMO and become of type TMemoField on Dataset....
--> nothing is shown in the TMemo object
are you sure that there are datas in the tested record? for me it's working fine....
>because he's declared it in db as MEMO and become of type TMemoField on >Dataset....
?? may i have overlooked this
memo1.lines.text := TMemoField(DataSet.FieldBy Name('Memo FieldName' )).AsText;
meikl ;-)
?? may i have overlooked this
memo1.lines.text := TMemoField(DataSet.FieldBy
meikl ;-)
--> ?? may i have overlooked this
No meikl, it's just my guess. He said 'yes it is a TBLobField, in fact its a Memo access field.' but i think it's his mistake, beacuse AFAIK a MEMO Access field is treated as TMemoField, non Tblobfield
No meikl, it's just my guess. He said 'yes it is a TBLobField, in fact its a Memo access field.' but i think it's his mistake, beacuse AFAIK a MEMO Access field is treated as TMemoField, non Tblobfield
>is treated as TMemoField, non Tblobfield
well, then this should be the invalid typecast, i guess
well, then this should be the invalid typecast, i guess
Yes, in fact, and to solve it as he was asking for the right syntax was the posted by me above. BTW i repeat: i'd use a TDBMemo (why puzzling your mind with a Tmemo?). Of course other methods like yours should work well.
F68 ;-)
F68 ;-)
and about my first comment ? it'll work regardless of the fieldtype and is applicable anywhere
yep, lee, should be applicable
btw. asText as i suggested above is not correct (asString would be correct)
meikl ;-)
btw. asText as i suggested above is not correct (asString would be correct)
meikl ;-)
ASKER
Ok, i dont understand nothing at all :)
I have data written in this field on the database, i can see it when i open the table from access, but however nothing its shown in the memo field, or even the dbmemo field at the program.
I tried the following: put in the same form all fields from the table called 'Games', and i edited the dbmemo field at runtime, saving the information i wrote. And it works!!!
Then, why the information contained in the field (that exists and its visible from access) its not showed in the dbmemo field even when i put it directly in the form?
Thanks in advance for your time to everyone.
I have data written in this field on the database, i can see it when i open the table from access, but however nothing its shown in the memo field, or even the dbmemo field at the program.
I tried the following: put in the same form all fields from the table called 'Games', and i edited the dbmemo field at runtime, saving the information i wrote. And it works!!!
Then, why the information contained in the field (that exists and its visible from access) its not showed in the dbmemo field even when i put it directly in the form?
Thanks in advance for your time to everyone.
I gues that these memo fields were edited directly in access, maybe pasting text directly from some editor....
If so try using a Tdbrichedit.....
If so try using a Tdbrichedit.....
ASKER
Hi Ferruccio68,
Yes, they were, and the tdbrichEditText didn't work :)
I think i will have to put the info again through the program, copying and pasting ...
Anyway, if anyone knows why it happens, please explain it!
Thanks to all people that tried or wanted to help me.
Yes, they were, and the tdbrichEditText didn't work :)
I think i will have to put the info again through the program, copying and pasting ...
Anyway, if anyone knows why it happens, please explain it!
Thanks to all people that tried or wanted to help me.
>I gues that these memo fields were edited directly in access
>Anyway, if anyone knows why it happens, please explain it!
in this case an ole-information is prefixed to the real content,
somewhere is a site, where the needed offset is discussed
(was for an image-type, i guess)
try to find it again
meikl ;-)
>Anyway, if anyone knows why it happens, please explain it!
in this case an ole-information is prefixed to the real content,
somewhere is a site, where the needed offset is discussed
(was for an image-type, i guess)
try to find it again
meikl ;-)