动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Visual Basic教程 ]的信息

本月文章推荐
.Excel中Basic程序的运行.
.VisualBasic5.0多媒体创作技巧.
.在VB5.0中编辑数据库和电子表格.
.在VB6.0中实现动态统计报表.
.在VB应用程序中恰当的使用声音.
.多用户应用程序中应注意问题3.
.HierarchicalFlexGrid控件的使用.
.把Outlook信箱中的附件另存为.
.在VB中引用.dbf及索引文件.
.在VB里巧用数据类型集合.
.VB“变态”用法之高效字串指针类.
.在VB中用Outlook发电子邮件.
.用InStr函数实现代码减肥.
.用VB获得大容量硬盘信息.
.使机箱内的小喇叭发出不同的声音.
.用VisualBasic设计窗体背景花纹.
.用VB进行移位操作.
.如何设定墙纸的显示方式?.
.Windows/VB编程逐月通.
.VB中不规则图形热点的实现.

直接使用ODBCAPI访问数据库的VB程序

发表日期:2006-2-27 |


----开放数据库互连(ODBC)已经成为Client/Server数据库应用系统中访问远程数据库的一个标准。做为强大的前端开发工具,MSVisualBasic为开发者提供了多种访问ODBC数据源的途径,如JET数据库引擎、ODBCAPI函数、RDO接口等。比较而言,直接使用ODBCAPI函数的编程难度最大,但由此获得的存取数据库的性能也是最佳。诚然,VB4.0企业版提供的RDO接口的性能已经接近ODBCAPI,但是遗憾的是,这个接口只能在32位Windows环境中运行,而ODBCAPI函数则没有这个限制。

----ODBCAPI函数的声明方法

----与使用其它动态库函数一样,在VB中使用ODBCAPI函数之前,必须事先声明将要使用的函数、常量和数据结构。ODBCAPI函数驻留在ODBC运行动态库ODBC.DLL(16位)或ODBC32.DLL(32位)中,该动态库位于Windows子目录system中。通常做法是在VB项目中单独使用一个模块文件,然后将ODBCAPI声明语句加入其中,如下所示,就是本文实例中使用的模块文件module1.bas的内容:

DeclareFunctionSQLAllocEnvLib"odbc32.dll"(phenv&)AsInteger
DeclareFunctionSQLAllocConnectLib"odbc32.dll"(ByValhenv&,phdbc&)AsInteger
DeclareFunctionSQLAllocStmtLib"odbc32.dll"(ByValhdbc&,phstmt&)AsInteger
DeclareFunctionSQLConnectLib"odbc32.dll"(ByValhdbc&,ByValszDSN$,ByValcbDSN,ByValszUID$,ByValcbUID,ByValszAuthStr$,ByValcbAuthStr)AsInteger
DeclareFunctionSQLColAttributesStringLib"odbc32.dll"Alias"SQLColAttributes"(ByValhstmt&,ByValicol,ByValfDescType,ByValrgbDescAsString,ByValcbDescMax,pcbDesc,pfDesc&)AsInteger
DeclareFunctionSQLDisconnectLib"odbc32.dll"(ByValhdbc&)AsInteger
DeclareFunctionSQLExecDirectLib"odbc32.dll"(ByValhstmt&,ByValszSqlStr$,ByValcbSqlStr&)AsInteger
DeclareFunctionSQLFetchLib"odbc32.dll"(ByValhstmt&)AsInteger
DeclareFunctionSQLFreeConnectLib"odbc32.dll"(ByValhdbc&)AsInteger
DeclareFunctionSQLFreeEnvLib"odbc32.dll"(ByValhenv&)AsInteger
DeclareFunctionSQLFreeStmtLib"odbc32.dll"(ByValhstmt&,ByValfOption)AsInteger
DeclareFunctionSQLGetDataLib"odbc32.dll"(ByValhstmt&,ByValicol,ByValfCType,ByValrgbValueAsString,ByValcbValueMax&,pcbValue&)AsInteger
DeclareFunctionSQLNumResultColsLib"odbc32.dll"(ByValhstmt&,pccol)AsInteger
GlobalConstSQL_C_CHARAsLong=1
GlobalConstSQL_COLUMN_LABELAsLong=18
GlobalConstSQL_DROPAsLong=1
GlobalConstSQL_ERRORAsLong=-1
GlobalConstSQL_NO_DATA_FOUNDAsLong=100
GlobalConstSQL_SUCCESSAsLong=0

