2015-04-30 3 views
0

Я использую .Open, чтобы проверить, существует ли запись. Если он существует, я удаляю его. Если нет, я добавляю его. Затем я закрываю набор записей ADODB.VB6. Выполнение таблицы ADODB. Есть ли лучший способ сделать это?

Я уверен, что есть лучший способ сделать это - и это, вероятно, медленный способ сделать это. Есть ли способ сделать это только с одним Open и One close?

Вот мой код (который находится в Do Loop):

Dim myRecSet As New ADODB.Recordset 
     Dim strSql As String 
     strSql = "select * from RentBalances where KeyTcyIdSubAcDate = '" & sKeyTcyIdSubAcDate & "'" 
     'Display "SQL: " & strSql 
     myRecSet.Open strSql, SQLSVSExtractConnection, adOpenKeyset, adLockOptimistic 
     'Display "Total no of records = " & myRecSet.RecordCount 
     If myRecSet.RecordCount < 1 Then 
      'Display ("There are no RentBalances record for this ID. ID = " & sKeyTcyIdSubAcDate) 
     Else 
      ' delete the record 

      myRecSet.Delete 
      myRecSet.UpdateBatch 
     End If 

     myRecSet.AddNew 
     myRecSet!KeyTcyIdSubAcDate = rsLocal.Fields("KeyTcyIdSubAcDate") 
     myRecSet!KeyTcyId = rsLocal.Fields("KeyTcyId") 
     myRecSet!SubAc = rsLocal.Fields("SubAc") 
     myRecSet!PeriodEndDate = rsLocal.Fields("PeriodEndDate") 

     myRecSet!Amount = rsLocal.Fields("Amount") 
     myRecSet!RentAmount = rsLocal.Fields("RentAmount") 
     myRecSet!ChargesAmount = rsLocal.Fields("ChargesAmount") 
     myRecSet!AdjustmentAmount = rsLocal.Fields("AdjustmentAmount") 
     myRecSet!BenefitAmount = rsLocal.Fields("BenefitAmount") 
     myRecSet!BenefitBalance = rsLocal.Fields("BenefitBalance") 
     myRecSet!TenantBalance = rsLocal.Fields("TenantBalance") 
     myRecSet!PayAmount = rsLocal.Fields("PayAmount") 
     myRecSet!TimeStamp = rsLocal.Fields("TimeStamp") 
     myRecSet!UpdateFlag = rsLocal.Fields("UpdateFlag") 
     myRecSet.Update 
     myRecCount = myRecCount + 1 
     myRecSet.Close 
+0

A) Вы не должны конкатенировать строки для создания SQL-запросов. B) Зачем удалять, а затем вставлять вместо простого обновления? – UnhandledExcepSean

+0

A) Почему? Б) Почему нет? –

+2

Целочисленный риск инъекции в этом коде делает меня грустным :( –

ответ

0

Самый оптимальный способ сделать это навалом вставить в промежуточную таблицу из кода, а затем вызвать хранимую процедуру слияния данные из вашей промежуточной таблицы в соответствующую таблицу.