当前位置: 首页 > news >正文

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

目的,判断是否主键重复,不重复则登录新数据,重复则不登录。

定义类型:
DataRecord
  tableName 表名
  rowNumber 行号
  columnName 列名
  data 数据

想要实现的代码逻辑如下:
模拟数据库的登录过程。假设现在登录了5条数据,要登录第6条数据。
规则1,判断其他5行数据的所有列,与第6行已经录的所有列的数据一一比较,如果存在不一致的,说明主键不重复,可以登录新的数据。
规则2,如果不存在一致的,则判断我们这次要登录的这个列的其他行的数据,是否存在不一致的,如果不一致则主键不重复,可以登录新的数据。
规则3,如果仍然没有不一致的数据,说明主键重复,不能登录这条数据。

代码结构如下:
私有DataRecordType类
模块1
在这里插入图片描述

DataRecordType类代码

' DataRecordType 类模块
Private pTableName As String
Private pRowNumber As Long
Private pColumnName As String
Private pData As String

' 定义公共属性以访问私有变量
Public Property Get tableName() As String
    tableName = pTableName
End Property
Public Property Let tableName(value As String)
    pTableName = value
End Property

Public Property Get rowNumber() As Long
    rowNumber = pRowNumber
End Property
Public Property Let rowNumber(value As Long)
    pRowNumber = value
End Property

Public Property Get columnName() As String
    columnName = pColumnName
End Property
Public Property Let columnName(value As String)
    pColumnName = value
End Property

Public Property Get data() As String
    data = pData
End Property
Public Property Let data(value As String)
    pData = value
End Property

模块1代码

Sub AddData(dataCollection As Collection, tableName As String, rowNumber As Long, columnName As String, data As String)
    Dim record As DataRecordType
    Set record = New DataRecordType  ' 关键:实例化对象
    record.tableName = tableName
    record.rowNumber = rowNumber
    record.columnName = columnName
    record.data = data
    dataCollection.Add record
End Sub

Function InsertData(dataCollection As Collection, tableName As String, rowNumber As Long, columnName As String, data As String) As Boolean
    Dim i As Long
    Dim sameTableRowData As String
    Dim otherTableRowData As String
    Dim record1 As DataRecordType
    Dim record2 As DataRecordType
    
    Dim noexist As Boolean
    
    For i = 1 To dataCollection.Count
        Set record1 = dataCollection(i)  ' 关键:从集合中获取对象
        If record1.tableName = tableName And record1.rowNumber = rowNumber Then
            For j = 1 To dataCollection.Count
                Set record2 = dataCollection(j)
                If record2.tableName = record1.tableName And record2.columnName = record1.columnName And record2.rowNumber <> record1.rowNumber Then
                    If record2.data <> record1.data Then
                        Call AddData(dataCollection, tableName, rowNumber, columnName, data)
                        InsertData = True
                        Exit Function
                    End If
                    Exit For
                End If
            Next j
        End If
    Next i
    
    For j = 1 To dataCollection.Count
        Set record2 = dataCollection(j)
        If record2.tableName = tableName And record2.columnName = columnName And record2.rowNumber <> rowNumber Then
            If record2.data <> data Then
                Call AddData(dataCollection, tableName, rowNumber, columnName, data)
                InsertData = True
                Exit Function
            End If
            Exit For
        End If
    Next j
    
    InsertData = False
End Function

Sub TestInsertData()
    Dim dataCollection As Collection
    Set dataCollection = New Collection
    
    ' 添加前 5 条数据
    Call AddData(dataCollection, "Table1", 1, "Column1", "Data1")
    Call AddData(dataCollection, "Table1", 1, "Column2", "Data2")
    Call AddData(dataCollection, "Table1", 1, "Column3", "Data3")
    Call AddData(dataCollection, "Table1", 2, "Column1", "Data1")
    Call AddData(dataCollection, "Table1", 2, "Column3", "Data3")
    
    ' 插入第 6 条数据并检查结果
    Dim result As Boolean
    result = InsertData(dataCollection, "Table1", 2, "Column2", "Data2")
    
    If result Then
        MsgBox "第 6 条数据已插入。"
    Else
        MsgBox "第 6 条数据未插入(与现有数据重复)。"
    End If
End Sub

运行TestInsertData()
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/58540.html

相关文章:

  • Spike RISC-V ISA 模拟器
  • doris :SAP HANA
  • gRPC学习笔记
  • 双指针算法——配合例题讲解
  • 镭神C32测试LEGO-LOAM
  • IntelliJ IDEA 2021版创建springboot项目的五种方式
  • 深度解析前端页面性能优化
  • Python与SQL深度融合实战案例:打造你的数据处理秘籍
  • C++后端服务器开发技术栈有哪些?有哪些资源或开源库拿来用?
  • 嵌入式八股C语言---指针与函数篇
  • ESP8266 入门(第 2 部分):使用 AT 命令
  • c#面试题整理7
  • JavaScript系列07-事件委托:深入剖析与实践技术
  • LeetCode 1876长度为三且各字符不同的子字符串
  • 【数据结构】-- LinkedList与链表(1)
  • Docker 实践与应用举例
  • CCF-CSP第27次认证第1题 --《如此编码》
  • 大模型量化技术原理总结 [吃果冻不吐果冻皮]
  • 自然语言处理:最大期望值算法
  • 从案例分析看微型工业计算机在智能社区中的卓越表现
  • Springboot redis bitMap实现用户签到以及统计,保姆级教程
  • SpringBoot全栈开发:从数据库到Markdown文件导出的终极实践指南
  • TCP协议与包头格式
  • 计算机视觉中的前向卷绕算法全解析
  • 从0到1入门RabbitMQ
  • 完整例子和调用关系qt OpenGL
  • 线上接口tp99突然升高如何排查?
  • Python Flask 渲染静态程动态页面
  • PerceptronLexicalAnalyzer浅讲
  • 鬼泣:移动系统2