Blast's Security Lab
22 Jun 2010
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 '收尾
这样一个简单的测试用户名、密码是否匹配的程序就做好了(虽然也浪费了我不少时间……)。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。