Я хотел бы вставить ряд процентов для каждого клиента в конце каждого месяца только после проверки того же. Он работает для первого, но не для остальных. Я не знаю, как использовать «For..each» здесь ...: |Как вставить новую строку для каждой записи в таблицу?
Любая помощь будет оценена по достоинству.
Спасибо!
Dim Str(0) As String
Str(0) = GetID("Transactions", "ID")
Dim TempStr(5) As String
Try
Conn.Open()
Com.CommandText = "Select * From Customer"
Dr = Com.ExecuteReader
While Dr.Read()
TempStr(0) = Dr(0).ToString
TempStr(1) = Dr(2).ToString
TempStr(2) = Dr(3).ToString
TempStr(3) = Dr(5).ToString
TempStr(4) = Dr(6).ToString
TempStr(5) = Dr(7).ToString
Dim LastIntDate = DateAdd("m", 0, DateSerial(Year(Today), Month(Today), 0))
Try
Com.CommandText = "Select * From Transactions WHERE CID=" & TempStr(0).ToString & " AND TDate=#" & LastIntDate & "# AND Description='Interest'"
Dr2 = Com.ExecuteReader
If Dr2.Read = True Then
Dr2.Close()
Else
Try
Com.CommandText = "INSERT INTO Transactions Values(?,?,?,?,?,?,?)"
With Com.Parameters
.Add("@ID", OleDb.OleDbType.VarChar).Value = Str(0).ToString
.Add("@CustID", OleDb.OleDbType.VarChar).Value = TempStr(0).ToString
.Add("@TDate", OleDb.OleDbType.Date).Value = Date.Today
.Add("@Credit", OleDb.OleDbType.Currency).Value = 0
.Add("@Debit", OleDb.OleDbType.VarChar).Value = 500
.Add("@Balance", OleDb.OleDbType.VarChar).Value = Val(TempStr(3) + Interest)
.Add("@Desc", OleDb.OleDbType.VarChar).Value = "Interest"
End With
Com.ExecuteNonQuery()
Com.Parameters.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Try
Com.CommandText = "Update Customer Set CurrBal=? WHERE ID=?"
With Com.Parameters
.Add("@CurrBal", OleDb.OleDbType.VarChar).Value = (TempStr(3) + Interest)
.Add("@CustID", OleDb.OleDbType.VarChar).Value = TempStr(0).ToString
End With
Com.ExecuteNonQuery()
Com.Parameters.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Dr2.Close()
Catch ex As Exception
End Try
End While
Dr.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Conn.Close()
На самом деле мне не нужно это искать, поэтому для этого используется Dr.read = False. Если у него этого нет, только тогда интерес должен быть опубликован. – Abhi
Тогда вам будет лучше проверять 'Dr.HasRows', чем видеть, возвращает ли первое чтение false. – Crowcoder
Вы можете сэкономить еще больше неприятностей, выполнив 'INSERT INTO [Транзакции] .. blah bah .. WHERE NOT EXISTS (SELECT ... where cid = и т. Д. Это устранит первую команду и цикл. – Crowcoder