Access,For Each循环为另一个表中的每一行添加多个txtfield到表中

时间:2015-11-02 23:42:59

标签: ms-access for-loop foreach

我的问题可能令人困惑,我正在寻找一种解决问题的方法来维护'用Access编写的系统。

有一个包含数据的表单,我需要获取txtFields值,listBox值并将它们添加为存储在另一个表中的每个电话号码的sql行。

例如,dbShift包含很少的电话号码(从8到15),并且每8小时都会切换一次。

当工人提交带有“机器故障”的表格时,维护办公室会通过访问前端接收表单。

此信息也需要添加到另一个表中,我们将其称为dbSMS,我们将在其中存储:nrMaszyny,nazwaMaszyny,Zglaszajacy,Przyczyna,Obszar,Telefon。

现在,对于存储在dbShift中的每个电话号码(通过为此表创建的表单切换号码),此消息需要重复。

所有这一切都是为了自动化流程并从我们公司的调制解调器自动发送短信,因此维护员工将立即得到有关问题的通知,而不仅仅是通过他们的车间前端。

似乎一切都已完成,但我仍然坚持实施“每个人”的方式。收集必要信息并将其添加到表中的方法,其中调制解调器可以通过SMS提供数据以传递它。

也许我错了,也许有更好的方式,而不是“为每个人”?

有什么想法吗?

dbShift : ID,姓名,电话号码

dbSms : nrMaszyny,nazwaMaszyny,Zglaszajacy,Przyczyna,Obszar,Telefon(来自FORM的数据,工人发送机器故障表格)

您收集数据的表单: Form

此表格的代码:

Option Compare Database

Private Sub buttonZamknijFormrularz_Click()

    DoCmd.Close DoCmd.OpenForm "MainLoginForm"
    Forms!MainLoginForm!txtPassword.Value = ""

End Sub

Private Sub cmdAdd_Click()

    If IsNull(Me.listPrzyczyna) Or Me.listPrzyczyna = "" Then
        MsgBox "Wybierz przyczynę awarii!", vbOKOnly, "Wymagane dane"
        Me.listPrzyczyna.SetFocus

    Else

        Dim strSQL As String

        strSQL = "INSERT INTO dbAwarieOtwarte (nrMaszyny, nazwaMaszyny, Zglaszajacy, dataZgloszenia, dataZakonczenia,
            godzinaZgloszenia, Przyczyna, Obszar, Telefon, Komentarz) VALUES ('" &
            Me!txtNrMaszyny & "', '" & Me!txtNazwa & "', '" & Me!txtZglaszajacy &
            "', '" & Me!txtData & "', '" & Me!txtData & "', '" & Me!txtGodzina &
            "', '" & Me!listPrzyczyna & "," & Me!txtNazwa & "," & Me!txtNrMaszyny
            & "," & Me!txtObszar & "', '" & Me!txtObszar & "', '" & Me!txtTel &
            "', '" & Me!txtKomentarz & "');"

        DoCmd.SetWarnings False
        DoCmd.RunSQL strSQL
        DoCmd.SetWarnings True
        DoCmd.Close '        DoCmd.OpenReport "repAwariaOtwarta", acViewPreview, , "ID=" & DMax("ID", "dbAwarieOtwarte")
    End If
End Sub

Private Sub Polecenie35_Click() 
    DoCmd.Close DoCmd.OpenForm "formMaszynyObszar1" 
End Sub

1 个答案:

答案 0 :(得分:0)

我建议修改你的代码以执行以下操作...你说有另一个带有电话号码的表,所以我将循环通过该表。不确定你是否想要使用DAO或ADO,所以我坚持使用DAO。

Private Sub cmdAdd_Click()
Dim dbs as DAO.Database
Dim rsPhone as DAO.Recordset

If IsNull(Me.listPrzyczyna) Or Me.listPrzyczyna = "" Then
    MsgBox "Wybierz przyczynę awarii!", vbOKOnly, "Wymagane dane"
    Me.listPrzyczyna.SetFocus

Else
    Dim strSQL As String

    Set dbs = CurrentDB
    Set rsPhone = dbs.OpenRecordset("<YourPhoneTable>")
    Do While Not rsPhone.EOF

'<<< MAKE YOUR CHANGES TO GRAB THE PHONE NUMBER if needed for the following SQL
' 3/10/16 - changed SQL to add phonenumber to the insert.

    strSQL = "INSERT INTO dbAwarieOtwarte (nrMaszyny, nazwaMaszyny, Zglaszajacy, dataZgloszenia, dataZakonczenia,
        godzinaZgloszenia, Przyczyna, Obszar, Telefon, Komentarz, PhoneNumber) VALUES ('" &
        Me!txtNrMaszyny & "', '" & Me!txtNazwa & "', '" & Me!txtZglaszajacy &
        "', '" & Me!txtData & "', '" & Me!txtData & "', '" & Me!txtGodzina &
        "', '" & Me!listPrzyczyna & "," & Me!txtNazwa & "," & Me!txtNrMaszyny
        & "," & Me!txtObszar & "', '" & Me!txtObszar & "', '" & Me!txtTel &
        "', '" & Me!txtKomentarz & "', '" & rsPhone!PhoneNumber & "');"

        'DoCmd.SetWarnings False
        dbs.Execute strSQL
        'DoCmd.SetWarnings True
        rsPhone.moveNext
    Loop
    rsPhone.Close
    set rsPhone = Nothing
    dbs.close
    set dbs = Nothing
    DoCmd.Close '        DoCmd.OpenReport "repAwariaOtwarta", acViewPreview, , "ID=" & DMax("ID", "dbAwarieOtwarte")
End If
End Sub