----需要说明的是,在函数声明时,应该根据程序的运行环境选择相应的动态库。在VB子目录samples\remauto\db_odbc中有两个正文文件ODBC16.TXT和ODBC32.TXT,分别存有所有16位和32位ODBCAPI函数、常量和数据结构的声明语句,编程时可以从中拷贝所需的声明语句。

----使用ODBCAPI的编程方法

----在VB中调用ODBCAPI函数访问ODBC数据库,代码编制一般是按照下列过程进行的:

----一、初始化ODBC

----在这个过程中,应用程序将通过调用SQLAlloEnv函数初始化ODBC接口,获取ODBC环境句柄。ODBC环境句柄是其它所有ODBC资源句柄的父句柄,因此无论程序将建立多少个ODBC连接,这个过程只需执行一次即可。例如:

DimrcAsInteger'ODBC函数的返回码
DimhenvAsLong'ODBC环境句柄
rc=SQLAllocEnv(henv)'获取ODBC环境句柄

----二、与ODBC数据源建立连接

----这个过程由下列两个步骤组成:

----1、调用SQLAllocConnect函数获取连接句柄。例如:

DimhdbcAsLong'连接句柄
rc=SQLAllocConnect(henv,hdbc)'获取连接句柄

----2、建立连接。这个步骤可以通过多种方法实现,最简单直观的方法是调用SQLConnect函数。例如:

DimDSNAsString,UIDAsString,PWDAsString
DSN="DataSourceName"'ODBC数据源名称
UID="UserID"'用户帐号
PWD="Password"'用户口令
rc=SQLConnect(hdbc,DSN,Len(DSN),UID,
Len(UID),PWD,Len(PWD))'建立连接

----三、存取数据

----用户对ODBC数据源的存取操作,都是通过SQL语句实现的。在这个过程中,应用程序将通过连接向ODBC数据库提交SQL语句,以完成用户请求的操作。具体步骤如下:

----1、调用SQLAllocStmt函数获取语句句柄。例如:

DimhstmtAsLong
rc=SQLAllocStmt(hdbc,hstmt)

----2、执行SQL语句。执行SQL语句的方法比较多,最简单明了的方法是调用SQLAllocStmt函数,例如:

DimSQLstmtAsString
SQLstmt="SELECT*FROMauthors"
rc=SQLExecDirect(hstmt,SQLstmt,Len(SQLstmt))

----四、检索结果集

----如果SQL语句被顺利提交并正确执行,那么就会产生一个结果集。检索结果集的方法有很多,最简单最直接的方法是调用SQLFetch和SQLGetData函数。SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录,SQLGetData函数的功能是提取结果集中当前记录的某个字段值。通常可以采用一个循环以提取结果集中所有记录的所有字段值,该循环重复执行SQLFetch和SQLGetData函数,直至SQLFetch函数返回SQL_NO_DATA_FOUND,这表示已经到达结果集的末尾。

DimColValAsString*225
ColVal=String(255,0)
DoUntilSQLFetch(hstmt)=SQL_NO_DATA_FOUND
rc=SQLGetData(hstmt,i,SQL_C_CHAR,ColVal,
Len(ColVal),SQL_NULL_DATA)
Loop

----五、结束应用程序

----在应用程序完成数据库操作,退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的步骤如下:

----1、调用SQLFreeStmt函数释放语句句柄及其相关的系统资源。例如:

rc=SQLFreeStmt(hstmt,SQL_DROP)

----2、调用SQLDisconnect函数关闭连接。例如:

rc=SQLDisconnect(hdbc)

----3、调用SQLFreeConnect函数释放连接句柄及其相关的系统资源。例如:

rc=SQLFreeConnect(hdbc)

----4、调用SQLFreeEnv函数释放环境句柄及其相关的系统资源,停止ODBC操作。例如:

rc=SQLFreeEnv(henv)

----此外,在编制程序时还有一个需要重点考虑的问题,这就是错误处理。所有ODBCAPI函数,若在执行期间发生错误,都将返回一个标准错误代码SQL_ERROR。一般来讲,在每次调用ODBCAPI函数之后,都应该检查该函数返回值,确定该函数是否成功地执行,再决定是否继续后续过程。而详细的错误信息,可以调用SQLError函数获得。SQLError函数将返回下列信息:

