第17节 PureBasic ODBC DEMO

[ 2008-3-3 17:59:00 | By: AmLinger ]

;/////////////////////////////////////////////////////;
;// 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 = --

Re:第17节 PureBasic ODBC DEMO

[ 2008-8-30 14:31:00 | By: z232(游客) ]
怎么不多写点关于 purebasic的教程呢?
希望能多介绍点它的中文资料
个人主页 | 引用 | 返回 | 删除 | 回复

发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:
    正在载入数据,请稍候……