用api实现数据库的操作!

数据|数据库

其实操作数据库有很多种方式,比如DAO、ADO等。不过这些方式在发布的时候都需要带上一些运行库,少则几兆,多则十几兆。本来很简单的对数据库的操作,发布的时候带上这些库之后,程序有十几兆。笔者在实践中,总结了用API进行操作数据库的方法,对于一些简单的数据库操作还是可以用这种方法实现的。最大的优点就是可以省去运行库的支持。大大的简小安装包的尺寸。

                         崔占民

                     EMAIL:CUIZM@163.COM

首先添加一个模块,方法:菜单->工程->添加模块,代码如下:

Option Explicit

Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer
Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal henv&, phdbc&) As Integer
Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hdbc&, phstmt&) As Integer
Declare Function SQLConnect Lib "odbc32.dll" (ByVal hdbc&, ByVal szDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer
Declare Function SQLColAttributesString Lib "odbc32.dll" Alias "SQLColAttributes" (ByVal hstmt&, ByVal icol%, ByVal fDescType%, ByVal rgbDesc As String, ByVal cbDescMax%, pcbDesc%, pfDesc&) As Integer
Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hdbc&) As Integer
Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal hstmt&, ByVal szSqlStr$, ByVal cbSqlStr&) As Integer
Declare Function SQLFetch Lib "odbc32.dll" (ByVal hstmt&) As Integer
Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hdbc&) As Integer
Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal henv&) As Integer
Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&, ByVal fOption%) As Integer
Declare Function SQLGetData Lib "odbc32.dll" (ByVal hstmt&, ByVal icol%, ByVal fCType%, ByVal rgbValue As String, ByVal cbValueMax&, pcbValue&) As Integer
Declare Function SQLSetData Lib "odbc32.dll" (ByVal hstmt&, ByVal icol%, ByVal fCType%, ByVal rgbValue As String, ByVal cbValueMax&, pcbValue&) As Integer
Declare Function SQLNumResultCols Lib "odbc32.dll" (ByVal hstmt&, pccol%) As Integer
Declare Function SQLNumResultRols Lib "odbc32.dll" (ByVal hstmt&, pcRol%) As Long

Global Const SQL_C_CHAR As Long = 1
Global Const SQL_COLUMN_LABEL As Long = 18
Global Const SQL_DROP As Long = 1
Global Const SQL_ERROR As Long = -1
Global Const SQL_NO_DATA_FOUND As Long = 100
Global Const SQL_SUCCESS As Long = 0

Public rc As Long '注释:ODBC函数的返回码
Public henv As Long '注释:ODBC环境句柄
Public hdbc As Long

添加一个MSFLEXGRID控件,用来显示从数据库中查询出来的数据,代码如下:

Option Explicit

Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_Load()
rc = SQLAllocEnv(henv)
If rc <> 0 Then
MsgBox "无法初始化ODBC"
End
End If

rc = SQLAllocConnect(henv, hdbc)
If rc <> 0 Then
MsgBox "无法获得连接句柄"
rc = SQLFreeEnv(henv)
End
End If

Dim DSN As String, UID As String, PWD As String

DSN = "Powersoft Demo DB V6"
UID = "dba"
PWD = "sql"
rc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD, Len(UID))

If rc = SQL_ERROR Then
MsgBox "无法建立与ODBC数据源的连接"
Unload Me
End If
End Sub

Private Sub cmdQuery_Click()
On Error Resume Next
Dim hstmt As Long
Dim SQLstmt As String
Dim RSCols As Integer, RSRows As Long
Dim i As Integer, j As Integer
Dim ColVal As String * 1024
Dim ColValLen As Long, ColLabLen As Integer, larg As Long

Grid1.Redraw = False

rc = SQLAllocStmt(hdbc, hstmt)
If rc <> SQL_SUCCESS Then
MsgBox "无法获得SQL语句句柄"
Exit Sub
End If

SQLstmt = "SELECT * FROM exam_xref_info"
rc = SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
If rc <> SQL_SUCCESS Then
MsgBox "SQL语句执行失败"
Exit Sub
End If

rc = SQLNumResultCols(hstmt, RSCols)
If RSCols > 1 Then
Grid1.Cols = RSCols
Grid1.Rows = 10
Grid1.Row = 0
Else
Exit Sub
End If

For i = 1 To RSCols
rc = SQLColAttributesString(hstmt, i, SQL_COLUMN_LABEL, ColVal, 255, ColLabLen, larg)
Grid1.Col = i
Grid1.Text = Left(ColVal, ColLabLen)
Next i

Do Until SQLFetch(hstmt) = SQL_NO_DATA_FOUND
ColVal = String$(1024, 0)

If Grid1.Row + 1 >= Grid1.Rows Then
Grid1.Rows = Grid1.Rows + 1
End If

Grid1.Row = Grid1.Row + 1

For i = 1 To RSCols
rc = SQLGetData(hstmt, i, SQL_C_CHAR, ColVal, Len(ColVal), ColValLen)
Grid1.Col = i
Grid1.Text = Left$(ColVal, ColValLen)
Next i
Loop

