简单数据库问题请教

ron_xin 2009-09-01 07:34:21


'票价库
Set DPMDBF_DataBase = OpenDatabase(SP_Path & "JC", 0, 0, "foxpro 2.5")
Set RsDBF = DPMDBF_DataBase.OpenRecordset("select * from PJK")

SelSQL = "SELECT VoyagePrices.*, Ports.PortName AS EndPortName" _
& " FROM VoyagePrices INNER JOIN Ports ON VoyagePrices.EndPortId = Ports.PortId" _
& " Where Year(VoyageDate)=" & Year(Now) & " And Month(VoyageDate) = " & Month(Now) & " And Day(VoyageDate) = " & Day(Now)
Set RsC = New ADODB.Recordset
RsC.CursorLocation = adUseClient
RsC.Open SelSQL, CNN, adOpenDynamic, adLockReadOnly
For i = 1 To RsC.RecordCount
'替换港口ID(新售票系统与旧售票系统)
PortID = RsC("EndPortID")
RsPort_Mdb.Filter = "New_PortID='" & PortID & "'"
If Not RsPort_Mdb.EOF Then '这里是一个循环吗?如不是EOF就执行下面的语句,但是没有没看到他如何循环,比如movenext If RsPort_Mdb("Old_PortID") <> "" Then
PortID = RsPort_Mdb("Old_PortID")
End If
End If
'更新船舶等级即舱位
CBDJ = RsC("CabinID")
RsCBDJ.Filter = "New_CabinID=" & RsC("CabinID")
If Not RsCBDJ.EOF Then
If RsCBDJ("Old_CabinID") <> "" Then
CBDJ = RsCBDJ("Old_CabinID")
End If
End If

RsDBF.AddNew
RsDBF("CBDJ") = CBDJ
RsDBF("ZDM") = PortID
RsDBF("pj1") = RsC("Price")
RsDBF.Update

RsC.MoveNext
Next
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2009-09-02
  • 打赏
  • 举报
回复
是这样的,它打开了 3 个记录集:
RsDBF :Foxpro 库 JC 的 PJK 表
RsPort_Mdb :没有看到代码
RsC :VoyagePrices 和 Ports 表的联合查询,使用客户端游标,可以得到记录数


For i = 1 To RsC.RecordCount 是在 RsC 中遍历,但是,应该在此之前

RsC.MoveLast
RsC.MoveFirst

否则有可能得不到正确的记录数。

'替换港口ID(新售票系统与旧售票系统)
PortID = RsC("EndPortID")
RsPort_Mdb.Filter = "New_PortID='" & PortID & "'"
If Not RsPort_Mdb.EOF Then [color=#FF0000]
'......

上面是利用 RsC 记录中的 EndPortID 对 RsPort_Mdb 的记录进行过滤。如果有符合的记录,则其第一条记录中的 Old_PortID 值替换掉当前 PortID 变量值。

同理,它用 "New_CabinID=" & RsC("CabinID") 给 RsCBDJ 记录集设置过滤器,如果有记录,则用其为 CBDJ 变量赋值。

最后,是在 RsDBF 中添加记录:

RsDBF.AddNew
RsDBF("CBDJ") = CBDJ
RsDBF("ZDM") = PortID
RsDBF("pj1") = RsC("Price")
RsDBF.Update

然后迁移到 RsC 下一条记录。

RsC.MoveNext
Next

不过,我怀疑应该在处理下一条记录时用类似 RsCBDJ.Filter = "" 的方式清除一下过滤器。因为过滤器的条件是会累加的。
jhone99 2009-09-02
  • 打赏
  • 举报
回复
刚打开在first位置,可以不用movefirst,但做过move操作就不可以了
ron_xin 2009-09-02
  • 打赏
  • 举报
回复
to:of123 大哥,
我通篇都没有找到有
RsC.MoveLast
RsC.MoveFirst
贝隆 2009-09-01
  • 打赏
  • 举报
回复
这只是一个判断语句
clear_zero 2009-09-01
  • 打赏
  • 举报
回复
这不是一个循环,而是看看你filer是否有结果,如果有eof=true否则就是false
ron_xin 2009-09-01
  • 打赏
  • 举报
回复
If Not RsPort_Mdb.EOF Then
'这里是一个循环吗?如不是EOF就执行下面的语句,但是没有没看到他如何循环,比如movenext
If RsPort_Mdb("Old_PortID") <> "" Then
PortID = RsPort_Mdb("Old_PortID")
End If
End If
所有需求全部来自生产实际,源自生产,贴近实战,提高技能。 生产案例生产库A是一台2012年的数据库服务器,存储是戴尔sc8000数据量有20T。数据库版本是11.2.0.3,该数据库是单实例数据库。使用操作系统目录存储,没有使用ASM存储。需要进行数据库服务器和存储迁移。迁移到新服务器和新存储。迁移到新的rac环境,使用本地方式进行升级。 目标:我们需要迁移数据库A到新服务器,新存储。 源库A数据库版本11.2.0.3数据库类型单实例数据存储使用操作系统目录存储,非ASM存储容量20TosRhel6 目标库B数据库版本19.19数据库类型Rac数据存储ASM容量21TOsRhel7 难点。1-数据库服务器需要进行替换2-存储需要进行替换3-容量大,存储没有多余空间,只能才有原地升级方式4-版本跨度大,需要从11203->11204->1919单实例->1919-pdb-rac. 具体步骤1-源服务器数据库命令行创建11203数据库软件2-源服务器数据库命令行创建11203数据库实例3-在目标服务器克隆源库11.2.0.3数据软件。并且在目标服务器搭建源库的dg库。4-开始真正的割接,割接的时候没有业务的。激活11203dg为主库。5-升级11203到112046-升级11204到19.197-配置19.19单实例数据库为rac数据库中的某个pdb。Over. 针对以前学员提出文档不全的意见,其实文档都是有的,都已经上传到百度网盘。这次实战课程整理文档如下:0-创建源库11203单实例1-通过克隆方式在目标服务器rac上面创建11203数据库软件2-在目标库rac数据库上面创建11203的单实例的dg3-目标库rac安装11204单实例软件和升级11203到112044-11204升级到19c数据库

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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