VBA 数据库同一表的当前行与其他行的主键重复判断实现方案1

[复制链接]
发表于 2025-10-18 20:52:12 | 显示全部楼层 |阅读模式
目标,判断是否主键重复,不重复则登录新数据,重复则不登录。
界说范例:
DataRecord
  tableName 表名
  rowNumber 行号
  columnName 列名
  data 数据
想要实现的代码逻辑如下:
模拟数据库的登录过程。假设现在登录了5条数据,要登录第6条数据。
规则1,判断其他5行数据的全部列,与第6行已经录的全部列的数据逐一比力,如果存在差别等的,分析主键不重复,可以登录新的数据。
规则2,如果不存在同等的,则判断我们这次要登录的这个列的其他行的数据,是否存在差别等的,如果差别等则主键不重复,可以登录新的数据。
规则3,如果仍然没有差别等的数据,分析主键重复,不能登录这条数据。
代码布局如下:
私有DataRecordType类
模块1

DataRecordType类代码
  1. ' DataRecordType 类模块
  2. Private pTableName As String
  3. Private pRowNumber As Long
  4. Private pColumnName As String
  5. Private pData As String
  6. ' 定义公共属性以访问私有变量
  7. Public Property Get tableName() As String
  8.     tableName = pTableName
  9. End Property
  10. Public Property Let tableName(value As String)
  11.     pTableName = value
  12. End Property
  13. Public Property Get rowNumber() As Long
  14.     rowNumber = pRowNumber
  15. End Property
  16. Public Property Let rowNumber(value As Long)
  17.     pRowNumber = value
  18. End Property
  19. Public Property Get columnName() As String
  20.     columnName = pColumnName
  21. End Property
  22. Public Property Let columnName(value As String)
  23.     pColumnName = value
  24. End Property
  25. Public Property Get data() As String
  26.     data = pData
  27. End Property
  28. Public Property Let data(value As String)
  29.     pData = value
  30. End Property
复制代码
模块1代码
  1. Sub AddData(dataCollection As Collection, tableName As String, rowNumber As Long, columnName As String, data As String)
  2.     Dim record As DataRecordType
  3.     Set record = New DataRecordType  ' 关键:实例化对象
  4.     record.tableName = tableName
  5.     record.rowNumber = rowNumber
  6.     record.columnName = columnName
  7.     record.data = data
  8.     dataCollection.Add record
  9. End Sub
  10. Function InsertData(dataCollection As Collection, tableName As String, rowNumber As Long, columnName As String, data As String) As Boolean
  11.     Dim i As Long
  12.     Dim sameTableRowData As String
  13.     Dim otherTableRowData As String
  14.     Dim record1 As DataRecordType
  15.     Dim record2 As DataRecordType
  16.    
  17.     Dim noexist As Boolean
  18.    
  19.     For i = 1 To dataCollection.Count
  20.         Set record1 = dataCollection(i)  ' 关键:从集合中获取对象
  21.         If record1.tableName = tableName And record1.rowNumber = rowNumber Then
  22.             For j = 1 To dataCollection.Count
  23.                 Set record2 = dataCollection(j)
  24.                 If record2.tableName = record1.tableName And record2.columnName = record1.columnName And record2.rowNumber <> record1.rowNumber Then
  25.                     If record2.data <> record1.data Then
  26.                         Call AddData(dataCollection, tableName, rowNumber, columnName, data)
  27.                         InsertData = True
  28.                         Exit Function
  29.                     End If
  30.                     Exit For
  31.                 End If
  32.             Next j
  33.         End If
  34.     Next i
  35.    
  36.     For j = 1 To dataCollection.Count
  37.         Set record2 = dataCollection(j)
  38.         If record2.tableName = tableName And record2.columnName = columnName And record2.rowNumber <> rowNumber Then
  39.             If record2.data <> data Then
  40.                 Call AddData(dataCollection, tableName, rowNumber, columnName, data)
  41.                 InsertData = True
  42.                 Exit Function
  43.             End If
  44.             Exit For
  45.         End If
  46.     Next j
  47.    
  48.     InsertData = False
  49. End Function
  50. Sub TestInsertData()
  51.     Dim dataCollection As Collection
  52.     Set dataCollection = New Collection
  53.    
  54.     ' 添加前 5 条数据
  55.     Call AddData(dataCollection, "Table1", 1, "Column1", "Data1")
  56.     Call AddData(dataCollection, "Table1", 1, "Column2", "Data2")
  57.     Call AddData(dataCollection, "Table1", 1, "Column3", "Data3")
  58.     Call AddData(dataCollection, "Table1", 2, "Column1", "Data1")
  59.     Call AddData(dataCollection, "Table1", 2, "Column3", "Data3")
  60.    
  61.     ' 插入第 6 条数据并检查结果
  62.     Dim result As Boolean
  63.     result = InsertData(dataCollection, "Table1", 2, "Column2", "Data2")
  64.    
  65.     If result Then
  66.         MsgBox "第 6 条数据已插入。"
  67.     Else
  68.         MsgBox "第 6 条数据未插入(与现有数据重复)。"
  69.     End If
  70. End Sub
复制代码
运行TestInsertData()


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表