【问题标题】:Command button not working properly命令按钮无法正常工作
【发布时间】:2015-02-20 07:32:12
【问题描述】:

我在表单上设置了一个命令按钮,用于为提供直接借记信息的持有人创建发票。我有四个表,持有人、产品(与持有人相关)、交易(与产品相关)和发票(与持有人相关)。该按钮搜索指示直接借记的所有持有人,在这些持有人之间循环并找到以前未开具发票的所有交易,对交易求和,然后将金额输入到发票表上的新记录中。然后它应该循环遍历用于制作发票的交易并将新创建的发票 ID 添加到交易中。这是我正在使用的代码:

私人子 btnDebitInvoices_Click()

Dim db As DAO.Database
Dim rstHolder As DAO.Recordset
Dim rstTrans As DAO.Recordset
Dim rstSum As DAO.Recordset
Dim rstInvoice As DAO.Recordset
Dim strSQL As String
Dim strSQLSum As String
Dim strSQLHolder As String

Set db = CurrentDb

'Select all unique holders that have provided direct debit information
strSQLHolder = "SELECT DISTINCT HolderID " _
    & "FROM tblHolder " _
    & "WHERE (tblHolder.DirectDebit = 40);"

Set rstHolder = db.OpenRecordset(strSQLHolder)

rstHolder.MoveFirst

Do While Not rstHolder.EOF

    'Select all transactions that have not previously been invoiced and sum the TxAmount fields
    strSQL = "SELECT * " _
    & "FROM (tblTransaction " _
    & "INNER JOIN tblProduct ON tblTransaction.fkProductID = tblProduct.ProductID) " _
    & "INNER JOIN tblHolder ON tblProduct.fkHolderID = tblHolder.HolderID " _
    & "WHERE (((tblTransaction.TxInvoice) IS NULL) " _
    & "AND ((tblTransaction.TxType) = 'Fee') " _
    & "AND ((tblHolder.HolderID) = '" & rstHolder!HolderID & "'))"

    Set rstTrans = db.OpenRecordset(strSQL)
    rstTrans.MoveFirst

    strSQLSum = "SELECT SUM(tblTransaction.TxAmount) As InvoiceSum " _
        & "FROM (tblTransaction " _
        & "INNER JOIN tblProduct ON tblTransaction.fkProductID = tblProduct.ProductID) " _
        & "INNER JOIN tblHolder ON tblProduct.fkHolderID = tblHolder.HolderID " _
        & "WHERE (((tblTransaction.TxInvoice) IS NULL) " _
        & "AND ((tblTransaction.TxType) = 'Fee') " _
        & "AND ((tblHolder.HolderID) = '" & rstHolder!HolderID & "'))"

    Set rstSum = db.OpenRecordset(strSQLSum)

    If rstSum("InvoiceSum") > 0 Then
        'Add a new record to the invoice table with the sum of the amount and tax fields of all transactions not previously invoiced
        Set rstInvoice = db.OpenRecordset("tblInvoice")
        rstInvoice.AddNew
        rstInvoice("fkHolderID").Value = rstHolder("HolderID")
        rstInvoice("InvoiceDate").Value = Format(Now, "m/dd/yyyy")
        rstInvoice("Amount").Value = rstSum("InvoiceSum")
        rstInvoice("Tax").Value = rstInvoice("Amount") * 0.05
        rstInvoice.Update

        rstTrans.MoveFirst

        Do While Not rstTrans.EOF

            'Add newly created invoice number to transactions used to create invoice
            rstTrans.Edit
            rstTrans("TxInvoice").Value = rstInvoice("InvoiceID")
            rstTrans.Update

            rstTrans.MoveNext

        Loop

        rstTrans.Close
        rstInvoice.Close

    Else
        rstHolder.MoveNext
    End If
        DoCmd.RunCommand acCmdSaveRecord
        rstHolder.MoveNext
Loop

rstHolder.Close
db.Close

结束子

它在某种程度上有效,但并非完全有效。当我单击按钮时,它会为第一个持有人创建发票(尽管只有在我关闭按钮所在的表单然后重新打开它之后)然后在 rstTrans("TxInvoice").Value = rstInvoice("InvoiceID" ) 行表示没有选择当前记录。如果在重新打开表单后再次单击该按钮,它会正确创建所有发票,但会将第一次单击该按钮后创建的发票中的发票 ID 添加到“交易”表中的所有交易中。我有一种感觉我很接近,但不知道是什么导致了失败。提前感谢您提供的任何帮助。

【问题讨论】:

  • 我的一个问题是您的行 'rstTrans("TxInvoice").Value = rstInvoice("InvoiceID")' ...我没有看到您触摸字段 'TxtInvoice' 的任何地方 - 是自动编号字段?
  • TxInvoice 是 Transaction 表中的一个字段,它与 Invoice 表中的 InvoiceID 类型相同,仅用于指示应用了交易的发票。
  • 我的错,我的意思是说'rstInvoice(“InvoiceID”)'字段曾经填充在哪里?您向该表添加一条新记录,但不引用该字段。是自动编号吗?
  • 是的,没错,它是Invoice表的主键,它是一个自动编号。

标签: ms-access


【解决方案1】:

tblInvoice 中新添加的记录不保证是AddNew 之后的当前记录。我建议尝试以下方法来保存键值以供以后使用:

旧代码:

    rstInvoice.AddNew
    rstInvoice("fkHolderID").Value = rstHolder("HolderID")
    ...

        rstTrans.Edit
        rstTrans("TxInvoice").Value = rstInvoice("InvoiceID")
    ...

新代码:

 Dim lInvoiceID As Long
    rstInvoice.AddNew 
    lInvoiceID = rstInvoice("InvoiceID")    ' Save the new key
    rstInvoice("fkHolderID").Value = rstHolder("HolderID")
    ...

        rstTrans.Edit
        rstTrans("TxInvoice").Value = lInvoiceID 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多