社区
数据库及相关技术
帖子详情
弱弱地问:OleVariant变量中保存着近4K的二进制数据,如何保存到SQL Server的数据库里?
futurefu
2002-04-01 01:34:22
我曾经用TBlobField的AsString和AsVariant方法,但存完之后就都不是原来的东东了.我是往SQL Server的binary字段里存,字段大小定义的和OleVariant变量中保存的二进制数据一样大.
我现在是头大、眼花,还请高人指点一、二!
...全文
64
9
打赏
收藏
弱弱地问:OleVariant变量中保存着近4K的二进制数据,如何保存到SQL Server的数据库里?
我曾经用TBlobField的AsString和AsVariant方法,但存完之后就都不是原来的东东了.我是往SQL Server的binary字段里存,字段大小定义的和OleVariant变量中保存的二进制数据一样大. 我现在是头大、眼花,还请高人指点一、二!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
futurefu
2002-04-02
打赏
举报
回复
现在又发现一个怪异的现象,使用TMemoryStream对象将数据保存到SQL SERVER中,然后又用TMemoryStream对象取出,发现前后两次的TMemoryStream对象的数据有细微差异.
futurefu
2002-04-02
打赏
举报
回复
//msField用来读出SQL SERVER中的二进制字段
TMemoryStream *msField = new TMemoryStream();
try
{
//SQL SERVER中当前记录的二进制字段保存到TMemoryStream对象中
TBlobField(Table1->FieldByName("BinaryField")).SaveToStream(msField) ;
msField->Position = 0 ;
//检查TMemoryStream对象中保存的数据的大小。
//ShowMessage(IntToStr(msField->Size)) ;
/*现在的问题是无法将TMemoryStream对象中的数据转移到OleVariant变量中*/
}
__finally
{
delete msField;
}
kingcaiyao
2002-04-02
打赏
举报
回复
请问你取出时的代码是?贴出来好吗?
kingcaiyao
2002-04-02
打赏
举报
回复
请问你取出时的代码是?贴出来好吗?
wt_sanlian
2002-04-02
打赏
举报
回复
你可以绕过TBlobField
直接形成SQL语句,我以前曾将图象文件全部转换为字符串,然后直接形成SQL 语句
将二进制格式转换为16 进制的字符串
直接放在SQL语句中,形成的语句如下
Insert Table01 (BH, Photo) values ('100001',0xA2FCD2D4....)
然后将其放入Query1 -> SQL 中
再来一个 Query1 -> ExecSQL();
kingcaiyao
2002-04-02
打赏
举报
回复
TBlobField(Table1->FieldByName("BinaryField")).SaveToStream(msField) ;
请改成:因为函数FieldByName取出的是一指针
TBlobField *BlobFiled=(TBlobField*)(Table1->Fields->Fields["BinaryField"];
关于第二点:
OleVariant V;
V=MyQuery->FieldByName("BinaryField")->AsVariant;
futurefu
2002-04-01
打赏
举报
回复
多谢Kingcaiyao(AKing)!
我曾经使用如下步骤保存:
1、使用TMemoryStream的Write方法将OleVariant值读到TMemoryStream对象中;
2、用TBlobField的LoadFromStream将其保存到SQL Server中;
然后再用如下步骤取出;
1、用TBlobField的SaveToStream将其取出到TMemoryStream对象中;
此时,我检查了取出数据的大小,确为原大小,只是在这里我无法将TMemoryStream对象中的数据再转化为OleVariant变量,所以该方法最后只好做罢,也许仁兄不吝赐教,可以在此点拨小弟一二!
kingcaiyao
2002-04-01
打赏
举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream *MStream=new TMemoryStream();
HGLOBAL hMem=::GlobalAlloc(GMEM_MOVEABLE,4096);
if(!hMem)
{
Application->MessageBox("can't new movable memory block!","Error",MB_OK+MB_ICONERROR);
return;
}
void *pMem=GlobalLock(hMem);
memcpy(pMem,your olevariant's content,4096);
MStream->Position=0;
MStream->SetSize(4096);
MStream->Write(pMem,4096);
MyQuery->Close();
MyQuery->SQL->Clear();
MyQuery->SQL->Add("select * from table");
MyQuery->Open();
TBlobField *MyField=(TBlobField*)MyQuery->FieldByName("your blob field");
MyField->LoadFromStream(MStream);
GlobalUnlock(hMem);
delete MStream;
}
kingcaiyao
2002-04-01
打赏
举报
回复
用TMemoryStream看看。
转换
OLE
Variant
和TMemoryStrea
TMemoryStream是Delphi
中
的一种内存流对象,用于在内存
中
读写
二进制
数据
。它可以被视为一个虚拟文件系统的一部分,通过提供类似文件操作的方法(如Read、Write等),使得程序能够在内存
中
高效地处理
数据
。 ### ...
DBX 三层 CobblerDemo
DBX 三层 CobblerDemo, //公共的查询 function GetSearchData(const ... //
保存
主从
数据
function SaveMasterDetailData(const MasterTable,DetailTable,KeyFields:string;const SaveData:
Ole
Variant
):Integer;
MS
SQL
与Delphi类型对照一览表
在开发 Delphi 应用程序时,经常需要与
数据
库
进行交互,其
中
MS
SQL
(Microsoft
SQL
Server
)是一个常见的关系型
数据
库
管理系统。为了有效地在 Delphi
中
操作 MS
SQL
数据
库
,了解两者之间的类型对照是非常重要的。...
delphi
数据
库
连接属性
在Delphi编程
中
,
数据
库
连接是应用程序与
数据
存储交互的基础。本知识点主要关注如何通过UDL(Universal Data Link)文件来实现自动连接
数据
库
,并在多个模块间共享这一连接配置,以便于简化
数据
库
访
问
过程和提高代码...
DELPHI
中
操作ACCESS
数据
库
在DELPHI
中
操作ACCESS
数据
库
是一项常见的任务,特别是在开发小型到
中
型企业级应用程序时。ACCESS
数据
库
因其易用性、灵活性和较低的系统需求而被广泛采用。以下将详细讲解如何在DELPHI环境下进行ACCESS
数据
库
的操作,...
数据库及相关技术
1,178
社区成员
18,938
社区内容
发帖
与我相关
我的任务
数据库及相关技术
C++ Builder 数据库及相关技术
复制链接
扫一扫
分享
社区描述
C++ Builder 数据库及相关技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章