如何将查询出结果的数据窗口,另存为另一个名称的数据窗口!
如何将查询出结果的数据窗口,另存为另一个名称的数据窗口!谢谢! 用sharedata(dw)?? smallanntse 发表于 2024-11-11 09:07用sharedata(dw)??
这个不行,我是把把查询出来结果(数据窗口),另外 保存为一个 新的名称 的数据窗口。可能查询了多次结果,多个结果保存为 多个新数据窗口,方便后面直接调用这些新的数据窗口 GetFullState()和SetFullState()或者SaveAs->PSR和DataObject=PSR swimchen 发表于 2024-11-15 00:24
GetFullState()和SetFullState()或者SaveAs->PSR和DataObject=PSR
谢谢:handshake 声明一个datawindow动态数组,根据查询结果,随时动态赋值就OK了!
运行时 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]