设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1775|回复: 3
打印 上一主题 下一主题

[其它] 源代码运行出错,请各位大侠赐教

[复制链接]
跳转到指定楼层
1#
发表于 2012-4-9 23:01:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
各位大侠:
在下初学ACCESS,想编一个库房入库的程序。
先介绍以下思路:
1.如果录入信息中有序列号,就直接在库存清单中添加一条新记录。
2.如果录入信息中没有序列号,且无库存寿命,则在库存清单中查找是否有相同的库存物品。如果没有,就添加新纪录。若有则在原有记录上更新数量。
3.如果录入信息中没有序列号,但有库存寿命,则在库存清单中查找是否有具有相同库存寿命的相同物品。如果有的话,就在原有记录上更新数量。若没有,则添加新记录。
源代码的运行结果是:
当输入信息中没有序列号时,程序运行正常。
但输入信息中没有序列号和库存寿命是,程序报错“无效使用 NULL”。
在下也调试过程序,发现问题出在源代码中的拉红的部分,如果把这部分去掉,程序能正常运行。
拉红的部分主要用于查找库存中是否有相同件号的物品。
请各位大侠帮在下看一下问题到底出哪了。
在下不胜感激。

以下是源代码:
Private Sub 保存记录_Click()
On Error GoTo Err_保存记录_Click
Dim rs As DAO.Recordset
Dim fd11, fd12 As String

Set rs = CurrentDb.OpenRecordset("入库登记")

If IsNull(Me.名称) Then
MsgBox ("请输入名称")
End If

If IsNull(Me.件号) Then
MsgBox ("请输入件号")
End If

If IsNull(Me.序列号) Then
MsgBox ("请填写序列号")
End If

If IsNull(Me.数量) Then
MsgBox ("请输入数量")
End If

If IsNull(Me.库房) Then
MsgBox ("请输入库房")
End If

If IsNull(Me.架位) Then
MsgBox ("请输入架位")
End If

If IsNull(Me.入库状态) Then
MsgBox ("请输入入库状态")
End If

If IsNull(Me.类型) Then
MsgBox ("请输入类型")
End If

fd11 = Me.件号
fd11 = Replace(fd11, "-", "")
fd11 = Replace(fd11, "/", "")
fd11 = Replace(fd11, ".", "")
fd11 = UCase$(fd11)
'Me.Text89 = fd11
With rs
    .AddNew
    !入库验收批次号 = Me.入库验收批次号
    !退料单号 = Me.退料单号
    !名称 = Me.名称
    !件号 = Me.件号
    !等同件号 = Me.等同件号
    !替代件号 = Me.替代件号
    !序列号 = Me.序列号
    !数量 = Me.数量
    !货架寿命 = Me.货架寿命
    !库房 = Me.库房
    !架位 = Me.架位
    !适航证编号 = Me.适航证编号
    !履历卡 = Me.履历卡
    !运单号 = Me.运单号
    !采购需求单号 = Me.采购需求单号
    !入库状态 = Me.入库状态
    !订单合同号 = Me.订单合同号
    !类型 = Me.类型
    .Update
    .Close
End With
Set rs = Nothing

Dim rs1 As DAO.Recordset
Dim fd1 As DAO.Field '件号
Dim fd2 As DAO.Field '货架寿命
Dim fd3 As DAO.Field '类型
Dim fd4 As DAO.Field '数量
Dim N As Integer '计数
Dim cond

cond = Me.入库状态
Select Case cond
Case "可用"
Set rs1 = CurrentDb.OpenRecordset("库存清单")
Set fd1 = rs1.Fields("件号")
Set fd2 = rs1.Fields("货架寿命")
Set fd3 = rs1.Fields("类型")
Set fd4 = rs1.Fields("数量")

If Not (Me.序列号 = "N/A") Then
   With rs1
     .AddNew
     !名称 = Me.名称
     !件号 = Me.件号
     !等同件号 = Me.等同件号
     !替代件号 = Me.替代件号
     !序列号 = Me.序列号
     !数量 = Me.数量
     !货架寿命 = Me.货架寿命
     !库房 = Me.库房
     !架位 = Me.架位
     !机型 = Me.类型
     .Update
     .Close
   End With
Set rs1 = Nothing
      
