excel-中台数据库搭建(一)


最近事情很多,有好的,有不好的。项目拖延了很久,大概有20多天,项目是之前答应好的,总算告一段落,想着做一些总结,写一份8月的日志。

  • 在这个月,姥爷去世了,第一次直面亲人的离世,没有看到水晶棺的那一刻,总归没有多少感触,当看到的那一刻,眼泪怎么也止不住的流,以前的种种经历就像灯片一样在眼前划过。

  • 另一个事情,和小彭的感情也变好了一些,可能是两人在最近都经历了亲人的离开,心理上难免走进了一点,也算是这个月的安慰吧

  • 还有一个事是对于自己的思考,有两个项目的机会,一个是慧婷希望一起合作一个画画的项目,一个是牛杰的抢票业务。但是最近也不知道为什么,总也提不起精神。以前的时候老因为项目的事放别人鸽子,最近突然觉得,人,要守信

  • 最后聊聊工作,最近工作上也有点不顺,感觉最近没有精神头,很多知道的事也不知道怎么干了,很困扰,不知道是瓶颈还是什么,总说不清,反正工作上是不太舒服,没什么事,也有点事,有点事又不想干,不想干又不甘心,说不清。

经过半个多月的学习,查资料,构思,加上家里乱七八糟的事,终于把系统做的差不多。

这个项目属于第一次写VBA项目,之前都是用公式做自动化,但是公式能做的毕竟有限,所以还是想练习下VBA的系统,没准以后用的着,也是自己百闲中的一个小兴趣吧。

一、part1

在做这个系统中,初想挺简单的,无非就是调调数据库,做做查询,实际做起来还是有点东西的,在这个项目中遇到几个困难

  1. 数据库的设计(如何把数据库分开设计,都有哪些数据需要分开,设计的时候给自己造成了很多的困难)
  2. 窗体的设计(设计窗体我没试过,第一次设计窗体,还行,没那么复杂)
  3. 数据更新后不想调数据库,如何把数据放到指定位置
  4. 数据库联表查询,多个数据库,联表查询可费了老鼻子劲了
  5. 数据库ID值更新,更新一个数据,在其他数据库中更新这个id(后来我放弃了)

总体来说就是这几个问题,幸好有chatgpt,要不自己真不知道啥时候能整出来。

二、part2

接下来说一下具体功能上的实现

第一个:新增数据

功能设计:

这个功能就是一个批量导入数据,需要一个固定的excel模板,点击按钮 => 选则文件 => 获取数据 => 添加数据库 => 同步添加到这个excel里

遇到的问题和卡点:

  1. 最初设计的时候最后一步是希望直接添加到excel里的,但是后来在实现的过程中,发现如果不调取数据库,id值的获取是个问题,因为如果要删除的话,id就全乱了,所以最后还是添加完数据以后再调用一次数据库。

代码设计:

  1. 连接数据库和调取全部数据用的次数比较多,需要封装一个方法
  2. 调用数据库中”字段名“也使用频繁,而且改动比较麻烦,为了方便维护,需要用数组将数据存起来,以后需要改动代码,只用改动数组就可以了
  3. 添加的步骤比较繁琐,后续用的也不多,可以根据功能用”面向过程“思路实现

具体实现:

Option Explicit
Public myArray() As Variant
Sub InitializeArray()
    ReDim myArray(1 To 13) As Variant
    myArray(1) = "id"
    myArray(2) = "省份"
    myArray(3) = "市"
    myArray(4) = "[区/县]"
    myArray(5) = "邮编"
    myArray(6) = "学校名称"
    myArray(7) = "地址信息"
    myArray(8) = "姓名"
    myArray(9) = "职称"
    myArray(10) = "联系方式"
    myArray(11) = "学校级别"
    myArray(12) = "学校性质"
    myArray(13) = "归属人"
End Sub
'第一步 打开对话框

Public Sub forlder_open()
    Dim fileDialog As fileDialog
    Dim selectedFile As Variant
    
    ' 创建文件选择对话框
    Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
    
    ' 设置对话框属性
    fileDialog.AllowMultiSelect = False
    fileDialog.Title = "选择 Excel 文件"
    fileDialog.Filters.Clear
    fileDialog.Filters.Add "Excel 文件", "*.xlsx; *.xls"
    
    ' 显示文件选择对话框并获取选中的文件
    If fileDialog.Show = -1 Then
        selectedFile = fileDialog.SelectedItems(1)
        Call open_fild(selectedFile)
    Else
        Exit Sub ' 用户取消了选择,退出子过程
    End If
    
End Sub
'第二步 获取excel对象,并获取数据

Public Sub open_fild(selectedFile)

    Dim excelApp As Object
    Dim Workbook As Object
    Dim Worksheet As Object
    Dim fieldValue As Variant


    Call 连接数据库     '数据库连接
    
    MsgBox "数据库已连接"
    
    ' 创建 Excel 应用程序对象
    Set excelApp = CreateObject("Excel.Application")
    
    ' 打开选中的 Excel 文件
    Set Workbook = excelApp.Workbooks.Open(selectedFile)
    
    ' 获取 Excel 数据并填充到数据库
    Set Worksheet = Workbook.Sheets(1) ' 假设数据在第一个工作表中
    
    Call add_sql(Worksheet)
    
    ' 关闭 Excel 文件
    Workbook.Close False
    
    ' 关闭 Excel 应用程序
    excelApp.Quit
    Set Workbook = Nothing
    Set excelApp = Nothing

End Sub
'第三步 增加数据

Public Sub add_sql(Worksheet)
        
    Dim fieldNames() As String
    Dim dataArray() As Variant
    Dim row As Long
    Dim column As Long
    Dim sql As String
    
    ' 获取字段名称数组
    ReDim fieldNames(1 To Worksheet.UsedRange.Columns.Count)
    For column = 1 To Worksheet.UsedRange.Columns.Count
        fieldNames(column) = Worksheet.Cells(1, column).Value
    Next column
    
    ' 获取数据数组
    ReDim dataArray(1 To Worksheet.UsedRange.Rows.Count - 1, 1 To Worksheet.UsedRange.Columns.Count)
    For row = 2 To Worksheet.UsedRange.Rows.Count
        For column = 1 To Worksheet.UsedRange.Columns.Count
            dataArray(row - 1, column) = Worksheet.Cells(row, column).Value
        Next column
    Next row
    
    ' 执行插入语句将数据插入到数据库表中
    For row = 1 To UBound(dataArray, 1)
        sql = "INSERT INTO 数据总表(" & Join(fieldNames, ", ") & ") VALUES("
        For column = 1 To UBound(dataArray, 2)
            sql = sql & "'" & Replace(CStr(dataArray(row, column)), "'", "''") & "', "
        Next column
        sql = Left(sql, Len(sql) - 2) & ")"
        'MsgBox sql
        cnn.Execute sql
    Next row


    'Call UpdateForeignKey(Worksheet.UsedRange.Rows.Count - 1) '更新外键
    Call 获取所有数据
    
    'MsgBox Worksheet.UsedRange.Rows.Count
    MsgBox "写入数据"
    
End Sub

具体实现:

excel-中台数据库搭建(二)

excel-中台数据库搭建(三)

excel-中台数据库搭建(四)

销售系统搭建(一)

销售系统搭建(二)