【问题标题】:Adding or changing record in access table在访问表中添加或更改记录
【发布时间】:2012-10-08 03:48:50
【问题描述】:

我正在制作一个相当简单的库存跟踪数据库。我想通过 ID 检索记录,并在金额中添加或删除指定的数字。如果它不存在,我想添加它。甚至可以在不绑定到表的情况下执行此操作吗?

【问题讨论】:

  • 可以使用记录集,但为什么要避免绑定呢?在 MS Access 中使用绑定表单非常简单。
  • 你知道,这可能不是一个坏主意。问题是......不,等等,这应该可行。
  • 好吧,这样说吧,如果可以的话,我想不做。
  • @Remou,我想避免绑定,因为我有一个子表单,它通过 ID 链接到其父表单,这是我表中的必填字段。如果我尝试在数据表模式下创建新记录,则不会填充 ID。让用户输入 ID 没有任何意义,因为它已经链接到其父表单。我想以编程方式设置 ID 字段,未绑定的表单需要创建一个字段,使其不可见,并设置控件的值。最后,创建未绑定控件并以编程方式插入记录似乎更优雅。

标签: ms-access ms-access-2007 vba


【解决方案1】:

听起来你有一个候选ID 值。也许它包含在一个名为MyID 的数字变量中。您还有另一个数值 MyAmtChange,它将被添加到表中名为 amount 的字段中的值中,以匹配 ID 字段值与 MyID 匹配的行。

复杂情况是您的表中可能没有ID 值与MyID 匹配的行。在这种情况下,您需要为其添加一行。

如果正确,INSERT 在不存在时为MyID 设置一行。然后你可以在与MyID匹配的行中简单地UPDATEamount

Dim strInsert As String
Dim strUpdate As String
Dim db As DAO.Database

Set db = CurrentDb
If DCount("*", "YourTableNameHere", "ID = " & MyID) = 0 Then
    strInsert = "INSERT INTO YourTableNameHere (ID)" & vbCrLf & _
        "VALUES (" & MyID & ");"
    Debug.Print strInsert
    db.Execute strInsert, dbFailOnError
End If

strUpdate = "UPDATE YourTableNameHere" & vbCrLf & _
    "SET amount = Nz(amount, 0) + " & MyAmtChange & vbCrLf & _
    "WHERE ID = " & MyID & ";"
Debug.Print strUpdate
db.Execute strUpdate, dbFailOnError
Set db = Nothing

如果这个猜测相当接近,请在该代码中添加一个错误处理程序块,以处理dbFailOnError ... 或任何其他错误出现的任何问题。

【讨论】:

    【解决方案2】:

    我不知道你到底想要什么,但这段代码展示了如何使用 VB-Access 操作数据。

    Sub fnStudent()
        On Error GoTo insertError
        Dim studentQuery As String
        'INSERTING INTO TABLE
            studentQuery = "INSERT INTO Students values ('10','YAHYA','02/10/2012')"
            CurrentDb.Execute studentQuery, dbFailOnError
        'UPDATING
            studentQuery = "UPDATE Students Set name='YAHYA OULD ABBA' WHERE stdID='10'"
            CurrentDb.Execute studentQuery, dbFailOnError
        'LISTING VALUES
        Dim studentsRS As Recordset
        Set studentsRS = CurrentDb.OpenRecordset("SELECT * FROM Students WHERE upper(name) like '%YAHYA%';")
        Do While Not studentsRS.EOF
            MsgBox "ID : " & studentsRS.Fields(0) & "Name : " & studentsRS.Fields(1) & "Birth Date : " & studentsRS.Fields(2)
            studentsRS.MoveNext
        Loop
        'DELETING
        studentQuery = "DELETE FROM Students WHERE stdID='10'"
        CurrentDb.Execute studentQuery, dbFailOnError
        Exit Sub 'exit if there was no error
        'UPDATE:
    errorHandler:
        If Err.Number = 3022 Then
                MsgBox "Can't have duplicate key; index changes were unsuccessful",     vbMsgBoxRtlReading + vbCritical, "Error " & Err.Number
        Else : MsgBox "Error" & vbCrLf & Err.Description, vbMsgBoxRtlReading + vbCritical, "Error " & Err.Number
        End If
    End Sub
    

    在这里您可以找到vba 错误列表http://www.halfile.com/vb.html

    【讨论】:

    • 如果我尝试插入并且它已经存在会怎样?在不存在的地方更新呢?
    • 我更新了代码,你可以处理尽可能多的错误。
    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多