ElseIf (Me.货架寿命 = "N/A") Then
   N = 0
   rs1.MoveFirst
   Do While Not rs1.EOF
   fd12 = fd1
   fd12 = Replace(fd12, "-", "")
   fd12 = Replace(fd12, "/", "")
   fd12 = Replace(fd12, ".", "")
   fd12 = UCase$(fd1)
   If (fd11 = fd12) And (fd3 = Me.类型) Then
   N = N + 1
   End If
   rs1.MoveNext
   Loop
   
   If N = 0 Then
   With rs1
     .AddNew
     !名称 = Me.名称
     !件号 = Me.件号
     !等同件号 = Me.等同件号
     !替代件号 = Me.替代件号
     !序列号 = Me.序列号
     !数量 = Me.数量
     !货架寿命 = Me.货架寿命
     !库房 = Me.库房
     !架位 = Me.架位
     !机型 = Me.类型
     .Update
    ' .Close
   End With
   'Set rs1 = Nothing
   ElseIf N <= 1 Then
   rs1.MoveFirst
   Do While Not rs1.EOF
      If (fd11 = fd12) And (fd3 = Me.类型) Then
      rs1.Edit
      fd4 = fd4 + Me.数量
      rs1.Update
      End If
      rs1.MoveNext
   Loop
   Else: MsgBox "件号重复,请核实!"
   'rs1.Close
   'Set rs1 = Nothing
   End If
   
ElseIf Not (Me.货架寿命 = "N/A") Then
   rs1.MoveFirst
   N = 0
   
   Do While Not rs1.EOF
   fd12 = fd1
   fd12 = Replace(fd12, "-", "")
   fd12 = Replace(fd12, "/", "")
   fd12 = Replace(fd12, ".", "")
   fd12 = UCase$(fd12)
   If (fd11 = fd12) And (Me.类型 = fd3) And (Year(Me.货架寿命) = Year(fd2)) And (Month(Me.货架寿命) = Month(fd2)) And (Day(Me.货架寿命) = Day(fd2)) Then
   N = N + 1
   End If
   rs1.MoveNext
   Loop

   If N = 0 Then
   With rs1
     .AddNew
     !名称 = Me.名称
     !件号 = Me.件号
     !等同件号 = Me.等同件号
     !替代件号 = Me.替代件号
     !序列号 = Me.序列号
     !数量 = Me.数量
     !货架寿命 = Me.货架寿命
     !库房 = Me.库房
     !架位 = Me.架位
     !机型 = Me.类型
     .Update
     .Close
    End With
   
   ElseIf N <= 1 Then
   rs1.MoveFirst
   Do While Not rs1.EOF
   If (fd11 = fd12) And (fd3 = Me.类型) And (Year(Me.货架寿命) = Year(fd2)) And (Month(Me.货架寿命) = Month(fd2)) And (Day(Me.货架寿命) = Day(fd2)) Then
   rs1.Edit
   fd4 = fd4 + Me.数量
   rs1.Update
   End If
   rs1.MoveNext
   Loop
   rs1.Close
   Set rs1 = Nothing
   
   Else: MsgBox "件号重复,请核实!"
   rs1.Close
   Set rs1 = Nothing
   End If
End If
End Select

添加新记录.Enabled = True
添加新记录.SetFocus
保存记录.Enabled = False

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_保存记录_Click:
    Exit Sub

Err_保存记录_Click:
    MsgBox Err.Description
    Resume Exit_保存记录_Click
   
End Sub
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
4#
 楼主| 发表于 2012-4-10 21:46:46 | 只看该作者
初步判断是。会不会是记录指针直接指在文件的最后而没有运行do with…………loop的循环就直接跳出了?
我在分段测试程序是发现过这个问题,指针老是指在刚才输入的一条记录上,就算使用rs1.movefirst 也没有用。
还是请大侠们一起帮忙找找问题所在吧。
3#
发表于 2012-4-10 09:00:05 | 只看该作者
Do While Not rs1.EOF
   fd12 = fd1  
   fd12 = Replace(fd12, "-", "")
   fd12 = Replace(fd12, "/", "")
   fd12 = Replace(fd12, ".", "")
   fd12 = UCase$(fd1)   
   If (fd11 = fd12) And (fd3 = Me.类型) Then
   N = N + 1
   End If
   rs1.MoveNext
   Loop


没有看全你的代码,只看了红字部分,发现你做的置换没有起作用。
2#
 楼主| 发表于 2012-4-9 23:02:31 | 只看该作者
另外,在下初学ACCESS,程序写得有点乱,请各位大侠多多包涵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-11 06:54 , Processed in 0.081615 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表