在PowerBuild函数中使用SQL语言在线教程
有时我们需要在程序中直接使用SQL语言直接操作数据库, 如读、写一条记录甚至多条记录,下面介绍一种方法,即在PowerBuild函数中使用嵌入式SQL语言:
目的:在一个列表框中显示数据库中数据表中特定列的内容。
函数参数设计:数据库表名,列名,事务名,列表框标志位,列表框名 。
应用程序详细设计:
1. 建立名为a_sqltest的应用对象放在sqltest库中
2. 创建窗口对象,名称及其控件属性如表1所示
表1. 窗口对象属性
对象/控件 属性 值
windows name
titlebar
type w-sql-test
“嵌入式sql函数演示”
main
singlelineedit name
auto hscroll
name
auto hscroll sle-table-name
true
sle-column-name
true
listbox name
vscroll bar
hscroll bar lb-data
true
true
checkbox name
text
checked cbx-list
“显示内容清除标记”
true
comamnd
button name
text cb-show
“显示"
static text name
text
name
text sle-1
“数据库表名"
sle-2
“数据库列名"
3. 建立上述窗口函数,名称及其属性如下表2所示,参数分别表示数据库表名、列名、事务名及反映显示列表框是否在检索数据前清除上一次显示内容,函数返回所读取记录的总行数。
表2. 嵌入式SQL函数属性
属性 值 数据类型
name w-sql-test
returns long
argument as-table-name string
argument as-column-name string
argument at-trans transaction
argument ab-data-clear boolean
argument alb-list-name listbox
4. 把下列脚本写入函数,一般情况下SQL语句只可以从数据库中检索一条记录,但当需要一次读取多条记录时,就需要使用数据库游标。利用游标建立一个SQL语句的结果集(游标打开时发生),然后利用Fetch命令一次从结果集中取得一行数据。本函数基于参数传过来的数据库表名/列名建立一个Select语句,并声明一个游标,读取多行数据。在Fetch命令中,把数据库行数据放入变量ls-column中,注意在该命令中应在变量前加“:”以表明是变量而非列名。接着使用列表框函数Additem()把取到的行数据放入框中。循环执行直至事务对象的SQLcode指示有错误发生(取得所有数据)。最后关闭游标并把取到的行数返回给调用者。
Long ll-rows-number
String ls-column-name, ls-select
//给字符串赋值,用于确定检索的数据库表及其列名
ls-select = "Select " + as-column-name + " From " + as-table-name
//声明一个数据库动态游标,存放检索的结果集
DECLARE lc-cur DYNAMIC CURSOR FOR SQLSA;
divPARE SQLSA FROM :ls-select;
//如果列表框标志位为真则清空列表框
If Ab-data-clear Then Alb-lis-name.Reset()
//打开动态游标一次取一行数据
OPEN DYNAMIC lc-cur;
//获得第一行并把数据赋与字符串
Fetch lc-cur Into : ls-column-name;
//连续读取结果集中数据直到结束,并把数据加入到列表框中
Do While at-trans.SQLCode = 0
ll_rows-number ++
Alb-list-name.AddItem (ls-column-name )
Fetch lc-cur Into : ls-column-name;
Loop
//关闭动态游标
Close lc-cur;
Return ll-rows-number
5. 关闭并保存上述函数,在窗口“检索”按钮的clicked事件中写入下列脚本来调用上述函数。
Long ll-all-rows
ll-all-rows = Wf-sql-test(sle-table-name.Text, &
sle-column-name.Text, SQLCA , cbx-list.checked ,lb-data)
6. 关闭并保存窗口,在应用对象中的Open事件中写入脚本以便打开上述窗口。Open (W-SQL-TEST)
7. 存储应用对象, 然后运行程序。