关于PB selectblob 问题

xiaoping04408 2010-10-20 01:28:19
要取到一个表的文件格式、但是由于表名不确定(都是历史表名)
表字段确定的情况下,如何利用动态selectblob 取出二进制文件呢?
SELECTBLOB BBZD_GS INTO :MyBlob
FROM LCBBZD
WHERE BBZD_BH = :ls_bh AND
BBZD_DATE = :ls_date
USING trans_temp;

以上是表名固定的情下,我是这样取的。
关键是表名不固定,但要取的表字段是一样的,不知如何写??
请高人指点...
...全文
547 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yao85 2012-08-23
  • 打赏
  • 举报
回复
一个比较简单,而且不费时的方法就是创建一个中间视图,而不是创建表,这种方案应该更方便
fengemail8 2010-10-21
  • 打赏
  • 举报
回复
PB里有例子的,怎么读取BLOB数据
lingdove 2010-10-21
  • 打赏
  • 举报
回复
要用到中间表的,建立一个中间临时表,这个表的结构你知道。
在SELECT 的时候,先把要SELECT出来的BLOB用动态语句转到临时表里面去(Insert Into),再从临时表里取数据。
UPDATE和INSERT的时候一样,要先把数据弄到这个临时表去,然后再从这个表里面UPDATE目标表(动态语句)
zlf19810306 2010-10-21
  • 打赏
  • 举报
回复
利用动态sql语句就可以了,在帮助里写得很清楚了,直接就可以套用
hchjjun 2010-10-21
  • 打赏
  • 举报
回复
动态sql,条件传递过去不就可以了
xiaobn_cn 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wag_enu 的回复:]
blob型的字段好像不能用在动态SQL 中...
[/Quote]

汗,偶测试了下,报错了。看来真不能这么用,偶这里无解了。
wag_enu 2010-10-20
  • 打赏
  • 举报
回复
假设你知道该表名,只是不确定它是否存在.
在mssql 中可以查阅sysobjects(惭愧,没用过其它的DB)系统表来确定它是否存在,如果存在再selectblob;

假你根本不知道表名,那你最好还是清理一下数据库再程序...
wag_enu 2010-10-20
  • 打赏
  • 举报
回复
blob型的字段好像不能用在动态SQL 中...
xiaoping04408 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiaobn_cn 的回复:]
不知道你用的是什么数据库,我觉得这条SQL有问题:
ls_sql = "SELECT BBZD_GS FROM LCBBZD WHERE BBZD_BH = '" + ls_bh + "' AND BBZD_DATE = '" + ls_date + "'"

BBZD_DATE是日期型的,和一个字符串进行相等判断,会产生错误的。
[/Quote]
我存的都是string类型的。保证没有问题,在查询分析器里能执行的。
xiaobn_cn 2010-10-20
  • 打赏
  • 举报
回复
不知道你用的是什么数据库,我觉得这条SQL有问题:
ls_sql = "SELECT BBZD_GS FROM LCBBZD WHERE BBZD_BH = '" + ls_bh + "' AND BBZD_DATE = '" + ls_date + "'"

BBZD_DATE是日期型的,和一个字符串进行相等判断,会产生错误的。
xiaobn_cn 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiaoping04408 的回复:]
//我取不出来、已经测试、环境PB9 + sqlserver2000
[/Quote]

自已调试一下,查一下每一步后的SQLCA的返回值,找下出错原因吧。
xiaoping04408 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xys_777 的回复:]
以下代码测试证明,可行

// Profile yurong_web
SQLCA.DBMS = "SNC SQL Native Client(OLE DB)"
SQLCA.LogPass ="000000"
SQLCA.ServerName = "localhost"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm ……
[/Quote]


//
debugbreak()
blob Emp_id_var

string ls_sql
ls_sql = "SELECT BBZD_GS FROM LCBBZD WHERE BBZD_BH = '" + ls_bh + "' AND BBZD_DATE = '" + ls_date + "'"
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA;

PREPARE SQLSA FROM :ls_sql using sqlca;

OPEN DYNAMIC my_cursor ;

FETCH my_cursor INTO :Emp_id_var ;
messagebox(string(Emp_id_var),"s")

CLOSE my_cursor ;
//我取不出来、已经测试、环境PB9 + sqlserver2000
永生天地 2010-10-20
  • 打赏
  • 举报
回复
以下代码测试证明,可行

// Profile yurong_web
SQLCA.DBMS = "SNC SQL Native Client(OLE DB)"
SQLCA.LogPass ="000000"
SQLCA.ServerName = "localhost"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Database='master',Identity='SCOPE_IDENTITY()'"
connect;

blob Emp_id_var

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;

PREPARE SQLSA FROM "SELECT c FROM a where pk in (1,2)" ;

OPEN DYNAMIC my_cursor ;

FETCH my_cursor INTO :Emp_id_var ;

messagebox('',string(Emp_id_var))

FETCH my_cursor INTO :Emp_id_var ;

messagebox('',string(Emp_id_var))

CLOSE my_cursor ;
xiaoping04408 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaobn_cn 的回复:]
报歉,看错需求了,应当是动态SQL的第3中模式,例句如下:
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;

integer Emp_id_var

string Emp_state_var = "MA"

string sqlstatement

sqlstatement = "SELECT emp_id FROM employee "……
[/Quote]

我要查的是一个大二进制文件,这个可以吗?
xiaobn_cn 2010-10-20
  • 打赏
  • 举报
回复
报歉,看错需求了,应当是动态SQL的第3中模式,例句如下:
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;

integer Emp_id_var

string Emp_state_var = "MA"

string sqlstatement

sqlstatement = "SELECT emp_id FROM employee "&

+"WHERE state = ?"

PREPARE SQLSA FROM :sqlstatement ;

OPEN DYNAMIC my_cursor using :Emp_state_var ;

FETCH my_cursor INTO :Emp_id_var ;

CLOSE my_cursor ;
xiaobn_cn 2010-10-20
  • 打赏
  • 举报
回复
参见PB执行动态SQL语句的第2种模式,例句如下:
INT Emp_id_var = 56

PREPARE SQLSA

FROM "DELETE FROM employee WHERE emp_id=?" ;

EXECUTE SQLSA USING :Emp_id_var ;

1,077

社区成员

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

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