cr999 发表于 2024-11-10 22:09:01

如何将查询出结果的数据窗口,另存为另一个名称的数据窗口!

如何将查询出结果的数据窗口,另存为另一个名称的数据窗口!谢谢!

smallanntse 发表于 2024-11-11 09:07:50

用sharedata(dw)??

cr999 发表于 2024-11-11 14:28:30

smallanntse 发表于 2024-11-11 09:07
用sharedata(dw)??

这个不行,我是把把查询出来结果(数据窗口),另外 保存为一个 新的名称 的数据窗口。可能查询了多次结果,多个结果保存为 多个新数据窗口,方便后面直接调用这些新的数据窗口

swimchen 发表于 2024-11-15 00:24:01

GetFullState()和SetFullState()或者SaveAs->PSR和DataObject=PSR

cr999 发表于 2024-11-18 09:14:59

swimchen 发表于 2024-11-15 00:24
GetFullState()和SetFullState()或者SaveAs->PSR和DataObject=PSR

谢谢:handshake

天涯之心 发表于 2025-2-5 10:41:18

声明一个datawindow动态数组,根据查询结果,随时动态赋值就OK了!

pbai 发表于 2026-8-21 16:03:18

运行时 PB 不能直接把查询结果「另存为 PBL 里的新数据窗口对象」(那是设计期功能),但运行期有三种等价做法,都能实现「多次查询的结果保存下来、之后随时调用」:

方案 A:DataStore 数组(推荐,内存中随取随用)


// 适用环境:PB 9+;多次查询结果存为多个 DataStore,之后切换显示
// 前置:窗口实例变量声明 datastore ids_results[](多次点击会累加)
string ls_dept
ls_dept = "SALES"                        // 输入值:查询条件(示例)
datastore lds
long ll_idx
lds = create datastore
lds.DataObject = "d_employee"            // 复用同一个数据窗口对象
lds.SetTransObject(SQLCA)
lds.Retrieve(ls_dept)                  // 带参数查询
ll_idx = UpperBound(ids_results) + 1   // 追加到数组末尾
ids_results = lds
if UpperBound(ids_results) >= 1 then
    dw_1.ShareData(ids_results)       // dw_1 立即显示第 1 份结果
end if
MessageBox("完成", "已保存 " + string(UpperBound(ids_results)) + " 份查询结果")


要点:每次查询 create 一个 DataStore 存进数组,dw_1.ShareData(数组元素) 切换显示的是同一份数据(不复制、省内存);需要独立副本时改用 dw_1.Object.DataWindow.Data = ids_results.Object.DataWindow.Data。

方案 B:另存为 PSR 文件(可跨会话加载)


// 适用环境:PB 9+;把结果落盘,之后用 DataObject 直接加载
dw_1.SaveAs("C:\temp\result_1.psr", PSR!, true)   // 保存结果(含列结构)
dw_2.DataObject = "C:\temp\result_1.psr"          // 新数据窗口指向该 PSR 文件
dw_2.SetTransObject(SQLCA)
dw_2.Retrieve()
MessageBox("完成", "已从 PSR 文件加载 " + string(dw_2.RowCount()) + " 行")


若想把结果存进数据库字段,用 swimchen 老师说的 GetFullState/SetFullState:blob lb_state = dw_1.GetFullState() 存库,恢复时 datastore lds = create datastore + lds.SetFullState(lb_state),再 dw_x.ShareData(lds) 显示即可。

pbai
页: [1]
查看完整版本: 如何将查询出结果的数据窗口,另存为另一个名称的数据窗口!

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com