DTS问题,高手进!

cycloneQI 2004-04-19 04:53:32

Access中有一个people表,样例如下:
"people"

Name CardNum
tom 111-475-638
rose 134-762-543
john 872-888-425
mike 568-959-641

Oracle中有三个表,分别为"cd_name","cd_name_value","cde_card_value"(外键关系很简单,一看数据就知).
样例分别如下:
"cd_name"

No Name CardNum
198 175 325
199 176 326
200 177 327

"cd_name_value"
No NameValue
175 Tome
176 Rose
177 John

"cd_card_value"
No CardValue
325 111-475-638
326 134-762-543
327 872-888-425

现在要从Access向oracle 8i导入数据,利用DTS.
要求:

将Access中表people的所有数据导入到oracle中相应的cd_name中,如果表"cd_name_value","cd_card_value"中没有相应的值那么则插入相应的记录.(注意,表cd_name_value,cd_card_value,cd_name的No值均有相应的Sequence维护).

例如:表people中有一条记录Name="mike",CardNum="568-959-641"在cd_name_value,cd_card_value中没有相应的记录.则应向两表中插入相应的记录如下:
"cd_name_value"
No NameValue
175 Tome
176 Rose
177 John
178 mike

"cd_card_value"
No CardValue
325 111-475-638
326 134-762-543
327 872-888-425
328 568-959-641

最后将记录插入到cd_name中如下:
"cd_name"

No Name CardNum
198 175 325
199 176 326
200 177 327
201 178 328


请问高手,这个DTS包应该怎样建,关键是ActiveX中,应该怎样写呢?help~~~~~
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cycloneQI 2004-04-27
  • 打赏
  • 举报
回复
差不多,我是把excel的文件导入到oracle, gliderstar写的不错,我已经解决了这个问题.
起始可以利用转换中的查询函数,我写一个简单的例子:
'**********************************************************************
' Visual Basic 转换脚本
'************************************************************************

' 将各源列复制到目的列
Function Main()
dim strUnitClsCode
strUnitClsCode = DTSLookups("FindUnitCLSByName").Execute("新计量单位")
if strUnitClsCode = "" then
'MsgBox "无此计量类型,插入新的计量类型"
DTSLookups("AddUnitCLS").Execute "10","新计量单位","0"
end if
strUnitClsCode = DTSLookups("FindUnitCLSByName").Execute("新计量单位")
DTSDestination("UnitCLS_CODE") = strUnitClsCode
Main = DTSTransformStat_OK
End Function
chludlf 2004-04-25
  • 打赏
  • 举报
回复
樓主是不是用sql server 把access的數據導入oracle ?
heartthrob 2004-04-25
  • 打赏
  • 举报
回复
mark.
gliderstar 2004-04-21
  • 打赏
  • 举报
回复
例如下面的解法

'**********************************************************************
' Visual Basic 转换脚本
'************************************************************************

' 将各源列复制到目的列
Function Main()
dim myConn
dim myRecordset
dim iRowCount

set myConn = CreateObject("ADODB.Connection")
set myRecordset = CreateObject("ADODB.Recordset")
myConn.Open = "Provider=SQLOLEDB.1;Data Source=(local); Initial Catalog=zrjj_imp_test;user id = 'sa';password='sa' "

mySQLCmdText = "Select 'rowcount'=count(sbh) from tb_xmcyb where sbh = "&DTSSource("SBH")

myRecordset.Open mySQLCmdText, myConn

set Flds = myRecordset.Fields
set iRowCount = Flds("rowcount")

If iRowCount.Value = 0 then
DTSDestination("bsxk") = DTSSource("BSXK")
DTSDestination("bz") = DTSSource("BZ")
DTSDestination("szdw") = DTSSource("SZDW")
DTSDestination("ngzys") = DTSSource("NGZYS")
DTSDestination("xmfg") = DTSSource("XMFG")
DTSDestination("zyjszw") = DTSSource("ZYJSZW")
DTSDestination("zy") = DTSSource("ZY")
DTSDestination("xb") = DTSSource("XB")
DTSDestination("nl") = DTSSource("NL")
DTSDestination("sfzh") = DTSSource("SFZH")
DTSDestination("cyxm") = DTSSource("CYXM")
DTSDestination("xmmc") = DTSSource("CY_XMMC")
DTSDestination("xmbh") = DTSSource("CY_XMBH")
DTSDestination("sbh") = DTSSource("SBH")
Main = DTSTransformStat_OK
Else
Main = DTSTransformStat_SkipInsert
End If
End Function

我用这种方式解决的,通过目的表的主键,同步时查找目的表中是否已经具有相同主键,如果具有,就不插入,否则插入,不过,觉得效能很差。
wxq1142 2004-04-20
  • 打赏
  • 举报
回复
up
solidpanther 2004-04-20
  • 打赏
  • 举报
回复
需要注意的就是插入时候Sequence的.nextval插进去,或者先不插入该值,再update
zjcxc 2004-04-20
  • 打赏
  • 举报
回复
从Access向oracle 8i导入数据

楼主是否应该到 oracle 版去问问?
cycloneQI 2004-04-20
  • 打赏
  • 举报
回复
高手啊,帮忙啊

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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