VC的另类数据库编程

2016-01-29 12:40 9 1 收藏

VC的另类数据库编程,VC的另类数据库编程

【 tulaoshi.com - C语言心得技巧 】

  一、 制作VB数据库访问ACTIVEX DLL

  1、首先使用VB6.0创建一个心得ACTIVEX DLL工程,将工程命名为prjado、将类命名为clsado。

  2、为工程添加ADO对象库的引用。工程->引用:Microsoft ActiveX Data Objects2.0 Library

  3、为类增加两个新的变量:

Dim con As New ADODB.Connection 定义ADO会话连接对象
Dim cmd As New ADODB.Command 定义ADO命令对象
  4、增加初始化函数

Public Function ado_Init()
 con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True;Data Source=sms.mdb"
 cmd.ActiveConnection = con
End Function
  建立到数据源的物理连接

  指定Command对象当前所属的 Connection 对象。

  5、数据库操作函数

Public Function ado_add(ByVal strdata As String)
 cmd.CommandText = "insert into comdata (timm,datt) values (" + (Format(Date, "YYYY-MM-DD ")) + Str((Time)) + "," + (strdata) + ")"
 cmd.Execute
End Function
  将参数保存到SMS.MDB的COMDATA表中

  注意:函数声明时必须指定参数是传值(ByVal),否则VB默认为按地址传递(ByRef)

  6、连接关闭函数

Public Function ado_UnInit()
 con.Close
 Set cmd = Nothing
 Set con = Nothing
End Function
  关闭连接并且释放对象。

  保存工程,编译prjado.dll,这就是我们的服务组件,它完成了调用ADO对象实现对数据库操作的功能。

  二、在VC程序中调用服务组件

  1、运行VC 6.0,使用MFC程序向导创建一个新的基于对话框的MFC应用程序。

  2、使用#import导入服务组件,拷贝PRJADO.DLL到VC工程目录,打开STDAFX.H文件增加如下代码:

# import "prjado.dll"
using namespace prjado;
这段代码应该放置在
file://{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately 之后和#endif 之前。
  在stdafx.h文件导入dll能够让编译器在运行时连接dll的类型库,#import它能够自动产生一个对GUIDs的定义,同时自动生成对clsado对象的封装。同时能够列举它在类中所能找到的类型, VC++会在编译的时候自动生成两个文件:

  一个头文件(.tlh),它包含了列举的类型和对类型库中对象的定义;

  一个实现文件(.tli)对类型库对象模型中的方法产生封装。

  Namespace(名字空间)用来定义一个名字空间,使用unsing就可以将当前的类型上下文转换名字空间所定地,让我们可以访问服务组件的方法。

  如果我们修改了服务组件程序,建议删除这两个文件后重新完整编译工程,以便让编译器重新列举类的属性以及函数。

  3、在对话框中新添加一按钮,标题设为"测试"。双击"测试"按钮,系统提示新建一函数OnButton1对应于该按钮的CLICK事件。OnButton1函数的具体代码如下

HRESULT hresult;
CLSID clsid;
CoInitialize(NULL);
file://初始化COM接口
hresult=CLSIDFromProgID(OLESTR("prjado.clsado"), &clsid);
file://得到组件的CLSID
_clsado *t;
file://这就是我们在PRJADO.DLL中定义的类
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_clsado),(LPVOID *) &t);
file://初始化CLSADO,CoCreateInstance()的第一个参数是对象的CLSID(类代码),这个128位的编码唯一地标识了组件服务,它的路径和运行参数等信息都放在系统注册表中;第二个参数一般情况下设为NULL;第三个参数用来指明对象的运行环境,如远程或本地,此处设为CLSCTX_INPROC_SERVER,标明是服务组件是一个DLL;第四个参数指明用来与对象通信接口的ID,这也是一个128位的编码;第五个参数是用来接收对象的接口指针。

if(FAILED(hresult))
{
AfxMessageBox("初始化服务组件失败");
return;
}
file://如果初始化失败,弹出提示对话框

来源:http://www.tulaoshi.com/n/20160129/1487120.html

延伸阅读
在StdAfx.h文件中,#endif // _AFX_NO_AFXCMN_SUPPORT之前,加入: #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF") 接着, 在My.cpp文件InitInstance方法中, AfxEnableControlContainer();之前,加入:  if(!AfxOleInit())  //初始化  { AfxMessageBox( " initialize false!" ); } ...
网上经常有人问如何把图像存入数据库中,原先我也是不得要领。经过多方指点和自己在开发过程中的摸索,终于解决这一问题。下面给出用VC,VB如何操作图像文件存取数据库的原码,帮助一些还没有掌握方法的朋友(均用ADO连接数据库)。 一、VC把一个文件存入数据库 CFile imagefile; if(0 == imagefile.Open("d:usermp.bmp",CFile::modeRead)) ...
本文就来着重探讨一下 Visual C# 数据库基本编程,即:如何浏览记录、修改记录、删除记录和插入记录。针对 数据库 编程始终是程序设计语言的一个重要方面的内容,也是一个难点。数据库编程的内容十分丰富,但最为基本编程的也就是那么几点,譬如:连接数据库、得到需要的数据和针对数据记录的浏览、删除、修改、插入等操作。其中又以后面针...
标签: ASP
  一.怎样删除一个表中某个字段重复的列呀,举个例子 表[table1] id name1 aa2 bb3 cc1 aa2 bb3 cc 我想最后的表是这样的 id name 1 aa2 bb3 cc 回答: 将记录存到临时表#t中,重复的记录只存一条,然后将临时表#t中的记录再存回原表中,注意“select distinct id,class,name”要包含你需要的所有字段,否则有些...
编辑数据库软件时,为了数据安全,往往需要在数据库里加入密码,打开时就需要密码才能浏览,但是当我们在程序里调用时也需要不时的输入密码,这就照成了不遍,所以利用以下办法,输入密码后才打开数据库: Session.AddPassword(abc);{发送的密码} Table1.Open;

经验教程

648

收藏

26
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部