Sql Access在INSERT或APPEND查询中无故向前移动字段值

Sql Access在INSERT或APPEND查询中无故向前移动字段值,sql,vba,ms-access,combobox,ms-access-2010,Sql,Vba,Ms Access,Combobox,Ms Access 2010,我正在尝试建立一个Access数据库,允许我的工作站点对事件类型信息进行编目 当我有权执行追加或更新查询时,它会将放入表中的combobox值向前移动,通常为1。有问题的表字段链接到查找表,而Access无论绑定列是什么都会这样做 我尝试了几种方法来解决这个问题,但没有解决: 1) 无论是链接查找表还是事件类型的空排序查询,我都会得到相同的结果 2) 我在VBA中尝试了两种方法来解决这个问题,得到了相同的结果。首先,我将VBA语句更改为直接引用值的组合框。其次,我知道combobox索引从0开始

我正在尝试建立一个Access数据库,允许我的工作站点对事件类型信息进行编目

当我有权执行追加或更新查询时,它会将放入表中的combobox值向前移动,通常为1。有问题的表字段链接到查找表,而Access无论绑定列是什么都会这样做

我尝试了几种方法来解决这个问题,但没有解决:

1) 无论是链接查找表还是事件类型的空排序查询,我都会得到相同的结果

2) 我在VBA中尝试了两种方法来解决这个问题,得到了相同的结果。首先,我将VBA语句更改为直接引用值的组合框。其次,我知道combobox索引从0开始,而不是从1开始,所以我在VBA中尝试将数字向前移动1,这导致了其他问题

3) 我修复了数据库

4) 我将组合框的绑定列更改为1,而不是0

看起来“”和“”在某种程度上是同一个问题。我忽略了什么吗

以下是将信息添加为新条目的代码:

Private Sub btn_AddOuting_Click()
   Dim strSQL As String
   Dim eventSlot As String, seasonStartSlot As String, seasonEndSlot As String, moneyReqSlot As String, prevSlot As String
   Dim eventDetails(5, 4) As Integer   '5 rows of event slots with 4 fields (event type, season start, season end, and money required)
   Dim slotNo As Integer, eventNo As Integer
   Dim boolAnyBlankReqFields As Boolean

   strSQL = ""

   For slotNo = 5 To 1 Step -1
      eventSlot = "cmb_Event" & slotNo
      seasonStartSlot = "cmb_StartOfSeason" & slotNo
      seasonEndSlot = "cmb_EndOfSeason" & slotNo
      moneyReqSlot = "cmb_MoneyRequired" & slotNo
      prevSlot = "cmb_Event" & (slotNo - 1)

      If eventSlot = "cmb_Event1" Then
         If (Forms("f_AddOuting").Controls(eventSlot) = 0 Or Forms("f_AddOuting").Controls(seasonStartSlot) = 0 Or _
             Forms("f_AddOuting").Controls(seasonEndSlot) = 0 Or Forms("f_AddOuting").Controls(moneyReqSlot) = 0) Then
            boolAnyBlankReqFields = True
            Me.lbl_Required.Visible = True
            If (Forms("f_AddOuting").Controls(eventSlot) = 0) Then
               Forms("f_AddOuting").Controls(eventSlot).BorderColor = RGB(255, 85, 85)
            End If
            If (Forms("f_AddOuting").Controls(seasonStartSlot) = 0) Then
               Forms("f_AddOuting").Controls(seasonStartSlot).BorderColor = RGB(255, 85, 85)
            End If
            If (Forms("f_AddOuting").Controls(seasonEndSlot) = 0) Then
               Forms("f_AddOuting").Controls(seasonEndSlot).BorderColor = RGB(255, 85, 85)
            End If
            If (Forms("f_AddOuting").Controls(moneyReqSlot) = 0) Then
               Forms("f_AddOuting").Controls(moneyReqSlot).BorderColor = RGB(255, 85, 85)
            End If
         Else
            eventDetails(1, 1) = Forms("f_AddOuting").Controls(eventSlot) + 1
            Forms("f_AddOuting").Controls(eventSlot).BorderColor = RGB(0, 0, 0)
            eventDetails(1, 2) = Forms("f_AddOuting").Controls(seasonStartSlot) + 1
            Forms("f_AddOuting").Controls(seasonStartSlot).BorderColor = RGB(0, 0, 0)
            eventDetails(1, 3) = Forms("f_AddOuting").Controls(seasonEndSlot) + 1
            Forms("f_AddOuting").Controls(seasonEndSlot).BorderColor = RGB(0, 0, 0)
            eventDetails(1, 4) = Forms("f_AddOuting").Controls(moneyReqSlot) + 1
            Forms("f_AddOuting").Controls(moneyReqSlot).BorderColor = RGB(0, 0, 0)
         End If
      Else
         If (Forms("f_AddOuting").Controls(eventSlot).Enabled = False) Then
            eventDetails(slotNo, 1) = 1
            eventDetails(slotNo, 2) = 1
            eventDetails(slotNo, 3) = 1
            eventDetails(slotNo, 4) = 1
         Else
            eventDetails(slotNo, 1) = Forms("f_AddOuting").Controls(eventSlot)
            eventDetails(slotNo, 2) = Forms("f_AddOuting").Controls(seasonStartSlot)
            eventDetails(slotNo, 3) = Forms("f_AddOuting").Controls(seasonEndSlot)
            eventDetails(slotNo, 4) = Forms("f_AddOuting").Controls(moneyReqSlot)
         End If
      End If
   Next

   If boolAnyBlankReqFields = True Then
      MsgBox ("Fill in required information.")
   Else
      strSQL = "INSERT INTO t_OutingDetails (Event1, SeasonStart1, SeasonEnd1, MoneyRequired1, " _
            & "Event2, SeasonStart2, SeasonEnd2, MoneyRequired2, Event3, SeasonStart3, SeasonEnd3, MoneyRequired3, " _
            & "Event4, SeasonStart4, SeasonEnd4, MoneyRequired4, Event5, SeasonStart5, SeasonEnd5, MoneyRequired5) VALUES ('" _
            & eventDetails(1, 1) & ", " & eventDetails(1, 2) & ", " & eventDetails(1, 3) & ", " & eventDetails(1, 4) & ", " _
            & eventDetails(2, 1) & ", " & eventDetails(2, 2) & ", " & eventDetails(2, 3) & ", " & eventDetails(2, 4) & ", " _
            & eventDetails(3, 1) & ", " & eventDetails(3, 2) & ", " & eventDetails(3, 3) & ", " & eventDetails(3, 4) & ", " _
            & eventDetails(4, 1) & ", " & eventDetails(4, 2) & ", " & eventDetails(4, 3) & ", " & eventDetails(3, 4) & ", " _
            & eventDetails(5, 1) & ", " & eventDetails(5, 2) & ", " & eventDetails(5, 3) & ", " & eventDetails(5, 4) & ");"

      DoCmd.RunSQL strSQL

      MsgBox ("Entry submitted successfully.")

      boolAnyBlankReqFields = False

   End If

