请高人指教,pb中不用datawindow控件能否直接访问数据库中的表实施查询啊?

kernel_nj 2008-07-03 08:37:30
我的想法如下:
建立一个ASA数据库cursor
在这个数据库中建表student,在表中设置列属性为(id,nm,bir)它们的类型分别为(integer,varchar,data)
然后定义主键为id,用insert student(id,nm,bir) values(11111,'小李','1990-11-10')
插入初始记录成功.
最后在PB中创建数据源cour,然后再配置DB Profile为cour_pro.
在应用程序目标的open事件中定义open(w_1)
在w_1窗口的open事件中定义连接数据库的脚本为:
// Profile cour_pro
SQLCA.DBMS = "TRACE ODBC"
SQLCA.AutoCommit = True
SQLCA.DBParm = "ConnectString='DSN=cour;UID=dba;PWD=sql',MsgTerse='Yes'"
在命令按钮控件的clicked事件中输入
string Stringvar, Sqlstatement

integer Intvar

Sqlstatement = "SELECT id FROM student"

PREPARE SQLSA FROM :Sqlstatement ;

DESCRIBE SQLSA INTO SQLDA ;

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;

OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;
FETCH my_cursor USING DESCRIPTOR SQLDA ;


CHOOSE CASE SQLDA.OutParmType[1]

CASE TypeString!

Stringvar = GetDynamicString(SQLDA, 1)

CASE TypeInteger!

Intvar = GetDynamicNumber(SQLDA, 1)

END CHOOSE

CLOSE my_cursor ;
结果就在OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA 这里出错了
是不是不能用这种方式访问数据表啊?
...全文
109 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kernel_nj 2008-07-04
  • 打赏
  • 举报
回复
我只会设置断点,就是在打开游标那里卡住了.
AFIC 2008-07-04
  • 打赏
  • 举报
回复
不回避就学如何DEBUG,肯定可以解决。
kernel_nj 2008-07-04
  • 打赏
  • 举报
回复
楼上说的是.可是遇到问题总不能回避啊!
xiaotubie 2008-07-04
  • 打赏
  • 举报
回复
首先,在PB里完全可以sql对数据库的东东进行进行各种操作,不光PB,任何语言都一样。
但是,这样就失去PB快速开发数据库应用的一大利器-数据窗口带给你的快速和高效,特别是复杂的操作,为了便于调试需要数据能在界面上显示,这远比在debug窗口里看变量或者不停地用messagebox强得多。
象楼主的上样的代码,一是比较晦涩,二是不够简捷,如果用数据窗口,不过是循环嵌套加几次检索就完成了,也便于他人的阅读
程序调试完成了,你大可把数据窗口隐藏起来
kernel_nj 2008-07-04
  • 打赏
  • 举报
回复
我知道用continnue一直到出现问题的代码那里啊.可是怎么打开游标的代码本身是完全正确的
AFIC 2008-07-04
  • 打赏
  • 举报
回复
好,足够了,设置断点
找到全局变量SQLCA
一直盯住SQLERRTEXT,
一下一下按下一步。
kernel_nj 2008-07-03
  • 打赏
  • 举报
回复
:Sqlstatement 这个不是参数的入口么?我都晕了!
kernel_nj 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 SKY_4K_PPM 的回复:]
Sqlstatement = "SELECT id FROM student"
你没有定义参数入口,你能打开SQLDA?
没有变量你用SQLDA,做什么?
没有参数动态SQL用
EXECUTE IMMEDIATE yoursqlstatement;
[/Quote]
请问老大,如何定义参数入口?
kernel_nj 2008-07-03
  • 打赏
  • 举报
回复
楼上的,如果把命令按钮控件的clicked事件中的输入改为:
int m,n
string mysql, str
mysql=mle_1.text //读取查询语句
lb_1.reset( ) //重置lb_1
DECLARE mycur DYNAMIC CURSOR FOR sqlsa;
PREPARE sqlsa FROM :mysql USING sqlca;
DESCRIBE sqlsa INTO sqlda;
OPEN DYNAMIC mycur USING DESCRIPTOR sqlda;

FETCH mycur USING DESCRIPTOR sqlda;
m=sqlda.numoutputs //获取输出参数的个数,即Select中列的个数
DO WHILE sqlca.sqlcode=0 //测试查询是否成功
str="" //将查询结果变为一个串
FOR n=1 to m //处理所有的输出参数
CHOOSE case sqlda.outparmtype[n] //判断每个输出参数的类型
CASE typeinteger!,typedecimal! , TypeDouble!
//输出参数为Integer、decimal、Double型
str=str+string(sqlda.getdynamicnumber(n))+" "
CASE typestring! //输出参数为string型
str=str+trim(sqlda.getdynamicstring(n))+" "
CASE typedate! //输出参数为Date型
str=str+string(sqlda.getdynamicdate(n))+ " "
END CHOOSE
NEXT
lb_1.additem(str) //显示查询结果
FETCH mycur USING DESCRIPTOR sqlda;
//处理下一条记录
LOOP
CLOSE mycur; //关闭游标
为什么在OPEN DYNAMIC mycur USING DESCRIPTOR sqlda;这里仍然出现applycation terminated
error:database command has not been sucessfully prepared at line 8 in clicked event of object cb_1 of w_1
SKY_4K_PPM 2008-07-03
  • 打赏
  • 举报
回复
Sqlstatement = "SELECT id FROM student"
你没有定义参数入口,你能打开SQLDA?
没有变量你用SQLDA,做什么?
没有参数动态SQL用
EXECUTE IMMEDIATE yoursqlstatement;
ribut9225 2008-07-03
  • 打赏
  • 举报
回复
一、利用DataStore
二、动态创建
三、检索数据

DataStore ldt_aa
ldt_aa = Create DataStore
string ls_sql,ls_syn,ls_err

ls_sql = "SELECT id FROM student"
//生成语法
ls_syn = SQLCA.SyntaxFromSQL(ls_sql,'Style(Type=grid)',ls_err)

if len(ls_err)>0 then
messagebox("提示","创建语法失败")
return
end if

ldt_aa.Create(ls_syn,ls_err)
if len(ls_err)>0 then
messagebox("提示","创建datastore失败")
return
end if

//设置事务并检索数据
ldt_aa.setTransObject(SQLCA);
ldt_aa.retrieve()
commit;

//读取数据操作
.........

//用完DataStore后消毁
destroy ldt_aa
编程夜猫 2008-07-03
  • 打赏
  • 举报
回复
干嘛这么麻烦,直接
select into变量
jlwei888 2008-07-03
  • 打赏
  • 举报
回复
SQLCA.DBMS = "TRACE ODBC"
SQLCA.AutoCommit = True
SQLCA.DBParm = "ConnectString='DSN=cour;UID=dba;PWD=sql',MsgTerse='Yes'"

connect;

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