Office中国论坛/Access中国论坛

标题: 请各位前辈帮忙解决程序中的两个问题! [打印本页]

作者: stvent    时间: 2009-8-30 23:24
标题: 请各位前辈帮忙解决程序中的两个问题!
问题1,如何阻止相同记录添加到子窗体数据表中,
问题2,当要导入的物料编号与表内“物料信息表”中有相同时,导入到表中,其次进行二次查询!如下图详解!
作者: stvent    时间: 2009-8-31 08:15
各位早晨!问题依旧
作者: ACMAIN_CHM    时间: 2009-8-31 08:54
问题1,如何阻止相同记录添加到子窗体数据表中,
帮助中搜索“主键

问题2,当要导入的物料编号与表内“物料信息表”中有相同时,导入到表中,其次进行二次查询!如下图详解!
不好意思,没看懂。
作者: stvent    时间: 2009-8-31 09:02
问题1,如何阻止相同记录添加到子窗体数据表中,
帮助中搜索“主键”

问题2,当要导入的物料编号与表内“物料信息表”中有相同时,导入到表中,其次进行二次查询!如下图详解!
不好意思,没看懂。
ACMAIN_CHM 发表于 2009-8-31 08:54

对于问题2,即图片中,我写的问题1,我作了简单讲解!可以理解为,表1内有物料编号、物料名称数据,而我要导入的数据中,有一字段为物料编号(里面数据包含正规的物料编号和不正规的数据),在导入前先与表1作个比较,如果存在该物料,即将该物料编号及名称一同导入到入库明细中
作者: stvent    时间: 2009-8-31 11:33
头痛啊
作者: djt    时间: 2009-8-31 11:39
做个简单的例子,你把全部都放上来,不知道改哪
你都头疼,俺更痛
作者: stvent    时间: 2009-8-31 12:04
做个简单的例子,你把全部都放上来,不知道改哪
你都头疼,俺更痛
djt 发表于 2009-8-31 11:39

我上传的实例已经简化了的!
程序开发目的在于简化用户手工操作录入,因为一般用户手上只有收贷单,而收贷单上只有一个采购单号与ODBC数据源相匹配,因为各位都无法连到数据源,所以我特意将所需数据导入成系统中的Sheet1!
此实例我是以采购单PO6785为例的(所以Sheet1中我只导入了PO6785的数据),当用户点击放大镜按键,弹出“采购单信息查询结果”窗体,窗体数据源为Sheet1,用户通过双击采购单号,将PO单中的信息传输到“入库单明细”子窗体中,另外,因为采购单信息中,在物料号一栏,存在不规范的数据,例如:KM27011是正规的,PQT000029及卷尺3.5M*13M是不正规的,要通过下方的“按物料名称”查询得正规物料编号是什么!而我思路是,如何可以在双击传输的时候,对物料编号与后台的“物料信息表”作验证,如果匹配,自动传输到“入库单明细”子窗体中的物料编号及物料名称!此乃问题1。
问题2就是,控制作在“采购单信息查询结果”中已双击传输到“入库单明细”的记录不能再次录入!
作者: djt    时间: 2009-8-31 12:34
1 双击时加一验证
dim rs as new adodb.recordset
rs.open "select * from 物料信息表 where 条件",cnn
if rs.recordcount>=1 then
传输
endif

2 同样的方法
dim rs as new adodb.recordset
rs.open "select * from 入库单明细 where 条件",cnn
if rs.recordcount>=1 then
不录入
endif
作者: lanshai    时间: 2009-8-31 12:58
ppp
作者: stvent    时间: 2009-8-31 13:29
1 双击时加一验证
dim rs as new adodb.recordset
rs.open "select * from 物料信息表 where 条件",cnn
if rs.recordcount>=1 then
传输
endif

2 同样的方法
dim rs as new adodb.recordset
rs.open "sele ...
djt 发表于 2009-8-31 12:34


尝试了,没应应!
作者: stvent    时间: 2009-8-31 15:18
沉了
作者: Henry D. Sy    时间: 2009-8-31 15:36
请更改标题,
没有看懂您的意思
作者: djt    时间: 2009-8-31 16:18
本帖最后由 djt 于 2009-8-31 16:20 编辑

按照你的思路写的
Private Sub 采购单号_DblClick(Cancel As Integer)
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Set Conn = CurrentProject.Connection
Dim Sql As String
Sql = "select * from 入库单明细 where 事务号='" & Me.事务号 & "' and 采购单行号=" & Me.采购单行号
Rs.Open Sql, Conn, adOpenKeyset, adLockReadOnly
If Rs.RecordCount >= 1 Then
   MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
    Exit Sub
