
见如下部分代码,我已试过可以提取文件,也可自己编辑一下,实现循环取图等等!
提供一下excel文件下载网址,自己研究下吧!
Sub GetPic()
Dim adoCnn
Dim adoRs
Dim strSql As String, strDataSource As String '<==打开数据库用的字符串变量
Dim strImgFile As String '<==图像文件名字
Dim lngImgSize As Long '<==数据库里的图像字节长度
Dim binImg() As Byte '<==用来取图像的二进制文件
Set adoCnn = CreateObject("adodbconnection")
Set adoRs = CreateObject("adodbrecordset")
strDataSource = "DRIVER={Microsoft Access Driver (mdb)};DBQ=" & ThisWorkbookPath & "\取出相片mdb"
adoCnnOpen strDataSource
strSql = "Select from 数据"
adoRsOpen strSql, adoCnn
'以上 ADO一般 *** 作 自已研究
strImgFile = ThisWorkbookPath & "\tempjpg" '临时图像文件起名为TEMP,喜欢什么随意
'应该注意的是,你这个数据,其实是JPG,应该起什么后缀,请试过以后再说
adoRsMoveFirst '<===从第一行记录开始,要全部遍历,请做MOVENEXT到EOF的循环
'下面只演示取第一个记录的图像
方法一:使用stringstream进行转换。
示例:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char argv[])
{
stringstream sstr;
sstrclear();
char ch = new char[1024];
string s="abcd";
sstr<<s;//将s的值放到stringstream
sstr>>ch;//将stringstream中的值导出到ch
cout<<ch<<endl;
return 0;
}
/
输出:abcd
/
方法二:运用basic_string::c_str转换或者使用basic_string::data()转换
1)函数原型:const value_type c_str( ) const;和const value_type data( ) const;
2)函数描述:basic_string::c_str将一个字符串的内容转化为一个c风格字符串的指针,basic_string::data返回原始数据序列。
3)区别:data只是返回原始数据序列,没有保证会用traits::eos(),或者说'\0'来作字符串结束。 当然,可能多数实现都这样做了。
示例:
#include <string>
#include <iostream>
using namespace std;
int main( )
{
string str1 ( "Hello world" );
const char ptr1 = 0;
ptr1= str1data ( );
cout << "The modified string object ptr1 is: " << ptr1
<< endl;
// Converting a string to a C-style string
const char c_str1 = str1c_str ( );
cout << "The C-style string c_str1 is: " << c_str1
<< endl;
}
/
输出:
The modified string object ptr1 is: Hello world
The C-style string c_str1 is: Hello world
/
c++中string到int的转换有两种方法
1、在C标准库里面,使用atoi:#include#includestd::stringtext="152";intnumber=std::atoi(textc_str());if(errno==ERANGE)//可能是std::errno{//number可能由于过大或过小而不能完全存储}elseif(errno==)//可能是EINVAL{//不能转换成一个数字}
2、在C++标准库里面,使用stringstream:(stringstream可以用于各种数据类型之间的转换)#include#includestd::stringtext="152";intnumber;std::stringstreamss;ss>number;//string->intif(!ssgood()){//错误发生}ssstringstringstr=ssstr();if(!ssgood()){//错误发生}
以我10年delphi经验来看,绝对不能用indy,这是一套华而不实,从头烂到脚的控件。编程的时候觉得还好,一旦实际使用,会发现根本无法胜任工作。只适合当当教学工具。
你要做发送和接收,给你推荐2个方法是我平常用的
1 直接用api,网上有类似代码,阻塞模式很简单也很实用,要非阻塞就用线程。
2 用自带的TServerSocket 和 TClientSocket,这套控件简单、实用。做简单的收发很有效。
中文乱码问题处理也很简单。
看你是用的什么编码类型,不要直接发送string,应该转换成连续内存块再发送。
Ansi、UTF8、Unicode,这些处理方式不一样
Ansi可以直接转换成pchar,
UTF8的话,要先用UTF8toString函数转换成Ansi,然后再转换成pchar发送
unicode也同样如此。
另外,你用的delphi版本也很重要,Delphi7以下的,只支持ansi,不用特别转换
从delphi2009开始,所有string都默认是unicode长度会有变化。
再者,我看到你的代码里面,发送和接收都没有实际长度,都是 -1,这是很不科学的做法。不能把长度交给系统去判断,这样只会是错误的。必须要提供实际的接收长度。只有这样才能避免被系统聪明的分包和组包。
delphi把接口文件放在内存里的方法如下:
1 加密算法要求:AES/CBC/PKCS5Padding,秘钥长度128位。
2 获取密钥的缓存是否只应该放在内存中,在服务启动后从接口拉取。禁止存放在数据库、硬盘文件、OSS等持久化存储的地方。
3 模糊查询部分功能,如不使用,可不实现。
4 设置密钥的过期时间,过期重新拉取。秘钥的过期时间,在获取秘钥的接口会返回的,控制权在于top服务端。秘钥获取接口 :taobaotopsecretget5 请回传密钥的加密、解密调用次数。具体标准:加、解密调用函数每次调用,对应的计数器(各种类型计数器)会+1,5分钟左右同步一次。异步线程会把计数器同步到top api接口: taobaotopsdkfeedbackupload。具体实现请参考 JAVA SDK。最好用Delphi直接调用JAVA类实现加密解密。
以上就是关于【200分】access数据库.mdb查看长二进制图片全部的内容,包括:【200分】access数据库.mdb查看长二进制图片、C++ string 初始赋值用char[]会乱码、金额类型转成身体string等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)