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

2016-02-19 12:29 50 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的直接使用ODBCAPI访问数据库的VB程序懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】

----开放数据库互连(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子目录samplesemautodb_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)
  Ifrc0Then
  MsgBox"无法初始化ODBC"
  End
  EndIf
  rc=SQLAllocConnect(henv,hdbc)
  Ifrc0Then
  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)
  IfrcSQL_SUCCESSThen
  MsgBox"无法获得SQL语句句柄"
  ExitSub
  EndIf
  SQLstmt="SELECT*FROMauthors"
  rc=SQLExecDirect(hstmt,SQLstmt,Len(SQLstmt))
  IfrcSQL_SUCCESSThen
  MsgBox"SQL语句执行失败"
  ExitSub
  EndIf
  rc=SQLNumResultCols(hstmt,RSCols)
  IfRSCols1Then
  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
  Ifhdbc0Then
  rc=SQLDisconnect(hdbc)
  EndIf
  rc=SQLFreeConnect(hdbc)
  Ifhenv0Then
  rc=SQLFreeEnv(henv)
  EndIf
  End
  EndSub
  
  ----实例程序是使用VisualBasic4.0在Windows95环境下开发的。->

来源:http://www.tulaoshi.com/n/20160219/1601016.html

延伸阅读
----在VB5.0中,用MicrosoftJet数据库引擎和数据访问对象DAO(DataAccessObject)可以创建功能强大的客户/服务器应用程序。对远程数据库的访问是开发这类应用程序的关键环节,本文将介绍在VB5.0中用DAO通过MiscrosoftJet数据库引擎访问远程数据库的方法。 ----用DAO访问远程数据库大体上可以通过三步来实现,即数据连接、数据处理和断...
----在VB5.0中,用MicrosoftJet数据库引擎和数据访问对象DAO(DataAccessObject)可以创建功能强大的客户/服务器应用程序。对远程数据库的访问是开发这类应用程序的关键环节,本文将介绍在VB5.0中用DAO通过MiscrosoftJet数据库引擎访问远程数据库的方法。 ----用DAO访问远程数据库大体上可以通过三步来实现,即数据连接、数据处理和断...
标签: ASP
在基于微软IIS/PWS的网络平台上,通过服务器端运行的ASP程序来访问后台数据库,是一种最常见的模式了。而对于小型的数据库应用需求,微软的Access数据库,应该是与ASP程序配套使用的首选。由于Access数据库的ODBC驱动程序支持的SQL指令全,执行效率高,所以Access后台数据库+ASP服务器端程序+客户端IE浏览器,是一个精练实用高效的组合模式...
标签: SQLServer
摘 要 : 本文讨论了Visual Basic应用程序访问SQL Server数据库的几种常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法性能和优缺点。 一、引言 SQL Server是微软推出的中小型网络数据库系统,是目前最常用的数据库系统之一。随着SQL Server网络数据库应用程序日益增...
标签: Java JAVA基础
  <%@page import="java.sql.*" import ="java.util.*" import ="java.io.*" contentType="text/html; charset=gb2312" % <html <head <title使用MYsql数据库</title <meta name="GENERATOR" content="Microsoft FrontPage 4.0" <meta name=&...

经验教程

403

收藏

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