btn_AddOuting_Click_Exit:
   Exit Sub
btn_AddOuting_Click_Err:
   MsgBox Err & ": " & Err.Description
   Resume btn_AddOuting_Click_Exit
End Sub
以下是更新事件类型的代码:

Private Sub btn_NewEvent1_Click()
   Dim strSQL As String

   If Me.cbo_NewEvent1 <> 0 Then
      strSQL = "UPDATE t_OutingDetails SET [t_OutingDetails].[Event1] = [Forms]![f_UpdateOutings]![cbo_NewEvent1] WHERE (((t_OutingDetails.ID)=[Forms]![f_UpdateOutings]![cbo_PlaceName]));"
      DoCmd.RunSQL strSQL
      Me.txt_Event1.Requery
      Me.cbo_NewEvent1 = 0
   Else
      MsgBox ("No selection was made for the first event type.")
   End If
End Sub
Private Sub btn\u NewEvent1\u Click()
作为字符串的Dim strSQL
如果Me.cbo_NewEvent1 0那么
strSQL=“更新t_OutingDetails集[t_OutingDetails]。[Event1]=[Forms]![f_UpdateOutings]![cbo_NewEvent1]其中((t_OutingDetails.ID)=[Forms]![f_UpdateOutings]![cbo_地名]);”
DoCmd.RunSQL strSQL
Me.txt\u Event1.Requery
Me.cbo_NewEvent1=0
其他的
MsgBox(“没有选择第一个事件类型。”)
如果结束
端接头

你的帖子没有引起注意,是吗?嗯,我认为你应该考虑把它缩小到确切的问题上。长度阻止了我,我确信它阻止了其他人“潜入”,所以请尽量说得更具体一些,谢谢。事实上,我感谢你的批评;我在努力描述这个问题。我可能通过不同的途径诊断出了问题。我建立了一个新的“测试”数据库,在这里我可以只关注Access的行为,包括组合框和查找表。这排除了对任何排序的查询,并使用访问向导来构建一个按钮,这样我就不会把它搞砸了。在这种情况下,我也遇到了同样的问题,这表明访问本身可能会以某种方式被破坏。你仔细阅读了吗?你的combos属性设置实现的一致吗?今晚回家后,我会仔细检查这些细节,看看是否遗漏了什么。我知道我检查了其中的一些问题,查询生成器和VBA之间的一致性,加上它在新的简化数据库中的出现,使我相信问题出在Access中。(我还要说,知道何时关闭和打开表、表单和查询以确保它们被正确刷新会让人感到困惑。)事实证明,绑定列属性是问题所在。当它没有设置为包含字符串值的列时,我遇到了那个“小故障”。想想我受过的教育。