100分跪求数据复制问题!!!

ziyebingyu 2006-11-03 12:34:27
将数据从oracle复制到access数据库,通过pb同时连接这两个数据库。不是将全部数据一下子复制过去,而是针对任何一个表都可以通过操作将数据复制。请教高手有什么方案,代码如何?
...全文
483 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
山林73 2006-11-13
  • 打赏
  • 举报
回复
只是中间变量,用完就没有了,这里代码需要自己加入错误检测处理,
datawindow, datastore都可以的
动态:指没有指定.dataobject
有些说法只是对于人的理解,并不是什么专业名词
ziyebingyu 2006-11-09
  • 打赏
  • 举报
回复
请问山林:1、为什么new_syntax被两次赋值,那后面一个赋值不就把前一个覆盖了吗?
2、动态数据窗口,是不是就是指:对于一个数据窗口控件,里面没有数据窗口对象,用动态数据窗口的方法可以在运行的时候在这个控件里面添加对象,比如把一个表的字段和数据添加进去吗?
3、建立配置表是什么意思?我对这个概念是一种糨糊的状态。
4、目标表又是什么呢?
5、今年刚进入软件行业,问了很多若智问题,谢谢大家关照!
ice1001 2006-11-08
  • 打赏
  • 举报
回复
你得知道 系统表的结构,然后用取出里面的用户表,针对每一个用户表,在目的数据库中创建相应的表格后,用datawindow取出源表的数据,然后写入目的表.

就是这个思路.楼主好好看看系统表.

青锋-SS 2006-11-08
  • 打赏
  • 举报
回复
你得知道oracle系统表的结构,然后用游标/datawindow/datastore取出里面的用户表,针对每一个用户表,在目的数据库中创建相应的表格后,用datawindow取出源表的数据,然后写入目的表.
陈义源 2006-11-08
  • 打赏
  • 举报
回复
一个简单的办法:
oracle的表名都存在pbcattbl中。这样就好做了。

建立两个连接sqlca_oracle,sqlca_access
做一个数据窗dw_1,sql语法为
select pbt_tnam from pbcattbl
where pbt_ownr <> 'SYS'
dw_1.settransobject(sqlca);
dw_1.retrieve();

//然后对dw_1循环判断
long i;
string table_name
for i = 1 to dw_1.rowcount()
table_name = dw_1.getitemstring(i,'pbt_tnam');
select *
into :table_name
from :table_name
using sqlca_access;
next
SIRIUS_ORA 2006-11-08
  • 打赏
  • 举报
回复
在ORACLE中直接用“COPY”命令就可以
COPY {FROM database | TO database | FROM database TO database}
{APPEND|CREATE|INSERT|REPLACE} destination_table
[(column, column, column, ...)] USING query
山林73 2006-11-08
  • 打赏
  • 举报
回复
dw_src.SetTransObject(SQLCA_src); dw_src.Retrieve()
dw_obj.SetTransObject(SQLCA_obj); dw_obj.Retrieve()
山林73 2006-11-08
  • 打赏
  • 举报
回复
建立配置表(主表):dwconf
id,srctable,srcsql,objtable,objsql
目标表主键列号子表:
objkeys
id,colnum

srcsql是数据源select sql语句,objsql是目标select sql语句
objsql是目标表的列
srcsql返回列数目和类型要和目标完全一致
如:
objsql
select a,b,c from objt
srcsql:可以组合查询
select to_char(a),'aa'||b,rownum from srct

用动态dw

先初始化两个连接事务对象:
sqlca_src, sqlca_obj

//需要加错误处理
new_syntax = sqlca_src.SyntaxFromSQL(new_sql, 'Style(Type=Grid)', error_syntaxfromSQL)
dw_src.Create(new_syntax, error_create)

new_syntax = sqlca_obj.SyntaxFromSQL(new_sql, 'Style(Type=Grid)', error_syntaxfromSQL)
dw_obj.Create(new_syntax, error_create)

dw_obj.Modify("DataWindow.Table.UpdateTable='"+objtable+"'")
....设置更新属性使目标可更新

dw_src.SetTransObject(SQLCA); dw_src.Retrieve()
dw_obj.SetTransObject(SQLCA); dw_obj.Retrieve()

...dw_obj删除旧记录?
if dw_src.rowcount()>0 then dw_obj.object.data.current = dw_src.object.data.current
dw_obj.update()


raozhiven 2006-11-08
  • 打赏
  • 举报
回复
1、Pipeline
2、DataWindow.RowsCopy
ziyebingyu 2006-11-08
  • 打赏
  • 举报
回复
我想在pb里面写:
string ls_sql,ls_111
ls_111=trim(sle_1.text)
ls_sql='create table ":ls_111" (as select * from :ls_111)'
execute immediate :ls_sql using tr_2;
ls_111是我在pb前台输入的表名,
ls_sql='create table ":ls_111" (as select * from :ls_111)'一句中后一个ls_111是oracle里面的某个表名,前一个ls_111是access中自动建立的表,根据表名把数据通过这一句复制到access,但是这一句不完整,没有表明出前面一个ls_111就是access里新建的后一个是从oracle过来的。应该怎么表示这一句呢?
ziyebingyu 2006-11-06
  • 打赏
  • 举报
回复
lovelihp能不能再说详细点?给你分给定了!
ziyebingyu 2006-11-06
  • 打赏
  • 举报
回复
对了,就像SS说的那样,oracle里面也有个系统表。好 ,就按SS说的那样做了 。但是,怎么做呢?
ziyebingyu 2006-11-06
  • 打赏
  • 举报
回复
按照lovelihp的说法,retrieve里面的参数应该怎么设置呢?我可能每次只复制一张表,用什么做参数呢?还有setitem(..,..,..)里面应该怎么设置全部数据呢?
yuan1023 2006-11-03
  • 打赏
  • 举报
回复
表不多的话建数据管道,执行的时候动态设置where条件.
表多的话用动态sql,参数分别为 表名 和条件,
insert into :oracle_table (select * from access_table where ... using tr_access) using tr_oracle ;
青锋-SS 2006-11-03
  • 打赏
  • 举报
回复
没用过Oracle,在SQL Server中有些系统表记录了数据库中所有的表的内容,可以用系统表中取出所有的用户表,根据他们的结构在access中建立相应的表,然后动态创建datastore/datawindow(也可以用游标,不过比较慢),取出oracle中的数据,再写入到access中.希望对你能有所帮助.
ziyebingyu 2006-11-03
  • 打赏
  • 举报
回复
我已经同时连接好oracle和access了,请问读出oracle再写入access应该怎么操作呢,代码怎么写呢?我每次需要读出的是不同的表啊。
ziyebingyu 2006-11-03
  • 打赏
  • 举报
回复
我已经同时连接好oracle和access了,请问读出oracle再写如access应该怎么操作呢,代码怎么写呢?我每次读入的是不同的表啊。
青锋-SS 2006-11-03
  • 打赏
  • 举报
回复
再创建一个transaction对象,和SQLCA一起,分别连接Oracle与Access,然后读出oracle的数据,再写入access中.
jdsnhan 2006-11-03
  • 打赏
  • 举报
回复
设置oracle与access通讯,然后insert into select
lovelihp 2006-11-03
  • 打赏
  • 举报
回复
读取代码:
dw_source.settransobject(tr_ora) //链接到ORACLE
dw_source.retrieve(..)
复制代码:
作循环进行赋值
dw_target.settransobject(tr_access)

for i=1 to dw_source.rowcount()
dw_Target.setitem()
.
.
next
dw_target.update()
加载更多回复(8)

1,109

社区成员

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

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