我使用的是ANSI C编译器(LabWindows/CVI版本2010)从现有的Access 2010数据库中提取整数、字符串和浮点数据,取得了很好的效果。但是,我一直无法将存储为长二进制数据的图像数据提取到文件中(.jpg,或.tiff)。我怀疑这不是一个困难的任务,一旦技术是已知的,我只是没有经验的代码或技术来做到这一点。任何帮助将不胜感激。
cgh8pdjw1#
我希望,如果您成功地检索了image列中的所有数据,您只需要使用fwrite()将其写入文件。从列中检索长数据的通常访问模式是使用一个函数一次获取一个数据块。你传递给它一个固定长度的缓冲区和长度,它的返回值表明数据已经被截断,所以你把你拥有的数据写到文件中,然后再次调用它,直到它返回一个成功代码。查看National Instruments LabWindows/CVI SQL Toolkit的文档,DBGetColBinaryBuffer()函数可以返回代码-1,DB_TRUNCATION,其描述为“传入以保存结果的缓冲区大小不足以保存结果。缓冲区中已返回部分结果。”我猜想DBGetColBinaryBuffer()是设计用于循环的,如果这样做并将部分结果写入文件,最终将得到一个有效的映像。
fwrite()
DBGetColBinaryBuffer()
DB_TRUNCATION
1条答案
按热度按时间cgh8pdjw1#
我希望,如果您成功地检索了image列中的所有数据,您只需要使用
fwrite()
将其写入文件。从列中检索长数据的通常访问模式是使用一个函数一次获取一个数据块。你传递给它一个固定长度的缓冲区和长度,它的返回值表明数据已经被截断,所以你把你拥有的数据写到文件中,然后再次调用它,直到它返回一个成功代码。
查看National Instruments LabWindows/CVI SQL Toolkit的文档,
DBGetColBinaryBuffer()
函数可以返回代码-1,DB_TRUNCATION
,其描述为“传入以保存结果的缓冲区大小不足以保存结果。缓冲区中已返回部分结果。”我猜想
DBGetColBinaryBuffer()
是设计用于循环的,如果这样做并将部分结果写入文件,最终将得到一个有效的映像。