End If
Rs.Close
With Forms![入库单_录入].[入库单明细_子窗体].Form.RecordsetClone
    .MoveFirst
    .FindFirst "采购单ID='" & Me.采购单号 & "' and 采购单行号=" & Me.采购单行号
    If .NoMatch = False Then
       MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
        Exit Sub
    End If


End With

Sql = "select * from 入库单明细 where 事务号='" & Me.事务号 & "'"
Rs.Open Sql, Conn, adOpenDynamic, adLockOptimistic
If Not Rs.EOF Then
   MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
Exit Sub
End If
'Set Rs = Nothing
'Set Conn = Nothing

Forms![入库单_录入].SetFocus
   DoCmd.GoToRecord , , acNewRec
   If Forms![入库单_录入].[入库单明细_子窗体].Form.Recordset.RecordCount <= 2 Then
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单ID = Me![采购单号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库日期 = Me![入库日期]
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单行号 = Me![采购单行号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库数量 = Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.单价 = Me![采购单价]
      Forms![入库单_录入].[入库单明细_子窗体].Form.总价 = Me![采购单价] * Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.事务号 = Me![事务号]
     
   Else
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单ID = Me![采购单号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库日期 = Me![入库日期]
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单行号 = Me![采购单行号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库数量 = Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.单价 = Me![采购单价]
      Forms![入库单_录入].[入库单明细_子窗体].Form.总价 = Me![采购单价] * Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.事务号 = Me![事务号]
    End If
    Dim rs1 As New ADODB.Recordset
    rs1.Open "select * from 物料信息表 where 物料编号='" & Me.物料编号 & "'", Conn, adOpenKeyset, adLockReadOnly
    If rs1.RecordCount >= 1 Then
        Forms![入库单_录入].[入库单明细_子窗体].Form.物料编号 = rs1("物料编号")
        Forms![入库单_录入].[入库单明细_子窗体].Form.物料名称 = rs1("物料名称")
        Forms![入库单_录入].[入库单明细_子窗体].Form.类别 = rs1("类别")
        Forms![入库单_录入].[入库单明细_子窗体].Form.上级ID = DLookup("[ID号]", "入库单明细", "[物料编号]='" & rs1("类别") & "'")
        Forms![入库单_录入].[入库单明细_子窗体].Form.单位 = DLookup("[单位]", "物料信息表", "[物料编号]='" & rs1("物料编号") & "'")

    End If
End Sub
作者: stvent    时间: 2009-8-31 16:36
沉了
作者: stvent    时间: 2009-8-31 19:13
按照你的思路写的
Private Sub 采购单号_DblClick(Cancel As Integer)
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Set Conn = CurrentProject.Connection
Dim Sql As String
Sql = "sel ...
djt 发表于 2009-8-31 16:18

谢谢djt的帮忙,但还是不成功!双击后,没反应!
作者: stvent    时间: 2009-8-31 19:14
本帖最后由 stvent 于 2009-8-31 19:16 编辑

是不是我表达不清的问题啊?
作者: stvent    时间: 2009-9-1 08:25
继续顶起
作者: djt    时间: 2009-9-1 08:54
本帖最后由 djt 于 2009-9-1 09:08 编辑

能用类模块,应该可以自己改代码了
Private Sub 采购单号_DblClick(Cancel As Integer)
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Set Conn = CurrentProject.Connection
Dim Sql As String
Sql = "select * from 入库单明细 where 事务号='" & Me.事务号 & "' and 采购单行号=" & Me.采购单行号
Rs.Open Sql, Conn, adOpenKeyset, adLockReadOnly
If Rs.RecordCount >= 1 Then
   MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
    Exit Sub
End If
Rs.Close

With Forms![入库单_录入].[入库单明细_子窗体].Form.RecordsetClone
    If .RecordCount > 0 Then
        .MoveFirst
        .FindFirst "采购单ID='" & Me.采购单号 & "' and 采购单行号=" & Me.采购单行号
        If .NoMatch = False Then
           MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
            Exit Sub
        End If
    End If
   
End With

Sql = "select * from 入库单明细 where 事务号='" & Me.事务号 & "'"
Rs.Open Sql, Conn, adOpenDynamic, adLockOptimistic
If Not Rs.EOF Then
   MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
Exit Sub
End If
'Set Rs = Nothing
'Set Conn = Nothing

Forms![入库单_录入].SetFocus
   DoCmd.GoToRecord , , acNewRec
   If Forms![入库单_录入].[入库单明细_子窗体].Form.Recordset.RecordCount <= 2 Then
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单ID = Me![采购单号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库日期 = Me![入库日期]
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单行号 = Me![采购单行号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库数量 = Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.单价 = Me![采购单价]
      Forms![入库单_录入].[入库单明细_子窗体].Form.总价 = Me![采购单价] * Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.事务号 = Me![事务号]
     
   Else
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单ID = Me![采购单号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库日期 = Me![入库日期]
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单行号 = Me![采购单行号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库数量 = Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.单价 = Me![采购单价]
      Forms![入库单_录入].[入库单明细_子窗体].Form.总价 = Me![采购单价] * Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.事务号 = Me![事务号]
    End If
    DoCmd.GoToRecord , , acNewRec
    DoCmd.GoToRecord , , acLast
    Dim rs1 As New ADODB.Recordset
    rs1.Open "select * from 物料信息表 where 物料编号='" & Me.物料编号 & "'", Conn, adOpenKeyset, adLockReadOnly
    If rs1.RecordCount >= 1 Then
        Forms![入库单_录入].[入库单明细_子窗体].Form.物料编号 = rs1("物料编号")
        Forms![入库单_录入].[入库单明细_子窗体].Form.物料名称 = rs1("物料名称")
        Forms![入库单_录入].[入库单明细_子窗体].Form.类别 = rs1("类别")
        Forms![入库单_录入].[入库单明细_子窗体].Form.上级ID = DLookup("[ID号]", "入库单明细", "[物料编号]='" & rs1("类别") & "'")
        Forms![入库单_录入].[入库单明细_子窗体].Form.单位 = DLookup("[单位]", "物料信息表", "[物料编号]='" & rs1("物料编号") & "'")

    End If
   
End Sub
作者: stvent    时间: 2009-9-1 09:17
能用类模块,应该可以自己改代码了
Private Sub 采购单号_DblClick(Cancel As Integer)
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Set Conn = CurrentProject.Connection
Dim Sql As St ...
djt 发表于 2009-9-1 08:54

那个类是引用论坛上的前辈的,非本人写的!见笑了!
作者: ly    时间: 2009-9-1 15:44
1# stvent


请尝试,不知符合楼主的要求。
1、
Private Sub 采购单号_DblClick(Cancel As Integer)
'Dim Rs As New ADODB.Recordset
'Dim Conn As New ADODB.Connection
'Set Conn = CurrentProject.Connection
'Dim Sql As String
'Sql = "select * from 入库单明细 where 事务号='" & Me.事务号 & "'"
'Rs.Open Sql, Conn, adOpenDynamic, adLockOptimistic
'If Not Rs.EOF Then
'   MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
'Exit Sub
'End If
With Forms![入库单_录入].[入库单明细_子窗体].Form.RecordsetClone
    If .RecordCount > 0 Then
    .MoveFirst
    .FindFirst "事务号='" & Me.事务号 & "'"
        If .NoMatch = False Then
        MsgBox "该条记录已存在!", vbInformation + vbOKOnly, "重复提示"
        Exit Sub
        End If
    End If
End With

'Set Rs = Nothing
'Set Conn = Nothing
Forms![入库单_录入].SetFocus
   DoCmd.GoToRecord , , acNewRec
'   If Forms![入库单_录入].[入库单明细_子窗体].Form.Recordset.RecordCount <= 1 Then
'      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单ID = Me![采购单号]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.入库日期 = Me![入库日期]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单行号 = Me![采购单行号]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.入库数量 = Me![数量]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.单价 = Me![采购单价]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.总价 = Me![采购单价] * Me![数量]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.事务号 = Me![事务号]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.物料编号 = Me![物料编号]
'      Forms![入库单_录入].[入库单明细_子窗体].Form.物料名称 = Me![物料名称]
'   Else
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单ID = Me![采购单号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库日期 = Me![入库日期]
      Forms![入库单_录入].[入库单明细_子窗体].Form.采购单行号 = Me![采购单行号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.入库数量 = Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.单价 = Me![采购单价]
      Forms![入库单_录入].[入库单明细_子窗体].Form.总价 = Me![采购单价] * Me![数量]
      Forms![入库单_录入].[入库单明细_子窗体].Form.事务号 = Me![事务号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.物料编号 = Me![物料编号]
      Forms![入库单_录入].[入库单明细_子窗体].Form.物料名称 = Me![物料名称]
     DoCmd.GoToRecord , , acNext
     
'   End If
   
End Sub

2、
将"采购单行号查询子窗体"中的记录源修改为:
SELECT Sheet1.采购单号, Sheet1.采购单行号, Sheet1.物料编号, Sheet1.数量, Sheet1.采购单价, Sheet1.事务号, Sheet1.单位, Sheet1.收贷日期, 物料信息表.物料名称
FROM Sheet1 LEFT JOIN 物料信息表 ON Sheet1.物料编号 = 物料信息表.物料编号;




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