pb 如何把dw1(来自客户表)中的数据保存在另一个表中(客户表2)

如题所述

这个数据对于表2,是新增的还是更新的?
如果是新增的,可以再界面创建一个隐藏的数据窗口dw_2,或者datastore。
dw_2和dw_1两者的查询字段要求是一样的。
然后通过rowscopy,把dw_1的数据都复制到dw_2或者datastore中去,然后保存dw_2或者datastore。
如果是有更新的数据,那么只有使用for循环逐行的对dw_1的数据进行读取,然后使用insert或者Update语句来进行对表2的保存。追问

我是新建了一个表,表2的字段与dw1检索出来显示的字段都一样 ,用sharedata可以把dw1的数据显示在dw2中,但是无法保存在建的表2中,代码如下,请大侠帮忙
dw_1.settransobject(sqlca)
dw_1.retrieve(sj)
tab_1.tabpage_1.dw_1.sharedata(tab_1.tabpage_1.dw_2)
tab_1.tabpage_1.dw_2.accepttext()
commit;

追答

sharedata是无法保存的,因为二者是数据共享而已。
dw_1才是真正的数据源,而dw_2实际上并没有真正的数据.
这种共享数据的模式,只能保存其中的主数据窗口,而dw_2是没办法保存的。
你还是使用rowscopy在保存的时候,同步dw_2的数据来保存吧,感觉这样会好一些。

追问

我用rowscopy的时候,第一次运行往表2中写数据他就提示
SQLSTATE = 23000[Microsoft][ODBC SQL Server Driver][SQL Server]违反了 PRIMARY KEY 约束 'khid_1'。不能在对象 'dbo.kh1' 中插入重复键。No changes made to database.
INSERT INTO kh1 ( khid, khxm, yhzh, zjsx, xfje ) VALUES ( ?, ?, ?, ?, ? )但是我每次运行的时候都设置表2清空数据的,怎么会有重复的,并且表1的数据是查询出来的distinct数据,应该没有重复

我用rowscopy的时候,第一次运行往表2中写数据他就提示
SQLSTATE = 23000[Microsoft][ODBC SQL Server Driver][SQL Server]违反了 PRIMARY KEY 约束 'khid_1'。不能在对象 'dbo.kh1' 中插入重复键。No changes made to database.
INSERT INTO kh1 ( khid, khxm, yhzh, zjsx, xfje ) VALUES ( ?, ?, ?, ?, ? )但是我每次运行的时候都设置表2清空数据的,怎么会有重复的,并且表1的数据是查询出来的distinct数据,应该没有重复

追答

这是因为表2的里面已经存在了重复的数据,那么真的不建议你使用dw_2.update()这样的方式来保存数据。
还是通过for循环来做吧,因为这个报错很明显数据库里面已经存在了界面上存在的数据了。
rowscopy对于数据窗口,只是新增的,相当于insertrow并且setitem都完成了。是新数据。

你保存的时候,使用for循环来手动做吧。虽然会慢一些,但是这样更稳妥而且安全。
对于每一行,使用主键到表2去查询一下,如果存在,使用Update的语句,不存在,使用Insert的语句。

还有,你说的,每次运行的时候都置空表2的数据,是指你每次保存,都保证表2是空表么?那么应该不会有问题的。是不是你没有commit事务呢?

温馨提示:内容为网友见解,仅供参考
无其他回答

pb 如何把dw1(来自客户表)中的数据保存在另一个表中(客户表2)
如果是有更新的数据,那么只有使用for循环逐行的对dw_1的数据进行读取,然后使用insert或者Update语句来进行对表2的保存。

如何在pb中,把一条记录从同一个数据库的一个表复制到另外一个表呢?
用insert select 语句也可以,PB还有更另类好用的方法,我常用到就是的将数据窗口导出成文本文件,再从另一个数据窗口导入,然后commit一下就行

pb怎么保存数据窗口中添加的数据,保存到数据库表中!请给详细的思路!和...
①首先要在窗口的open事件中写如下一句.dw_1.settransobject(sqlca)\/\/譬如您要保存的数据窗口名字为dw_1;这计划的意义在于时刻保持与数据窗口月数据库表的连接. 亦或者双击Dw_1对象。选择 constructor事件 写下以上语句即可.②然后在数据窗口中修改 或者添加数据.随后创建一个按钮或者事件 都行.用于...

PB中两个数据窗口中的数据相关联,一一对应。
然后,你要左右各选择一行,通过一个按钮【对应】,来实现二者的对应并存储到后台表中,是这个意思么?那就在对应这个按钮的点击事件中写代码就差不多了。比如科目的数据窗口是dw_1,项目的数据窗口是dw_2 对应的点击事件:if dw_1.GetRow() <= 0 then return \/\/dw_1没有选择行 if dw_2.GetR...

java把一个list中的内容添加到另一个list中
在JAVA中,想要把一个list中的内容添加至另一个list中,有两种方法:采用循环的方法。通过循环第一个ArrayList,然后通过每循环一次的方式,将值赋值给另一个ArrayList。具体代码实现如下:2.采用ArrayList自带的addAll()方法。addAll()方法是通过传入整一个List,将此List中的所有元素加入到新的List中,...

pb如何向数据库表中添加内容
1、自己写程序,通过数据窗口时间添加数据的操作。2、通过DB PAINTER来操作,首先PB要通过DB PAINTER连接上数据库。然后选择这个连接,找到表,右键选择edit。打开,找到数据,在rows菜单下找到insert,点击增加一行,填写值,然后rows菜单下的save changes即可以保存。3、建立数据窗口,可以在preview界面添加数据,操作方法同上。只...

在ACCESS数据库中,怎样把一个表的某些字段的某些记录复制到另一个表
可先用数据管道在PB中建立(或导入到)一个数据库,在通过数据窗口保存为你想要的任何格式的文件包括excelString ls_File, ls_Path, ls_ExtInteger li_Valueli_Value = GetFileSaveName ("打印到文件", ls_Path, ls_File, "DOC", &"文本文件; (*.CSV), *.CVS," + &"文本文件Tab (*.TXT), *.TXT...

pb 中在数据窗口增加一条记录,让新增记录与上一条记录内容相同_百度...
选择下一个客户的时候取出来赋值进去,如果客户想改就让他改,只是图个操作方便而已。当然

请问PB如何Grid在一个列中输入数据,其他字段的数据即可自动由其他表关...
你把代码写到itemchanged事件中。比如你输入数据这个字段叫emp_id,然后自动关联取出对应的emp_name,放到界面上。表叫tb_emp。写在itemchanged中。if dwo.name = 'emp_id' then \/\/判断如果修改字段emp_id,触发代码 string ls_empname select emp_name into :ls_empname from tb_emp where emp...

在pb中OpenSheet(W_findbook1,w_main,0,Original!)这句话是什么...
Cascaded! 把一个工作表放在另一个的上面每个都向右下方偏移一点这 样所有工作表的标题栏用户都能看到该值是OpenSheet()函数的 默认选择 Layered! 将工作表显示在客户区的左上角并最大化工作表使其充满 MDI 框架窗口的整个客户区 Original! 操作动作与Cascaded!参数相同只是不放大窗口而以窗口定义 时的...

相似回答