一个关于sybase数据库向sql server数据库转入数据的问题,100分请教(有代码)

peterlanhaijun 2003-12-18 06:14:24
connect using sqlca_1;
connect using sqlca_2;

integer li_count2,li_count1,li_count3
string ls_dwbh1,ls_yhdm2,ls_qymc1,ls_ssxs1,ls_qydz1,ls_jjxz1,ls_jyxkzh1,ls_jyfw1,ls_fzr1,ls_yyzzh1,ls_yzbm1,ls_dhhm1,ls_zzdj1,ls_zzdj_11
integer li_kcsl1,li_hcsl1
datetime ld_fzsj1,ld_yxq_q1,ld_yxq_z1
string ls_clpzh,ls_fdjh,ls_dph,ls_yhdm,ls_cpys,ls_cpys1
boolean lb_continue

DECLARE car CURSOR FOR
SELECT clpzh,cpys,fdjh,dph,yhdm FROM Car using sqlca_2;
//commit using sqlca_2;
open car;
lb_continue = true

DO WHILE lb_continue
FETCH car INTO :ls_clpzh,:ls_cpys,:ls_fdjh,:ls_dph,:ls_yhdm;
ls_cpys1 = left(ls_cpys,2)
if sqlca_2.sqlcode = 0 then
select count(*) into :li_count2 from car where clpzh = :ls_clpzh and cpys = :ls_cpys using sqlca_2;
select count(*) into :li_count1 from clk where clpzh = :ls_clpzh and cpys = :ls_cpys1 using sqlca_1;
if li_count2 = 1 and li_count1 = 1 then
select dwbh into :ls_dwbh1 from clk where clpzh = :ls_clpzh and cpys = :ls_cpys using sqlca_1;
select yhdm into :ls_yhdm2 from car where clpzh = :ls_clpzh and cpys = :ls_cpys using sqlca_2;

select count(*) into :li_count3 from kyqyk where qybh = :ls_dwbh1 using sqlca_1;

if li_count3 = 1 then
select qymc,ssxs,qydz,jjxz,jyxkzh,jyfw,fzr,fzsj,yyzzh,dhhm,yzbm,zzdj,zzdj_1,kcsl,hcsl,yxq_q,yxq_z into
:ls_qymc1,:ls_ssxs1,:ls_qydz1,:ls_jjxz1,:ls_jyxkzh1,:ls_jyfw1,:ls_fzr1,:ld_fzsj1,:ls_yyzzh1,:ls_dhhm1,:ls_yzbm1,:ls_zzdj1,:ls_zzdj_11,:li_kcsl1,:li_hcsl1,:ld_yxq_q1,:ld_yxq_z1 from kyqyk where qybh = :ls_dwbh1 using sqlca_1;
ls_qymc1 = trim(ls_qymc1)
ls_qydz1 = trim(ls_qydz1)
if ls_yhdm2 = '' or isnull(ls_yhdm2) then
INSERT INTO interprise
(yhmc,yhdz,yzbm,ssxs,jjlx,frdb,dhhm,gszzh,jy_jyxkzh,jy_jyfw,jy_hfrq,ky_kczs,hy_hczs,zzdj,yxqqs,cw_yhzh)
VALUES (:ls_qymc1,:ls_qydz1,:ls_yzbm1,:ls_ssxs1,:ls_jjxz1,:ls_fzr1,:ls_dhhm1,:ls_yyzzh1,:ls_jyxkzh1,:ls_jyfw1,:ld_fzsj1,:li_kcsl1,:li_hcsl1,:ls_zzdj1 + :ls_zzdj_11,:ld_yxq_q1,'改变') using sqlca_2;
else
update Interprise set yhmc=:ls_qymc1,yhdz=:ls_qydz1,yzbm=:ls_yzbm1,ssxs=:ls_ssxs1,jjlx=:ls_jjxz1,frdb=:ls_fzr1,dhhm=:ls_dhhm1,gszzh=:ls_yyzzh1,
jy_jyxkzh=:ls_jyxkzh1,jy_jyfw=:ls_jyfw1,jy_hfrq=:ld_fzsj1,ky_kczs=:li_kcsl1,hy_hczs=:li_hcsl1,zzdj=:ls_zzdj1 + :ls_zzdj_11,yxqqs=:ld_yxq_q1,cw_yhzh='改变'
where yhdm = :ls_yhdm2 using sqlca_2;
end if
end if

end if
else
lb_continue = false
end if
LOOP

commit using sqlca_1;
commit using sqlca_2;

运行后发现一条纪录也没有修改成功!
...全文
56 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
peterlanhaijun 2004-01-04
  • 打赏
  • 举报
回复
问题已解决,多谢各位,见者有份,接分
wuzhiqiang2 2003-12-30
  • 打赏
  • 举报
回复
可以用两个事物对象(sqlca) 分别连接两个数据库,再用DATAWINDOW,DATASTORE中的函数复制
CodeMagic 2003-12-27
  • 打赏
  • 举报
回复
提个与错误无关的意见,把
DO WHILE lb_continue
FETCH car INTO :ls_clpzh,:ls_cpys,:ls_fdjh,:ls_dph,:ls_yhdm;
ls_cpys1 = left(ls_cpys,2)
if sqlca_2.sqlcode = 0 then
改为:
Do While True
FETCH car INTO :ls_clpzh,:ls_cpys,:ls_fdjh,:ls_dph,:ls_yhdm;
ls_cpys1 = left(ls_cpys,2)
If sqlca_2.sqlcode <>0 then Exit

//Other Statement

sinkiangscorpio 2003-12-27
  • 打赏
  • 举报
回复
你先写一部分代码进行调试,调试成功再逐步添加代码。
其次就是游标没有关闭。
shaoyangdear 2003-12-23
  • 打赏
  • 举报
回复
老大,这么长的程序要debug跟才行的
看看每次执行sql后sqlca_1,sqlca_2的属性呀,看有没有错误
banalman 2003-12-19
  • 打赏
  • 举报
回复

用dts先导到中间表中来后再到近正式的表中。
klbt 2003-12-18
  • 打赏
  • 举报
回复
同意ldy(罗大佑),dw/ds比较适合,游标副作用较大。
peterlanhaijun 2003-12-18
  • 打赏
  • 举报
回复
我用游标是需要把数据一条一条依次取出来呀,开始我以为应该挺简单的,可怎么也达不到目的
能指出那里有误么?
dotnba 2003-12-18
  • 打赏
  • 举报
回复
为什么用游标
不如用DataStore/dw,这样会比较清晰,也方便
mittee 2003-12-18
  • 打赏
  • 举报
回复
用数据窗口做不更好??

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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