Office中国论坛/Access中国论坛

标题: 窗体里ADODB查询两个表不同字段报错的问题 [打印本页]

作者: 紫风    时间: 2011-6-24 09:16
标题: 窗体里ADODB查询两个表不同字段报错的问题
本帖最后由 紫风 于 2011-6-24 09:18 编辑

问题:表A 和 表B 有若干个字段,我想从表A里取字段A,B,C,从表B里取字段E,F,G。
有劳各位帮解决一下,谢谢!!!
有问题的代码如下(报错:至少一个参数没有被指定值):
Private Sub cmd查询_Click()
On Error GoTo 0
    Dim STemp As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
        
        Me.Form.Refresh
        STemp = "SELECT [tbl入库].* FROM [tbl入库] WHERE 入库ID = '" & Me.入库号 & "'"
        rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
            With rs
                Me.卸车单号 = ![卸车单号]
                Me.日期 = ![日期]
                Me.客户名称 = ![公司名称]
                Me.工作号 = ![工作号]
                Me.入库车牌 = ![车牌号码]
                Me.入库柜号 = ![入库柜号]
                Me.入库操作 = ![操作人]
            End With
        rs.Close
        
        STemp = "SELECT [tbl卸货派工].* FROM [tbl卸货派工] WHERE 入库号 = '" & Me.入库号 & "'"
        rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
            With rs
                Me.预到数 = ![预到数]
                Me.实到数 = ![实到数]
                Me.主班 = ![主班]
                Me.副班 = ![副班]
                Me.下单时间 = ![下单时间]
                Me.完工时间 = ![完工时间]
             End With
        rs.Close
        Set rs = Nothing
End Sub


作者: roych    时间: 2011-6-24 09:51
按LZ的代码只能取到部分值……因为记录集已经被关闭了。如果要同时取到两个表的值,应该建立两个记录集。必要的话,请上传附件。
作者: todaynew    时间: 2011-6-24 09:53
入库ID = '" & Me.入库号 & "'"

入库号 = '" & Me.入库号 & "'"
中有一个是错的。
作者: 紫风    时间: 2011-6-24 10:06
todaynew 发表于 2011-6-24 09:53
入库ID = '" & Me.入库号 & "'"

入库号 = '" & Me.入库号 & "'"

这个问题已经找到,应该是入库ID=入库号,但结果还是一样。

具体情况:
如果tbl卸车派工里有相应记录,则不报错;如果没有派工记录,则报错内容一样。
作者: 紫风    时间: 2011-6-24 10:08
roych 发表于 2011-6-24 09:51
按LZ的代码只能取到部分值……因为记录集已经被关闭了。如果要同时取到两个表的值,应该建立两个记录集。必 ...

回版主:

尝试过2个RS,但报错一样。
如果tbl卸车派工里已经有派工记录,则不报错;如果该表内未有与入库ID相符的记录,系统才会报错。
作者: todaynew    时间: 2011-6-24 10:28
紫风 发表于 2011-6-24 10:06
这个问题已经找到,应该是入库ID=入库号,但结果还是一样。

具体情况:

用nz函数:
nz(me.入库单.value,0)
作者: 紫风    时间: 2011-6-24 10:31
todaynew 发表于 2011-6-24 10:28
用nz函数:
nz(me.入库单.value,0)

这个……
版主,NZ没用过,请问能不能具体点?谢谢!!
作者: todaynew    时间: 2011-6-24 10:42
本帖最后由 todaynew 于 2011-6-24 10:48 编辑
紫风 发表于 2011-6-24 10:31
这个……
版主,NZ没用过,请问能不能具体点?谢谢!!


STemp = "SELECT [tbl入库].* FROM [tbl入库] WHERE 入库ID = '" & nz(Me.入库号,"") & "'"


其实不必大费周章,直接用Dlookup就可以了。比如:
Me.卸车单号.value = nz(Dlookup("卸车单号","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.日期.value = nz(Dlookup("日期","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.客户名称.value = nz(Dlookup("公司名称","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.工作号.value = nz(Dlookup("工作号","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.入库车牌.value = nz(Dlookup("车牌号码","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.入库柜号.value = nz(Dlookup("入库柜号","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.入库操作.value = nz(Dlookup("操作人","tbl入库","入库ID=" & nz(me.入库号.value,0)),"")
Me.预到数.value = nz(Dlookup("预到数","tbl卸货派工","入库ID=" & nz(me.入库号.value,0)),"")
Me.实到数.value = nz(Dlookup("实到数","tbl卸货派工","入库ID=" & nz(me.入库号.value,0)),"")
Me.主班.value = nz(Dlookup("主班","tbl卸货派工","入库ID=" & nz(me.入库号.value,0)),"")
Me.副班.value = nz(Dlookup("副班","tbl卸货派工","入库ID=" & nz(me.入库号.value,0)),"")
Me.下单时间.value = nz(Dlookup("下单时间","tbl卸货派工","入库ID=" & nz(me.入库号.value,0)),"")
Me.完工时间.value = nz(Dlookup("完工时间","tbl卸货派工","入库ID=" & nz(me.入库号.value,0)),"")



作者: 紫风    时间: 2011-6-24 12:02
todaynew 发表于 2011-6-24 10:42
STemp = "SELECT [tbl入库].* FROM [tbl入库] WHERE 入库ID = '" & nz(Me.入库号,"") & "'"

感谢版主帮忙!

不过,如果用了DLOOKUP+NZ后,就有别的报错,系统认为me.卸车单号不是空的,不允许下单了……

如果用RS,则无此报错,但报错:您为该字段输入的值无效。
作者: 紫风    时间: 2011-6-24 12:18
我把文件上传上来,麻烦版主帮看一下,谢谢!

作者: roych    时间: 2011-6-24 14:11
回复 紫风 的帖子

tbl入库的卸车单号全部为空,自然报错了。改成以下类型
rs.fields("卸车单号").value
试试看?
我测试了一下,第一个记录集没问题(或者暂时我没看到有什么问题)。
不过附件中第二个记录集所对应的数据表全部删除了,所以也就没法测试了。
作者: todaynew    时间: 2011-6-24 16:46
本帖最后由 todaynew 于 2011-6-24 16:49 编辑
紫风 发表于 2011-6-24 12:18
我把文件上传上来,麻烦版主帮看一下,谢谢!


Private Sub cmd查询_Click()
....
        STemp = "SELECT [tbl入库].* FROM [tbl入库] WHERE 入库ID =" & Nz(Me.入库号, 0)
        rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        If rs.RecordCount > 0 Then
            With rs
                Me.卸车单号 = ![卸车单号]
                ....
            End With
        End If
        rs.Close
        
        STemp = "SELECT [tbl卸货派工].* FROM [tbl卸货派工] WHERE 入库ID =" & Nz(Me.入库号, 0)
        rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
       If rs.RecordCount > 0 Then
            With rs
                Me.预到数 = ![预到数]
                .....
            End With
        End If
....
End Sub

此外,你如何保证同志们知晓入库号呢?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3