两个关联表的数据怎样更新到另外一个表?

xm137 2003-08-22 12:38:49
各位大侠:
两个关联表的数据怎样更新到另外一个表?应该怎么样编写代码?
...全文
339 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
eminena 2003-10-04
  • 打赏
  • 举报
回复
实现PB数据窗口的多表更新
PowerBuilder的数据窗口对象是其特有的智能对象﹐其封装性好﹑功能强大﹑表现形式丰富多样﹐为此﹐许多MIS开发人员对PowerBuilder推崇备至﹐将其视为首选开发工具。
一般情况下﹐一个数据窗口只能更新一个数据库表﹐但在MIS开发过程中﹐我们经常遇到这种情况﹕一个数据窗口中由两个或更多个数据库表作为数据源﹐并需要对其进行录入或修改﹐如何给出多表更新的通用解决方案就成为MIS开发人员不容回避的问题。笔者在某管理信息系统的开发过程中﹐尝试了几种双表更新的解决方法﹐选出一种比较好的方案﹐以飨读者。
一﹑具体步骤
1. 在数据窗口建立时﹐选择SQL Select﹐显示风格可以是Tabular﹑Grid或FreeForm中的任一种。选出两表需要录入或修改的列﹐其中两表的主键和非空列必须选中﹐确定选择条件﹐建立连接关系。
2. 在选单“Rows/Update”中选择第一个表的全部数据项为可更新项。
3. 把两表需要修改项的Tab Order数值改为非0值﹐使其在数据窗口中成为可修改项。
为了使方案具有通用性﹐建立全局函数f─update─2table﹐有五个参数﹕dw─obj﹑table1﹑table2﹑key1﹑key2﹐分别代表所要更新的数据窗口﹑两表表名和两表主键列名﹐其中dw─obj为DataWindow类型﹐其余四参数均为String类型。该函数返回值为Boolean型﹐返回True表示成功﹐返回False表示失败。
二﹑函数思路
1. 先针对第一个数据库表调用Update函数更新。注意参数的使用﹕第一个参数作用是控制数据窗口更新前是否强制性调用AcceptText()﹐在数据窗口更新前通过有效性验证﹔第二个参数是控制更新标志的复位﹐为True时更新标志复位﹐为False时更新标志不复位。
2. 更改数据窗口的UpdateTable属性﹐使其指向第二个表﹐并把第一个表的各数据项Update属性和主键列的Key属性改为No﹐接着把第二个表的各数据项Update属性和主键列的Key属性改为Yes。
3. 调用Update函数更新第二个表。
4. 两表更新成功后﹐把两表的列属性﹑主键属性改回到初始状态﹐以便为下一次的两表更新调用做好准备。
三﹑程序清单
// ColName﹕数据窗口列名
// Name1[],Name2[]﹕两数据库表选中项列名
// n1,n2﹕两数据库表选中项数量
// i﹕循环计数器
// Columns﹕数据窗口总列数
String ColName,Name1[],Name2[]
Integer Columns,i,n1=0,n2=0
//下面程序﹕找出dw─obj的两表列名赋给Name1[],Name2[]
Columns=Integer(dw─obj.Describe(〞DataWindow.Column.Count〞))
FOR i=1 TO columns
ColName=Upper(dw─obj.Describe(〞#〞+String(i)+〞.Name〞))
IF Left(ColName,Len(Table1))=Table1 and ColName〈〉Key1 THEN
n1=n1+1
Name1[n1]=ColName
END IF
IF Left(ColName,Len(Table2))=Table2 and ColName〈〉Key2 THEN
n2=n2+1
Name2[n2]=ColName
END IF
NEXT
// 下面程序﹕存储dw─obj﹐确定返回值〔True﹕成功﹐False﹕失败〕
IF dw_obj.Update(True,False)=1 THEN
FOR i=1 TO n1
dw─obj.Modify(Name1[i]+〞.Update=No〞)
NEXT
dw─obj.Modify(Key1+〞.Key=No〞)
dw─obj.Modify(〞DataWindow.Table.Update
Table=′ 〞+Table2+〞 ′ 〞)
FOR i=1 TO n2
dw─obj.Modify(Name2[i]+〞.Update=Yes〞)
NEXT
dw─obj.Modify(Key2+〞.Key=Yes〞)
IF dw─obj.Update()=1 THEN
Commit;
FOR i=1 TO n1
dw─obj.Modify(Name1[i]+〞.Update=Yes〞)
NEXT
dw─obj.Modify(Key1+〞.Key=Yes〞)
dw─obj.Modify(〞DataWindow.Table.UpdateTable=′ 〞+Table1+〞 ′ 〞)
FOR i=1 TO n2
dw─obj.Modify(Name2[i]+〞.Update=No〞)
NEXT
dw─obj.Modify(Key2+〞.Key=No〞)
return True
ELSE
Rollback;
return False
END IF
ELSE
Rollback;
return False
END IF
四﹑调用方法
假设窗口名为w─update﹐数据窗口为dw─1﹐数据库表名和主键名分别为t1﹑t2﹑k1﹑k2﹐放置“存盘”按钮﹐按钮Clicked事件的Script语句如下﹕
dw_1.AcceptText()
IF dw─1.ModifiedCount()〉0 or dw_1.DeletedCount()〉0 THEN
IF MessageBox(〞提示信息〞,〞是否存盘﹖〞,Question!,YesNo!)=1 THEN
IF f─update─2table(dw─1,〞t1〞,〞t2〞,〞k1〞,〞k2〞) THEN
Commit;
ELSE
Rollback;
END IF
END IF
END IF
综上所述﹐可以看出﹐该方案具有很好的可扩展性﹐稍加修改即可解决多表作为数据源的数据窗口的同步更新问题。
20011521 2003-08-23
  • 打赏
  • 举报
回复
对少一个分号
不过也不一定要用INSERT
可以用数据窗口

for i=1 to dw_2.rowcount()
ll_row=dw_2.insertrow(0)
dw_2.setitem(ll_row,"examnameid",ls_user)
dw_2.setitem(ll_row,"qustionid",eaxmtcnr_phid)
dw_2.setitem(ll_row,"answerpt",eaxmtcnr_daan)
next
if dw_2.update()=1 then
commit;
else
rollback;
end if
klbt 2003-08-22
  • 打赏
  • 举报
回复
请把表结构描述一下。
xm137 2003-08-22
  • 打赏
  • 举报
回复
有没有代码给我参考一下?先谢了!
xingxing 2003-08-22
  • 打赏
  • 举报
回复
直接从表中读出数据,然后insert到新表就可以了。
rogery 2003-08-22
  • 打赏
  • 举报
回复
上面话在execute中执行没什么问题,只需要最后加一个分号。

在程序代友中是不是还有其它的内容
xm137 2003-08-22
  • 打赏
  • 举报
回复
错误提示!
error c0031:syntax error
blackcorbie 2003-08-22
  • 打赏
  • 举报
回复
insert into table(a,b,c)
value(:a,:b,:c)
where .....;
你写的sql语句value在哪儿呢?看看sql语句的正确书写!
prain2003 2003-08-22
  • 打赏
  • 举报
回复
把错误提示贴出来看看,否则只能乱猜
xm137 2003-08-22
  • 打赏
  • 举报
回复
这样也报错!
insert into material_output_copy
(material_output.product_number,
material_output.in_date,
material_output.quantity,
material_output.po,
material_output.material_number,
material_output.unit_dosage,
material_output.bad_rate,
material_output.actual_dosage)
SELECT product_input.product_number,
product_input.in_date,
product_input.quantity,
product_input.po,
bom_input.material_number,
bom_input.unit_dosage,
bom_input.bad_rate,
bom_input.actual_dosage
FROM bom_input,
product_input
WHERE ( bom_input.product_number = product_input.product_number )
xyqiqi 2003-08-22
  • 打赏
  • 举报
回复
你插入到表中三个字段,而你一共选择了七个字段,当然会报错。
xm137 2003-08-22
  • 打赏
  • 举报
回复
大侠们帮我看看哪不对?有错误显示!
insert into material_input
(material_input.quantity,
material_input.Unit_price,
material_input.in_date)
SELECT "product_input"."product_number",
"product_input"."in_date",
"product_input"."quantity",
"product_input"."po",
"bom_input"."material_number",
"bom_input"."unit_dosage",
"bom_input"."bad_rate",
"bom_input"."actual_dosage"
FROM "bom_input",
"product_input"
WHERE ( "bom_input"."product_number" = "product_input"."product_number" )
xm137 2003-08-22
  • 打赏
  • 举报
回复
表1:material_input 字段:material_input.material_number,
material_input.quantity,
Product_input.po,
material_input.in_date
"bom_input"."unit_dosage",
"bom_input"."bad_rate"
表2:bom 字段:
"bom_input"."product_number",
"bom_input"."material_number",
"bom_input"."unit_dosage",
"bom_input"."bad_rate"
表3:product_input 字段:Product_input.Product_number,
Product_input.quantity,
Product_input.po,
Product_input.in_date
从表2,表3 更新到 表1
incats 2003-08-22
  • 打赏
  • 举报
回复
insert into t3 (c1, c2, c3) select t1.c1, t2.c2, t2.c3 from t1, t2 where t1.c1 = t2.c1;
runsoft 2003-08-22
  • 打赏
  • 举报
回复
动态修改UPDATE属性,你看看PB带的DATAWINDOW的语法工具,很方便
jdsnhan 2003-08-22
  • 打赏
  • 举报
回复
也可以用dw实现,分别按条件检索出来,填到dw中,更新
92讲视频课+16大项目实战+课件源码  为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。      从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。   本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。  二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。  四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。  五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
MySQL 教程MySQL 是流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。在本教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:1.数据格的形式出现2.每行为各种记录名称3.每列为记录名称所对应的数据域4.许多的行和列组成一张单5.若干的单组成databaseRDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:数据库: 数据库是一些关联的集合。数据数据的矩阵。在一个数据库中的看起来像一个简单的电子格。列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。主键:主键是唯一的。一个数据中只能包含一个主键。你可以使用主键来查询数据。外键:外键用于关联两个。复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。索引:使用索引可快速访问数据中的特定信息。索引是对数据中一列或多列的值进行排序的一种结构。类似于书籍的目录。参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。MySQL 为关系型数据库(Relational Database Management System), 这种所谓的关系型可以理解为格的概念, 一个关系型数据库由一个或数个格组成, 如图所示的一个格: 头(header): 每一列的名称;列(col): 具有相同数据类型的数据的集合;行(row): 每一行用来描述某条记录的具体信息;值(value): 行的具体信息, 每个值必须与该列的数据类型相同;键(key): 键的值在当前列中具有唯一性。MySQL数据库MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 是开源的,目前隶属于 Oracle 旗下产品。MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。MySQL 使用标准的 SQL 数据语言形式。MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。MySQL 对PHP有很好的支持,PHP 是目前流行的 Web 开发语言。MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统文件最大可支持 4GB,64 位系统支持最大的文件为8TB。MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。Redis 教程REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列(list)、集合(sets)和有序集合(sorted sets)等类型。
数据可视化有什么意义?】 举一个身边的例子,我们平时在电视上看到的天气预报,会用不同的色块代不同地区的气温、降水情况。通过观察区域色块分布,我们可以马上了解哪里气温高,哪里雨水多。 这种数形结合的形式,让我们更容易抓住重点信息,比枯燥的文字、简单格更有吸引力。 数据可视化,就是让数据分析的结果以最直观的方式呈现,将“孤独”的数据联系起来,让“单调”的数据生动起来。通过观察可视化图数据之间的关联、变化一目了然。 【“无处不在”的数据分析与可视化】 一图胜千言,数据分析与可视化如今在我们的工作和生活中处处可见,职场中90%以上的岗位都会跟数据打交道。掌握数据分析与可视化技能,可以极大提升工作效率。 【4.5小时极速提升数据能力数据小白也能轻松上手】 Python数据分析与可视化的学习,重在实操,空谈语法毫无意义。 本课程着重讲解数据分析与可视化工具的实操应用,结合实战案例,带你边学边练,重点知识充分理解。 四大案例结合实际场景,帮助你加深记忆,并且在日后的求职面试或毕业设计中,这些案例都可以复用。 【通解数据科学 拓宽收益渠道】 如今,许多行业都有数据方向的人才需求。 掌握数据分析与可视化技能,你就可以: 【适用人群】 【三重权益】
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据数据解析:将请求下来的数据进行过滤,提取我们想要的数据数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑

1,079

社区成员

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

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