标准的ODBC错误状态码

ODBC数据源提供的内部错误编码

错误信息串
----简单应用实例

----本实例将编制一个客户机端VB应用程序,通过WindowsNT局域网查询服务器端MSSQLServer6.5样板数据库PUBS中的AUTHORS数据表,并在一个Grid控件中显示查询结果。首先,使用Windows控制面板中的ODBC驱动管理器新建一个ODBC数据源,定义数据源名称为ODBC_API_DEMO,定义登录数据库为PUBS,其它信息应根据用户的环境正确设置。然后,启动VB,新建一个项目Project1,在缺省窗体Form1中加入一个Grid控件Grid1、两个CommandButton控件cmdQuery和cmdClose,在Project1中插入一个模块Module1,将前面列举的声明语句加入其中。程序代码如下:

PrivateSubForm_Load()
DimrcAsInteger
rc=SQLAllocEnv(henv)
Ifrc<>0Then
MsgBox"无法初始化ODBC"
End
EndIf
rc=SQLAllocConnect(henv,hdbc)
Ifrc<>0Then
MsgBox"无法获得连接句柄"
rc=SQLFreeEnv(henv)
End
EndIf
DimDSNAsString,UIDAsString,PWDAsString
DSN="ODBC_API_DEMO"
UID="guest"
PWD=""
rc=SQLConnect(hdbc,DSN,Len(DSN),
UID,Len(UID),PWD,Len(UID))
Ifrc=SQL_ERRORThen
MsgBox"无法建立与ODBC数据源的连接"
End
EndIf
EndSub
PrivateSubcmdQuery_Click()
DimhstmtAsLong
DimSQLstmtAsString
DimRSColsAsInteger,RSRowsAsLong
DimrcAsInteger,iAsInteger,jAsInteger
DimColValAsString*1024
DimColValLenAsLong,ColLabLenAsInteger,largAsLong
rc=SQLAllocStmt(hdbc,hstmt)
Ifrc<>SQL_SUCCESSThen
MsgBox"无法获得SQL语句句柄"
ExitSub
EndIf
SQLstmt="SELECT*FROMauthors"
rc=SQLExecDirect(hstmt,SQLstmt,Len(SQLstmt))
Ifrc<>SQL_SUCCESSThen
MsgBox"SQL语句执行失败"
ExitSub
EndIf
rc=SQLNumResultCols(hstmt,RSCols)
IfRSCols>1Then
Grid1.Cols=RSCols
Grid1.Rows=10
Grid1.Row=0
Else
ExitSub
EndIf
Fori=1ToRSCols
rc=SQLColAttributesString(hstmt,i,
SQL_COLUMN_LABEL,ColVal,255,ColLabLen,larg)
Grid1.Col=i-1
Grid1.Text=Left(ColVal,ColLabLen)
Nexti
DoUntilSQLFetch(hstmt)=SQL_NO_DATA_FOUND
ColVal=String$(1024,0)
IfGrid1.Row 1>=Grid1.RowsThen
Grid1.Rows=Grid1.Rows 1
EndIf
Grid1.Row=Grid1.Row 1
Fori=1ToRSCols
rc=SQLGetData(hstmt,i,SQL_C_CHAR,
ColVal,Len(ColVal),ColValLen)
Grid1.Col=i-1
Grid1.Text=Left$(ColVal,ColValLen)
Nexti
Loop
rc=SQLFreeStmt(hstmt,SQL_DROP)
EndSub
PrivateSubcmdClose_Click()
DimrcAsInteger
Ifhdbc<>0Then
rc=SQLDisconnect(hdbc)
EndIf
rc=SQLFreeConnect(hdbc)
Ifhenv<>0Then
rc=SQLFreeEnv(henv)
EndIf
End
EndSub

----实例程序是使用VisualBasic4.0在Windows95环境下开发的。->

上一篇:VB5.0中远程数据库的访问 人气:2902
下一篇:怎样使用有admin888的Access数据库 人气:4461
浏览全部Visual Basic的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 谷秋精品课程软件课程版 v2.3
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成