rc = SQLFreeStmt(hstmt, SQL_DROP)
Grid1.Redraw = True
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim rc As Integer

If hdbc <> 0 Then
rc = SQLDisconnect(hdbc)
End If

rc = SQLFreeConnect(hdbc)
If henv <> 0 Then
rc = SQLFreeEnv(henv)
End If
End Sub

  实现的时候,将程序中的ODBC名称及用户名与密码改成相应的就可以了。

时间: 2024-09-11 03:08:54

用api实现数据库的操作!的相关文章

windows-关于Win32 API和数据库

问题描述 关于Win32 API和数据库 请问有没有办法,类似于Socket那样,当数据库有新的一行结果的时候,这边客户端不新建立查询可以获取到呢? 解决方案 使用数据库,但又不想通过查询来获取更新?这样不好吧!如果一定要,那只能在服务器有新结果的时候,将新的数据以 Socket 协议数据发送给客户端.但这样做,肯定是不好的. 解决方案二: 其实一般数据表显示都是在插入数据库数据时更新一下数据源 解决方案三: 具体的操作没做过 做过类似的通过数据库处理方式1:在数据库里建立作业,轮询数据库发生的

linux开发平台下对数据库进行操作

问题描述 linux开发平台下对数据库进行操作 本人小白,跪求大神指点如何对数据库进行操作?以及如何实现对数据库的优化 解决方案 1.显示数据库 show databases; 2.选择数据库 use 数据库名; 3.显示数据库中的表 show tables; 4.显示数据表的结构 describe 表名; 5.显示表中记录 SELECT * FROM 表名 6.建库 create databse 库名; 7.建表 复制代码 create table 表名 (字段设定列表): mysql> cr

Java 8 Streams中的数据库CRUD操作

接触一个新工具的时候,刚开始要克服的最大障碍就是如何让你自己先尝试做出一个小东西来.现在你也许对 Java 8 中新的 Stream API 的运作方式在理解上比较自信,但你也许并没用它来进行过数据库查询操作.为了帮助你开始使用 Stream API 来对 SQL 数据库进行创建.修改和读取操作, 我已经在这个快速开始的教程中把它们整合到了一起.希望它能帮助你提升对流式API的使用水平! 背景 Speedment 是一个开放源代码的工具集,它可以被用来生成 Java 实体,并且能将我们同数据库的

java 数据库-java服务器端的对数据库的操作

问题描述 java服务器端的对数据库的操作 今天看了一个web项目,前段页面的 增 删 改 查,功能,我在java服务器端没有看看aql语句,以前我写的方式里面都要写SQL语句.是不是有一种技术可以对SQL语句进行封装还是,有一种框架可以达到这种效果.求解惑. 解决方案 面向对象的语言Java对象与关系型数据库之间的映射关系称为ORM(Object Relationship Mapping). ORM框架实现目前有hibernate.ibatis.mybatis等,它们都极大地简化了Java项目

EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射

原文:EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射 I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First 默认会在本地的SQL Expression数据库中建立一个和DbContext的子类的全名相同的数据库,全名指的是命名空间加上类名: 表映射:Code First 默认会按照类型名复数建立数据

(初学者)eclipse编写java 对数据库的操作问题,不知道问题出在哪里,无法入库

问题描述 (初学者)eclipse编写java 对数据库的操作问题,不知道问题出在哪里,无法入库 代码如下:QueryRunner queryRunner = new QueryRunner(); String sql = ""delete from customers where id = ?""; Connection connection = null; try { connection = JDBCTools.getConnection(); System.

一个对数据库进行操作的程序(之一)

程序|数据|数据库 又抄又改,终于弄出了一个能对数据库进行操作的程序,也算小有所成,鼓励下自已吧......没错,就是盗版! 主要包括以下几个功能页面: db.func:连结数据库的两个函数放在里边了 createtable.php:创建表的页面 input.htm:输入数据的表单 insert.php:表单后台程序 show.php:分页显示的页面 chaxun.php:按ID查询的一个页面 printf.php:修改页面 delete.php:删除一条记录的程序 写到这里先,再复习补充...

用C#对DBF数据库的操作

数据|数据库     现在大部分C#连接数据库都会是sql server .但对一些旧的数据库文件的连接和操作就不太熟了.      今天就有这个问题,要对FOXPRO生成的DBF文件数据库进行操作.      我在CSDN上查了很久,大部分有问题都没很好地回复到这些操作上的问题.      经过我的实验,用ODBC来连接它就可以了.      下面是所用的代码.      都很简单,就是格式上要注意.和用开的查询语句会有很大不同.protected void Page_Load(object

ASP数据库简单操作教程

教程|数据|数据库 ASP数据库简单操作教程 <1 >.数据库连接(用来单独编制连接文件conn.asp) < % Set conn = Server.CreateObject("ADODB.Connection") conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bbs\db1\user.mdb") % >