访问数据库的Blob字段问题(200分)

  • 主题发起人 主题发起人 TOTO
  • 开始时间 开始时间
T

TOTO

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用TClientDataset来访问一个数据库。想要处理其中的一个Blob字段。
代码如下:
Ms : TMemoryStream;
de : Integer;
...
TBlob(ClientDataset1.FieldByName('data')).SavetoStream(ms);
ms.read(de, Sizeof(Integer));
^^^^^
这里出错,错误没有什么有用的提示。
如果先把Blob字段存到文件中,然后使用Stream.LoadFromFile然后再读,就不会出错。
实在不知道为什么。
我现在使用Delphi6,以前再Delphi5中这些代码挺正常的。实在搞不懂。

请大家帮忙看看是什么问题。

还有,Delphi6中,再运行时,查看Ms.Size总是0。但Save后文件中却总是正常的。
其他的对象变量在运行时也这样,Ctrl+ F7显示是0,但把它赋值给一个我定义的变量
却正常。是不是什么地方的编译选项没有设置呀?有没有类似经验的同道,指点一二了..

 
TBlob 是不是要設一沒什么緩存的

TBlobField *FieldPtr;
FieldPtr=(TBlobField*)adoqSyBase->FieldByName("att_attachcont");
int i=1;
//¥Í¦¨ªþ¥ó¦W
while(FileExists(ExtractFilePath(Application->ExeName) + "temp"+"//"+AnsiString(i)+".z")||FileExists(ExtractFilePath(Application->ExeName) + "temp"+"//"+AnsiString(i)))
{
FMain->Cursor=crHourGlass;
i++;
}
TempFileName[FileCount]=AnsiString(i);//«O¦sªþ¥ó¦W
String tmpFile=ExtractFilePath(Application->ExeName) + "temp"+"//"+AnsiString(i)+".z";
FieldPtr->SaveToFile(tmpFile);
 
问题解决了,原来在
TBlob(ClientDataset1.FieldByName('data')).SavetoStream(ms);
之后,Stream的Position到了最后,所以读不到内容。
 
后退
顶部