【200分】access数据库.mdb查看长二进制图片

【200分】access数据库.mdb查看长二进制图片,第1张

见如下部分代码,我已试过可以提取文件,也可自己编辑一下,实现循环取图等等!

提供一下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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9672584.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存