[發明專利]VB快速訪問SQL數據庫的方法在審
| 申請號: | 201310594905.1 | 申請日: | 2013-11-25 |
| 公開(公告)號: | CN103646047A | 公開(公告)日: | 2014-03-19 |
| 發明(設計)人: | 劉雨 | 申請(專利權)人: | 大連海聯自動控制有限公司 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 116000 遼寧*** | 國省代碼: | 遼寧;21 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | vb 快速 訪問 sql 數據庫 方法 | ||
1.由于ODBC?API函數的入口參數表中有些參數需要傳遞指針,而VB不支持指針,因此在VB中調用ODBC?API函數受到一定限制;VB的字符串內存存儲格式與C語言不同,而ODBC?API函數是用C語言開發的,這也限制了VB和ODBC?API函數之間的數據交換;作者對ODBC?API函數進行了分析,綜合VB的特點,編寫一個動態鏈接庫,在動態鏈接庫的支持下可直接在VB中調用ODBC?API函數,并能進行數據交換;
VC++6.0開發動態鏈接庫
VC++6.0可開發三種類型的動態鏈接庫:Win32?DLL、常規MFC?DLL、擴展MFC?DLL;
擴展MFC?DLL支持C++接口;
換言之,DLL能夠導出整個類,客戶能夠建立這些類或由其派生的類的對象;Win32DLL、常規MFC?DLL可被任意Win32編程環境(包括Visual?Basic?6.0版)加載使用;常規MFC?DLL在發行時必須附帶MFC42.DLL庫,而Win32DLL可單獨發行;如果只提供給VB編程環境使用,可建立Win32?DLL即可;
建立Win32?DLL
利用VC++6.0編程環境的AppWizard創建一個簡單Win32?DLL工程,工程名為VBSQL,在此基礎上加入自己的代碼;代碼如下:
#include“stdafx.h”
#include<string.h>
#define?DLLEXPORT?extern“C”_declspec(dllexport)//定義導出宏
BOOL?APIENTRY?DllMain(HANDLE?hModule,DWORD?ul_reason_for_call,
LPVOID?lpReserved)
{????switch(ul_reason_for_call)
?????{
case?DLL_PROCESS_ATTACH:
case?DLL_THREAD_ATTACH:
case?DLL_THREAD_DETACH:
case?DLL_PROCESS_DETACH:
break;
}
?????return?TURE;
}
DLLEXPORT?long_stdcall?GetAddress(void*Address)//按地址傳送
{??return(long)Address};//將地址強制轉換為長整形
DLLEXPORT?long_stdcall?strCopyToByte(char*BytesAddress,?char*strAddress)
{
???return(long)strcpy(BytesAddress,?strAddress)
};//將字符串傳送到指定地址
經編譯鏈接生成VBSQLDLL動態鏈接庫,將其拷貝到C:/WINDOWS/SYSTEM目錄下,這樣就可在VB中調用;利用Microsoft?Visual?Studio?6.0?工具軟件Depends查看VBSQLDLL中導出的函數名;
VB中聲明外部函數
在模塊文件中作如下聲明:
VBSQL.DLL函數聲明:
Public?Declare?GetAddress?Lib“VBSQL.DLL”?Alias?“_GetAddress@4”?(ByRefAddress?as?Any)?as?Long
Public?Declare?strCopyToByte?Lib“VBSQL.DLL”?Alias?“_strCopyToByte@8”?(ByRefByte?ArrayAdd?ress?as?Any)?as?Long
參考sql.h,sqltypes.h頭文件中常量和函數聲明,將其內容轉為VB聲明格式;
由于ODBCAPI函數和常數較多,在此不能一一列舉;
類型標識常量:
Public?Const?SQL_IS_POINTER=(-4)
Public?Const?SQL_IS_UINTEGER=(-5)
SQL數據類型常量
Public?Const?SQL_CHAR=1
Public?Const?SQL_FLOAT=6
SQL?C類型常量
Public?Const?SQL_C_CHAR=SQL_CHAR
Public?Const?SQL_C_FLOAT=SQL_REAL
函數聲明
Public?Declare?Function?SQLSetStrntAttr?Lib“odbe32.dll”
(ByVal?StatementHandle?As?Long,?ByVal?Attributes?As?Long,?ByVal?ValuePtr?As?Long.?ByVal?StringLength?As?Long)As?Integer
Public?Declare?Function?SQLBindParame?Lib“odbe32.dll”
(ByVal?StatementHandle?As?Long,?ByVal?ParameterNumber?As?Integer,?ByVal?Inputoutput?Type?As?Integer,?ByVal?ValueType?As?Integer,?ByVal?ParameterNumber?As?Integer,?ByVal?ColumnSize?As?Long,?ByVal?DecimalDigits?As?Integer,?ByRef?Parameter?ValuePtr?As?Any,?ByVal?BufferLength?As?Long,?ByRef?StrLen_or_IndPtr?As?Any)As?Intrger
Public?Declare?Function?SQLExecDirect?Lib?“odbc32.dll”(ByVal?StatementHandle?As?Long,?ByVal?StatementText?As?String,?ByVal?TextLength?As?long)As?Long
Public?Declare?Function?SQLEXecute?Lib?“odbc32.dll”(ByVal?StatementHandle?As?long)As?Long
其中ByVal關鍵詞后的變量按值傳送,ByRef關鍵詞后的變量按地址傳送;
VB調用外部函數
聲明之后,在VB中可像調用其他VB函數一樣調用這些函數;注意ODBC?API函數的參數表中某些變量是一個VOID類型指針,通過標識常量進行標識;如:
SQLSetStmtAttr函數的第三個參數(SQLPOINTER?Value)他即可以傳遞數值也可以傳遞地址,通過第四個參數(SQLINTEGER?StringLength)進行標識,在VB中為(ValuePtr?As?Long);
傳遞數值:Call?SQLSetStmtAttr(語句句柄,屬性,屬性值,SQL_IS_UINTEGER)
傳遞地址:Call?SQLSetStmtAttr(語句句柄,屬性,GetAddress(變量),0)?GetAddress取地址按如上規則,在VB中直接調用ODBC?API函數。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于大連海聯自動控制有限公司,未經大連海聯自動控制有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310594905.1/1.html,轉載請聲明來源鉆瓜專利網。





