2016-02-02 6 views
0

У меня есть 31 текстовых полей, которые получают заселенные с ADO из таблицы календаря в соответствии с функциями, указанными ниже:UPDATE с ADO в Access VBA массив

Private Function FillDates() 
    Dim cnn As ADODB.Connection 
    Dim ssql As String 
    Dim rst As ADODB.Recordset 
    Set cnn = CurrentProject.Connection 
    Dim i As Integer 
    Dim Records As Integer 
    ssql = "SELECT RoomAvailabilityId, Availability FROM RoomAvailability WHERE Month(AvailabilityDate)=Month(Now()) AND RoomTypesId=1" 
    Set rst = New ADODB.Recordset 
    rst.CursorLocation = adUseClient 
    rst.Open ssql, cnn 
    Records = rst.RecordCount 
    For i = 1 To Records 
    Me("idtext" & i).Value = rst.Fields!RoomAvailabilityId 
    Me("Text" & i).Value = rst.Fields!Availability 
    rst.MoveNext 
    Next i 
     rst.Close 
     Set rst = Nothing 
End Function 

Это упрощенная версия фактического кода. Фактический код скрывает текстовые поля, когда месяц составляет 30 дней или 29/28 дней.

Итак, у меня есть 2 значения, которые теперь хранятся в моей сетке, состоящей из вышеуказанных текстовых полей.

Теперь я хочу обновить поле таблицы «Доступность» (Number - Long Integer Datatype) нажатием кнопки, и я не могу коснуться базы с этим.

Не могли бы вы предложить, как? Это мой начинает не рабочий код:

Private Sub cmdUpdatetxt_Click() 
Dim cn As ADODB.Connection '* Connection String 
Dim oCm As ADODB.Command '* Command Object 
Dim iRecAffected As Integer 
Set cn = CurrentProject.Connection 
Dim i As Integer 
For i = 1 To 31 
AvailableRooms = Me("txt" & i).Value 
AvailableRoomsId = Me("idtext" & i).Value 
Next i 
Set oCm = New ADODB.Command 
oCm.ActiveConnection = cn 
oCm.CommandText = "Update RoomAvailability Set Availability ='" & AvailableRooms & "' WHERE RoomAvailabilityId = '" & AvailableRoomsId & "' AND Month(RoomAvailability.AvailabilityDate) = '" & cboMonthYear.Value & "' " 
oCm.Execute iRecAffected 
If iRecAffected = 0 Then 
MsgBox "Nessun Utente Inserito" 
End If 
If cn.State <> adStateClosed Then 
cn.Close 
If Not oCm Is Nothing Then Set oCm = Nothing 
If Not cn Is Nothing Then Set cn = Nothing 
End If 
End Sub 

Большое спасибо заранее

+0

Вам нужен ваш SQL в следующем цикле, для начала, это будет выполнять инструкцию 31 раз, или вы можете построить SQL с 31 текстовым полем. Из того, что я могу собрать, вам нужно «update RoomAvailability set availabilty =» & AvailableRooms & «where .........» & AvailableRoomsId, то, что у вас есть, будет только поле № 31. –

+0

Спасибо, Натан_Сав, ты спас мой день. оно работает. Я сделаю ответ, чтобы поделиться кодом. спасибо – Kurt

ответ

0

Согласно Nathan_Sav предложению, это рабочий код:

Private Sub cmdUpdatetxt_Click() 

    On Error GoTo ErrorTrap 

    Dim i As Integer 
    For i = 1 To 31 
    Dim cn As ADODB.Connection '* Connection String 
    Dim oCm As ADODB.Command '* Command Object 
    Dim iRecAffected As Integer 
    Set cn = CurrentProject.Connection 
    AvailableRooms = Me("txt" & i).Value 
    AvailableRoomsId = Me("idtext" & i).Value 
    Set oCm = New ADODB.Command 
    oCm.ActiveConnection = cn 
    oCm.CommandText = "Update RoomAvailability Set Availability =" & AvailableRooms & " WHERE RoomAvailabilityId = " & AvailableRoomsId & " AND Month(RoomAvailability.AvailabilityDate) = '" & cboMonthYear.Value & "' " 
    oCm.Execute iRecAffected 
    If iRecAffected = 0 Then 
    MsgBox "Nessun Utente Inserito" 
    End If 
    If cn.State <> adStateClosed Then 
    cn.Close 
    If Not oCm Is Nothing Then Set oCm = Nothing 
    If Not cn Is Nothing Then Set cn = Nothing 
    End If 
    Next i 
    Exit Sub 
ErrorTrap: 
    MsgBox (Err.Description) 
End Sub 

великий день

+0

Я предлагаю добавить обработчик исключений – IgorM