【问题标题】:VB6. Proceesing ADODB Table Is there a better way of doing this?VB6。处理 ADODB 表有没有更好的方法来做到这一点?
【发布时间】:2015-04-30 15:45:04
【问题描述】:

我正在使用 .Open 检查记录是否存在。 如果存在,我将其删除。 如果没有,我添加它。 然后我关闭 ADODB 记录集。

我确信有更好的方法来做到这一点 - 这可能是一种缓慢的方法。 有没有办法只用一个打开和一个关闭来做到这一点?

这是我的代码(在 Do 循环中):

  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  

【问题讨论】:

  • A) 不应连接字符串来构建 SQL 查询。 B) 为什么删除然后插入而不是更新?
  • 这段代码中的sql注入风险让我很难过:(
  • A) 因为 SQL 注入 B) 因为是两个事务而不是一个
  • A) 没有机会 B) 我正在检查记录是否存在。可能不会。
  • A) 告诉我如何正确操作。 B) 如果我使用 Update 但记录不存在会怎样?

标签: vb6 adodb


【解决方案1】:

执行此操作的最佳方法是从您的代码批量插入临时表,然后调用存储过程将临时表中的数据合并到适当的表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多