如何获得Datawindows递交时的详细sql语句?(高手请进!)

zwk 2002-05-08 11:26:36
Datawndows在递交时通过生成SQL语句传递给后端数据库,如何获得Datawindows递交时的详细sql语句??
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
powerbu 2002-05-09
  • 打赏
  • 举报
回复
llitcwl(中国龙)

有劳把uf_write2file()也帖出来。
llitcwl 2002-05-09
  • 打赏
  • 举报
回复
使用sqlpreview,看一段代码吧
//====================================================================
// [PUBLIC] Event sqlpreview 在 uo_datawindow inherited from datawindow
//--------------------------------------------------------------------
// 说明:取出SQL进行登记日志
//--------------------------------------------------------------------
// 参数1:[value] sqlpreviewfunction request
// 说明:
// 参数2:[value] sqlpreviewtype sqltype
// 说明:SQL语句类型
// 参数3:[value] string sqlsyntax
// 说明:SQL语句
// 参数4:[value] dwbuffer buffer
// 说明:
// 参数5:[value] long row
// 说明:
//--------------------------------------------------------------------
// 返回: (LONG)
//--------------------------------------------------------------------
// 作者: cwl 日期: 2001.03.13
//====================================================================

if ii_sql_bebug<>0 then //不操作
if ii_sql_bebug=1 then //不监视SELECT语句
if sqltype=PreviewSelect! then

else
// messagebox('',sqlsyntax)
uf_write2file( sqlca, sqlsyntax, sqlca.userid, '','sqllog.txt')
end if
elseif ii_sql_bebug=2 then //全部监视
uf_write2file( sqlca, sqlsyntax, sqlca.userid, '','sqllog.txt')
end if
end if
billxia 2002-05-09
  • 打赏
  • 举报
回复
原来你是要日志监视啊。。。

数据窗口的 pbm_dwnsql 事件中的参数 sqlsyntax 就是你要的东西了

你去数据窗口增加一个 pbm_dwnsql 事件 (系统自己有的),然后什么都不用作就可以了
billxia 2002-05-09
  • 打赏
  • 举报
回复
原来你是要日志监视啊。。。

数据窗口的 pbm_dwnsql 事件中的参数 sqlsyntax 就是你要的东西了

你的这样的东西会非常的消耗资源和硬盘的哦
圣殿骑士18 2002-05-09
  • 打赏
  • 举报
回复
问题解决啦!真是功夫不负有心人。
就是定义sqlca的时候
SQLCA.DBParm = "ConnectString='DSN=fdmis2000;UID=DBA;PWD=sql',DisableBind=1,StaticBind=0"

加上DisableBind=1,StaticBind=0,
然后在sqlpreview事件里就不会有?出现了!
llitcwl 2002-05-09
  • 打赏
  • 举报
回复
//====================================================================
// [PUBLIC] Function uf_write2file in uo_datawindow inherited from datawindow
//--------------------------------------------------------------------
// 说明:生成系统日志(支持数据库错误和SQL语句日志)
//--------------------------------------------------------------------
// [value] transaction as_sqlca
// 说明:
// [value] string as_sqltext_error
// 说明:错误信息或SQL语句
// [value] string as_userid
// 说明:用户名
// [value] string as_appname
// 说明:应用名
// [value] string as_file
// 说明:日志名后部分SQL为SQL日志,ERR为错误日志
//--------------------------------------------------------------------
// 返回: (INTEGER) 无意义
//--------------------------------------------------------------------
// 作者: cwl 日期: 2001.1.10
//====================================================================
//变更日志:010506 改进为按用户建立分别的调试信息日志
Long Ll_FileNo
String Ls_ErrorText
nvo_shell32 luo_shell
//改进为按用户建立分别的调试信息日志
Ll_FileNo = FileOpen (luo_shell.uf_getusername( )+as_file , LineMode! , Write! , Shared! , Append!)
if mid(as_file,1,3)='sql' then
Ls_ErrorText = uf_GetErrorText (sqlca , as_sqltext_error , as_userid , '')
else
Ls_ErrorText = uf_GetErrorText (sqlca , as_sqltext_error , as_userid , as_appname)
end if

FileWrite (Ll_FileNo , Ls_ErrorText)

FileClose (Ll_FileNo)

Return 1
billxia 2002-05-09
  • 打赏
  • 举报
回复
查询的时候

7.0 8.0 都可以用 GetSQLSelect 函数
唯一的问题:
数据窗口的sql语句有两种格式
一种是我们平时用的sql语句
另一种不是

区别在于,创建数据窗口的时候,如果用pb自己创建就会得到被pb改造过的sql语句
如果用直接写sql语句的形式,就可以得到我们平时用的sql语句

不过,如果你自己写一个翻译系统,就无所谓了

更新之类的语句就不用取出来了吧

又:你是不是在作通用查询啊??

我的通用查询就是用这种方式用的
在用户的条件输入结束后,把得到的东西重建为条件,然后动态填入数据窗口的sql语句中,形成where语句,然后执行读数据,在把读来的数据填入客户看到的数据窗口中

怎么又有一份?

你如果实在想知道pb给了sql什么东西,你可以用 mssql 啊,打开跟踪系统,可以得到每一个语句啊

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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