
-->Am 11:11 的相册 <-- -->Am 11:11 的网上硬盘<--
第17节 PureBasic ODBC DEMO
;/////////////////////////////////////////////////////;
;// Amlinger
;// 2008 02 29
;//描述: 使用动态库中的函数注册ODBC连接
;// 也适用于SQL等数据库ODBC注册
;//目标: 了解 SQLConfigDataSource 函数的使用方法
;//备注: 演示部分和上一节内容是相同的,只是注册方法有所不同.
;// 二者可以任选一种来实现即可
;//
;// 本来这几篇很早就开始起稿了,之所以到现在才迟迟发布
;// 是因为,家有喜事--我遇见了一个很心宜的MM.
;// 最近一直在为见面的事情作准备 所以程序中很多BUG
;// 今天为止才修正完毕
;// 另一个原因是因为长期在电脑旁坐姿不正确,引起肩周炎
;// 所以,无耐又休息了几次.今天状态好一点,所以把最后的东
;// 补上来.
;/////////////////////////////////////////////////////
;// 数据库部分的应用,就到此一段落,对这部分有兴趣的
;// 朋友自行查阅相关资料吧.
;// 关于SQL语言的资料,BLOG先前的日志里是有的.
;// 大家可以自行查询.
;//
;// .下一节...暂时先告一段落.好好休息一段时间了.
;// 本例中相关数据库在
;// http://bcbfans.ys168.com/ PureBasic 目录下可以下载
;以下部分代码摘抄
;调用API来注册 本地数据库为ODBC项目
;来自MSDN中的调用
; SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)",
; "DSN=New Excel Data Source\0"
; "Deion=New Excel Data Source\0"
; "FileType=Excel\0"
; "DataDirectory=C:\\EXCELDIR\0"
; "MaxScanRows=20\0");
;下面调用ODBCCP32.DLL动态库中的 SQLConfigDataSource 函数
;用来在 注册表 注册 ODBC 项目.
Procedure.l MakeConnection(Driver.s, strAttributes.s)
;打开动态库
LibHandle = OpenLibrary(#PB_Any , "ODBCCP32.DLL")
;判断是否加载库成功
If LibHandle
;分配内存空间,用于设置连接属生
MyMemory = AllocateMemory(Len(strAttributes))
CopyMemory(@strAttributes, MyMemory, Len(strAttributes))
;将所有的; 分号 以 NULL 代替
For L = 1 To Len(strAttributes)
If PeekB(MyMemory + L - 1) = Asc(";")
PokeB(MyMemory + L - 1, 0)
EndIf
Next L
;调用SQLConfigDataSource设置ODBC连接
Result=Call(LibHandle, "SQLConfigDataSource", 0, 1, Driver, MyMemory)
;释放 参数缓冲区
FreeMemory(MyMemory)
;关闭库调用
CloseLibrary(LibHandle)
;判断调用是否成功
If Result
ProcedureReturn 1
EndIf
EndIf
EndProcedure
;//////////////////////////////////////////////////////////////
;Config 部分
;注册ODBC连接
MAccessDriver$="Microsoft Access Driver (*.mdb)"
;描述
ODBCDesc$="测试"
;DSN名称
ODBDSNName$="test"
;数据路径
ODBCDataName$=GetCurrentDirectory()+"wbz.mdb"
;用户名
ODBCUseName$=""
;用户密码
ODBCPWD$=""
;ODBC此项服务描述
;//////////////////////////////////////////////////////////////
;//将配置拼接成一段
OdbcOption$="Deion="+ODBCDesc$+";"
;ODBC DSN名称
OdbcOption$=OdbcOption$+"DSN=" + ODBDSNName$ + ";"
;ACCESS文件路径
OdbcOption$=OdbcOption$+"DBQ="+ ODBCDataName$ +";"
;ACCESS访问 用户名
OdbcOption$=OdbcOption$+"UID=" + ODBCUseName$ +";"
;Access 访问口令
OdbcOption$=OdbcOption$+"PWD=" + ODBCPWD$ +";"
;信息写入注册表 ODBC 项
;Debug OdbcOption$
;Debug MAccessDriver$
result = MakeConnection(MAccessDriver$,OdbcOption$)
;Debug result
;////////////////////////////////////////////////////////////////////////
;下面是测试代码
;////////////////////////////////////////////////////////////////////////
;判断当前系统中的ODBC是否符合本程序正常运行最低标准
If Not UseODBCDatabase()
MessageRequester("错误", "不能初始化ODBC环境,请检查ODBC版本是否低于3.0")
End
EndIf
OpenConsole()
Debug ODBDSNName$
Debug ODBCUseName$
Debug ODBCPWD$
;打开 ODBC list 库名 list-->指向 *.mdb 文件
Result=OpenDatabase(#PB_Any,ODBDSNName$,ODBCUseName$,ODBCPWD$)
;也可以利用 IsDatabase 函数来检测是否为有效数据库
If Not IsDatabase(Result)
Debug DatabaseError();
End
EndIf
;获取wbx表中所有字段 这里 使用TOP 关键字,只取所有记录的前10条
If DatabaseQuery(Result, "SELECT top 10 * FROM wbx")
;利用 DatabaseColumns 获取 字段名 总数
For J=0 To DatabaseColumns(Result)-1
;输入字段名
Print(DatabaseColumnName(Result,j))
If j<>DatabaseColumns(Result)-1
Print(",")
EndIf
Next J
PrintN("")
;记录下移一行
While NextDatabaseRow(Result) ; Loop for each records
For i=0 To DatabaseColumns(Result)-1
;Print(Str(FirstDatabaseRow(Result)))
datatype=DatabaseColumnType(Result,i)
Select datatype
Case 1:;l 输出long类型
Print(Str(GetDatabaseLong(Result,i)))
Case 2:;s 输出String类型
Print(GetDatabaseString(Result,i))
Case 3:;f 输出Float类型
Print(Str(GetDatabaseFloat(Result,i)))
Case 4:;d 输出Double类型
Print(Str(GetDatabaseDouble(Result,i)))
Case 5:;q 输出Quad类型
Print(Str(GetDatabaseQuad(Result,i)))
EndSelect
If i<>DatabaseColumns(Result)-1
Print(",")
EndIf
Next i
PrintN("")
Wend
EndIf ;
;关闭库
CloseDatabase(Result)
Input()
CloseConsole()
; IDE Options = PureBasic 4.10 (Windows - x86)
; CursorPosition = 21
; Folding = --
- 上一篇:第16节 PureBasic注册表访问
- 下一篇:获取系统进程




