PwrDev完全支持PowerBasic的语法,但是帮助少,很多东西都不好像VB一样看一眼就写出来,在昨天的数据库学习毫无进步的情况下,我开始来试着使用PwrDev来查询数据库,其实与VB并无大异,只是有一些语法改变了。废话不多说~开工。

本文来自www.sacour.cn 转载注明本行

首先,VB到PB的语法有这么些转换(淡黄背景为改变部分):

Visual Basic Power Basic (PwrDev)
Dim Var As Object
Set Var=CreateObject("Name of the object to be called")
Dim Var As Dispatch
Set Var = New Dispatch In "Name of the object to be called"
Var.Member = Value
Var2 = Var.Member2
Var3 = Var.Member3 (Arg1, Arg2, ... , ArgN)
Object Get Var.member[.member.] [([[paramname =] param1 [, ...]])] TO ResultVar
Object Let Var.member[.member.] [([[paramname =] param1 [, ...]])] = ValueVar
Object Set Var.member[.member.] [([[paramname =] param1 [, ...]])] = ValueVar
Object Call Var.member[.member.] [([[paramname =] param1 [, ...]])] [TO ResultVar]
Object RaiseEvent [Var.]member[([[paramname =] param1 [, ...]])]
Var4=Text1.Text Var2=VD_GetText(hwnd, nCtrlId)
Text1.Text=Var4 VD_Text(hwnd, nCtrlID, Var2)
Set Var=Nothing Set Var=Nothing

然后我们就可以直接开工了,(如果不是太了解可以参考:VB笔记:数据库的读取和修改(使用ADO Data Control)),其实与VB大部分类似,建立两个Label、两个TextBox(Text1,用户名、Text2,密码)、一个CommandButton,代码如下:

    Local oRec            As Dispatch
    Local vProvider       As Variant
    Local vSQL            As Variant  
    Local vEOF            As Variant     
    Local sInfo           As String  '定义变量部分

    vProvider  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\数据库练习\db1.mdb;Persist Security Info=False"
  '建立连接字符(ConnectionString),注意可以使用PwrDev菜单栏的“Extra ---> ADO connectionstringbuilder”来建立
    vSQL = "SELECT * FROM T_USER where (username='" & VD_GetText(nCbHndl,%ID_FORM1_TEXT1) & _
           "') and (userpass='" & VD_GetText(nCbHndl,%ID_FORM1_TEXT2) & "')"
  '查询语句,注意这儿的VD_GetText,PwrDev帮助手册说明是:
  'Function VD_GetText( ByVal hWnd As Long, ByVal nCtrlId As Long ) As String 
  'hWnd  :  [in] Form handle.   (窗体句柄)
  'nCtrlId : [in] Control id or 0 for using the window.  (控件ID,如果是0则使用窗体)
 
 'hWnd一般使用nCbHndl(当前窗体句柄)、nCtrlID构造方法为: %ID_窗体名_控件名,如窗体名为FRM1,控件名为CTRL5,则nCTRLID为%ID_FRM1_CTRL5。

    Set oRec = New Dispatch In "ADODB.Recordset"  '建立新对象
    Object Call oRec.Open(vSql,vProvider)   '执行查询语句
    Object Get oRec.Eof To vEOF  '在没有MoveNext的情况下,把oRec.Eof给一个变量,用于检查是否一上来就是EOF(结束标记,即没查到匹配数据)
    If IsTrue Variant#(vEOF) Then sInfo="Failed" Else sInfo="OK"  '注意vEOF是变体型,需要用Variant#将其转为长整型,再用IsTrue判断是否为真(变量类型严格要求的)
    MsgBox sInfo  '弹出结果
    Object Call oRec.Close  '关闭数据库的连接
    Set oRec = Nothing '收尾
 

这样一个简单的测试用户名、密码是否匹配的程序就做好了(虽然也浪费了我不少时间……)。