增加删除图库功能和增加上传图库检查功能

This commit is contained in:
2026-01-06 14:08:13 +08:00
parent 75a1ad2df6
commit 156989fc7c
4 changed files with 483 additions and 11 deletions

Binary file not shown.

28
CorelDRAW.Designer.vb generated
View File

@@ -35,6 +35,8 @@ Partial Class CorelDRAW
Me.ToolStripButton3 = New System.Windows.Forms.ToolStripButton()
Me.ToolStripButton1 = New System.Windows.Forms.ToolStripButton()
Me.ToolStripButton2 = New System.Windows.Forms.ToolStripButton()
Me.ToolStripComboBox1 = New System.Windows.Forms.ToolStripComboBox()
Me.ToolStripButton5 = New System.Windows.Forms.ToolStripButton()
CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer1.Panel2.SuspendLayout()
Me.SplitContainer1.SuspendLayout()
@@ -52,7 +54,7 @@ Partial Class CorelDRAW
'
Me.SplitContainer1.Panel2.Controls.Add(Me.RichTextBox1)
Me.SplitContainer1.Panel2.Controls.Add(Me.ToolStrip1)
Me.SplitContainer1.Size = New System.Drawing.Size(863, 655)
Me.SplitContainer1.Size = New System.Drawing.Size(1263, 655)
Me.SplitContainer1.SplitterDistance = 287
Me.SplitContainer1.TabIndex = 0
'
@@ -61,16 +63,16 @@ Partial Class CorelDRAW
Me.RichTextBox1.Dock = System.Windows.Forms.DockStyle.Fill
Me.RichTextBox1.Location = New System.Drawing.Point(0, 25)
Me.RichTextBox1.Name = "RichTextBox1"
Me.RichTextBox1.Size = New System.Drawing.Size(863, 630)
Me.RichTextBox1.Size = New System.Drawing.Size(1263, 630)
Me.RichTextBox1.TabIndex = 1
Me.RichTextBox1.Text = ""
'
'ToolStrip1
'
Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripLabel1, Me.ToolStripTextBox2, Me.ToolStripLabel2, Me.ToolStripTextBox1, Me.ToolStripButton4, Me.ToolStripButton3, Me.ToolStripButton1, Me.ToolStripButton2})
Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripLabel1, Me.ToolStripTextBox2, Me.ToolStripLabel2, Me.ToolStripTextBox1, Me.ToolStripButton4, Me.ToolStripButton3, Me.ToolStripButton1, Me.ToolStripButton2, Me.ToolStripComboBox1, Me.ToolStripButton5})
Me.ToolStrip1.Location = New System.Drawing.Point(0, 0)
Me.ToolStrip1.Name = "ToolStrip1"
Me.ToolStrip1.Size = New System.Drawing.Size(863, 25)
Me.ToolStrip1.Size = New System.Drawing.Size(1263, 25)
Me.ToolStrip1.TabIndex = 0
Me.ToolStrip1.Text = "ToolStrip1"
'
@@ -134,11 +136,25 @@ Partial Class CorelDRAW
Me.ToolStripButton2.Size = New System.Drawing.Size(60, 22)
Me.ToolStripButton2.Text = "显示步骤"
'
'ToolStripComboBox1
'
Me.ToolStripComboBox1.Name = "ToolStripComboBox1"
Me.ToolStripComboBox1.Size = New System.Drawing.Size(300, 25)
'
'ToolStripButton5
'
Me.ToolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
Me.ToolStripButton5.Image = CType(resources.GetObject("ToolStripButton5.Image"), System.Drawing.Image)
Me.ToolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta
Me.ToolStripButton5.Name = "ToolStripButton5"
Me.ToolStripButton5.Size = New System.Drawing.Size(72, 22)
Me.ToolStripButton5.Text = "删除素材库"
'
'CorelDRAW
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(863, 655)
Me.ClientSize = New System.Drawing.Size(1263, 655)
Me.Controls.Add(Me.SplitContainer1)
Me.Name = "CorelDRAW"
Me.Text = "Form1"
@@ -163,4 +179,6 @@ Partial Class CorelDRAW
Friend WithEvents SplitContainer1 As SplitContainer
Friend WithEvents ToolStripButton1 As ToolStripButton
Friend WithEvents ToolStripButton2 As ToolStripButton
Friend WithEvents ToolStripComboBox1 As ToolStripComboBox
Friend WithEvents ToolStripButton5 As ToolStripButton
End Class

View File

@@ -182,6 +182,21 @@
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolStripButton5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

View File

@@ -11,15 +11,15 @@ Imports VGCore
Public Class CorelDRAW
Public M_Redisip As String = "127.0.0.1"
Public M_Redisport As Integer = 10079 '6379 ' 10079
Public M_Redispassword As String = "blw@redis-ser@123" ' "" '
Public M_Redisport As Integer = 6379 '10079 ' 10079
Public M_Redispassword As String = "" ' "blw@redis-ser@123" ' "" '
'redis消息队列
Public M_RedisQueue As Queue
'事件处理线程
Public M_EventThread As Thread
'素材库路径
Private M_MaterialPath As String = "R:\Canvas\material\" '"D:\Canvas\material\" '
Private M_MaterialPath As String = "D:\Canvas\material\" ' "R:\Canvas\material\" '
'成平文件路径
Private M_TplPath As String = "D:\CorelDRAW\"
Public G_RedisSub, G_Redislish As RedisSubscriber
@@ -157,8 +157,6 @@ Public Class CorelDRAW
InpotMessage1("3、打开模板库并创建新文件等待构建图像")
InpotMessage1("2、酒店标题生成")
Dim hotelName As String = ""
If node.project IsNot Nothing AndAlso node.project.Count > 0 Then
@@ -388,6 +386,286 @@ Public Class CorelDRAW
End Try
End Sub
''' <summary>
''' 检测图库文件命名及内容是否符合规范
''' </summary>
''' <param name="filePath">图库文件路径</param>
''' <param name="errorMessage">错误信息输出</param>
''' <returns>是否符合规范</returns>
Public Function CheckLibraryFile(ByVal filePath As String, ByRef errorMessage As String) As Boolean
Dim srcDoc As Document
Try
' 获取文件名(不含路径和扩展名)
Dim fileName As String = Path.GetFileNameWithoutExtension(filePath)
' 分割文件名
Dim fileParts() As String = fileName.Split("_")
' 检查文件名基本格式
If fileParts.Length < 5 Then
errorMessage = "文件名格式错误必须包含公司_系列_库名_版本_备注"
Return False
End If
' 检查库名
Dim libName As String = fileParts(2)
If libName <> "图标图库" AndAlso libName <> "模型图库" Then
errorMessage = "库名错误:只能为'图标图库'或'模型图库'"
Return False
End If
' 打开文件获取图像名称
srcDoc = APP.OpenDocument(filePath, False)
Dim imageNames As New List(Of Shape)
' 遍历所有页、图层和形状获取图像名称
For Each nPage As Page In srcDoc.Pages
For Each Layer As Layer In nPage.Layers
For Each Shape As Shape In Layer.Shapes
If Not String.IsNullOrEmpty(Shape.Name) Then
imageNames.Add(Shape)
End If
Next
Next
Next
' 遍历检查每个图像名称
For Each imageName As Shape In imageNames
If Not CheckImageName(imageName, libName, errorMessage) Then
Return False
End If
Next
' 关闭文件
srcDoc.Close()
errorMessage = ""
Return True
Catch ex As Exception
' 关闭文件
If srcDoc IsNot Nothing Then
srcDoc.Close()
End If
errorMessage = "文件处理错误:" & ex.Message
Return False
End Try
End Function
''' <summary>
''' 检查单个图像名称是否符合规范
''' </summary>
''' <param name="imageName">图像名称</param>
''' <param name="libName">图库类型</param>
''' <param name="errorMessage">错误信息输出</param>
''' <returns>是否符合规范</returns>
Private Function CheckImageName(imageName As Shape, ByVal libName As String, ByRef errorMessage As String) As Boolean
' 分割图像名称
Dim parts() As String = imageName.Name.Split("_")
If parts.Length < 2 Then
errorMessage = $"图像名称'{imageName.Name}'格式错误:缺少必要部分"
Return False
End If
Dim imageType As String = parts(0).ToLower()
Select Case libName
Case "模型图库"
Return CheckModelLibraryImage(imageType, parts, imageName, errorMessage)
Case "图标图库"
Return CheckIconLibraryImage(imageType, parts, imageName.Name, errorMessage)
Case Else
errorMessage = $"未知图库类型:{libName}"
Return False
End Select
End Function
''' <summary>
''' 检查模型图库图像名称
''' </summary>
Private Function CheckModelLibraryImage(ByVal imageType As String, ByVal parts() As String, imageName As Shape, ByRef errorMessage As String) As Boolean
Dim snode As String()
Select Case imageType
Case "mode"
' Mode_连体数_方向_颜色_宽_高
If parts.Length < 6 Then
errorMessage = $"Mode图像'{imageName.Name}'格式错误必须为Mode_N连体_方向_颜色_宽_高"
Return False
End If
' 检查连体数格式
If Not parts(1).EndsWith("连体") Then
errorMessage = $"Mode图像'{imageName.Name}'连体数格式错误:必须包含'连体'"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(parts(4)) OrElse Not IsNumeric(parts(5)) Then
errorMessage = $"Mode图像'{imageName.Name}'宽高格式错误:必须为数字"
Return False
End If
For Each imageNamenode As Shape In imageName.Shapes
snode = imageNamenode.Name.Split("_")
Select Case snode(0).ToLower()
Case "effect"
' Effect_效果名称_w_h
If snode.Length < 4 Then
errorMessage = $"Effect图像'{imageNamenode.Name}'格式错误必须为Effect_效果名称_w_h"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(snode(snode.Length - 2)) OrElse Not IsNumeric(snode(snode.Length - 1)) Then
errorMessage = $"Effect图像'{imageNamenode.Name}'宽高格式错误:必须为数字"
Return False
End If
Return True
Case "logo"
' Logo_图像类型_左右_宽_高
If snode.Length < 5 Then
errorMessage = $"Logo图像'{imageNamenode.Name}'格式错误必须为Logo_图像类型_左右(L/R)_宽_高"
Return False
End If
' 检查左右标识
If snode(2) <> "L" AndAlso snode(2) <> "R" Then
errorMessage = $"Logo图像'{imageNamenode.Name}'左右标识错误只能为L或R"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(snode(3)) OrElse Not IsNumeric(snode(4)) Then
errorMessage = $"Logo图像'{imageNamenode.Name}'宽高格式错误:必须为数字"
Return False
End If
Return True
Case "iconb"
' IconB_N连体_方向_颜色_宽_高
If snode.Length < 6 Then
errorMessage = $"IconB图像'{imageNamenode.Name}'格式错误必须为IconB_N连体_方向_颜色_宽_高"
Return False
End If
' 检查连体数格式
If Not snode(1).EndsWith("连体") Then
errorMessage = $"IconB图像'{imageNamenode.Name}'连体数格式错误:必须包含'连体'"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(snode(4)) OrElse Not IsNumeric(snode(5)) Then
errorMessage = $"IconB图像'{imageNamenode.Name}'宽高格式错误:必须为数字"
Return False
End If
Return True
Case "trench"
' Trench_槽位编号_w_h
If snode.Length < 4 Then
errorMessage = $"Trench图像'{imageNamenode.Name}'格式错误必须为Trench_槽位编号_w_h"
Return False
End If
' 检查槽位编号是否为数字
If Not IsNumeric(snode(1)) Then
errorMessage = $"Trench图像'{imageNamenode.Name}'槽位编号错误:必须为数字"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(snode(2)) OrElse Not IsNumeric(snode(3)) Then
errorMessage = $"Trench图像'{imageNamenode.Name}'宽高格式错误:必须为数字"
Return False
End If
End Select
Next
Return True
Case "mono"
' Mono_图像名称_w_h
If parts.Length < 4 Then
errorMessage = $"Mono图像'{imageName.Name}'格式错误必须为Mono_图像名称_w_h"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(parts(parts.Length - 2)) OrElse Not IsNumeric(parts(parts.Length - 1)) Then
errorMessage = $"Mono图像'{imageName.Name}'宽高格式错误:必须为数字"
Return False
End If
For Each imageNamenode In imageName.Shapes
snode = imageNamenode.Name.Split("_")
Select Case snode(0)
Case "location"
' location_图像类型_按键序号_w_h 或 location_图像类型_按键序号_w_h_行号
If snode.Length < 5 OrElse snode.Length > 6 Then
errorMessage = $"Location图像'{imageNamenode.Name}'格式错误必须为location_图像类型_按键序号_w_h[_行号]"
Return False
End If
' 检查按键序号是否为数字
If Not IsNumeric(snode(2)) Then
errorMessage = $"Location图像'{imageNamenode.Name}'按键序号错误:必须为数字"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(snode(3)) OrElse Not IsNumeric(snode(4)) Then
errorMessage = $"Location图像'{imageNamenode.Name}'宽高格式错误:必须为数字"
Return False
End If
' 如果有行号,检查是否为数字
If snode.Length = 6 AndAlso Not IsNumeric(snode(5)) Then
errorMessage = $"Location图像'{imageNamenode.Name}'行号错误:必须为数字"
Return False
End If
End Select
Next
Return True
Case Else
Return True
errorMessage = $"模型图库中包含未知图像类型:{imageType}"
Return False
End Select
End Function
''' <summary>
''' 检查图标图库图像名称
''' </summary>
Private Function CheckIconLibraryImage(ByVal imageType As String, ByVal parts() As String, ByVal imageName As String, ByRef errorMessage As String) As Boolean
Select Case imageType
Case "icon"
' Icon_图像名称_图像英文名称_w_h
If parts.Length < 5 Then
errorMessage = $"Icon图像'{imageName}'格式错误必须为Icon_图像名称_图像英文名称_w_h"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(parts(parts.Length - 2)) OrElse Not IsNumeric(parts(parts.Length - 1)) Then
errorMessage = $"Icon图像'{imageName}'宽高格式错误:必须为数字"
Return False
End If
Return True
Case "logo"
' Logo_图像名称_w_h
If parts.Length > 5 OrElse parts.Length < 4 Then
errorMessage = $"Logo图像'{imageName}'格式错误必须为Logo_图像名称_图像英文名称_w_h"
Return False
End If
' 检查宽高是否为数字
If Not IsNumeric(parts(parts.Length - 2)) OrElse Not IsNumeric(parts(parts.Length - 1)) Then
errorMessage = $"Logo图像'{imageName}'宽高格式错误:必须为数字"
Return False
End If
Return True
Case Else
errorMessage = $"图标图库中包含未知图像类型:{imageType}"
Return False
End Select
End Function
Public Function HandleNodeInformation1(node As RedisInfoNode) As Boolean
Dim oldTime As DateTime = Now
@@ -2184,6 +2462,48 @@ Public Class CorelDRAW
End If
End Sub
' 用于存储文件名和对应id的字典
Private M_FileIdDict As New Dictionary(Of String, Integer)
Private Sub ToolStripComboBox1_DropDown(sender As Object, e As EventArgs) Handles ToolStripComboBox1.DropDown
' 清空下拉列表和字典
ToolStripComboBox1.Items.Clear()
M_FileIdDict.Clear()
Dim npgsqldb As DbExecutor = New DbExecutor(DbExecutor.DbTypeEnum.Mysql, LocalConnString)
Dim gLogNode As LogNode
' 从tbl_cdr_file表查询图库文件名和文件对应id
Dim transStr As String = "select id, filename from `cdr_library`.`tbl_cdr_file`;"
Dim dt As DataTable
Try
npgsqldb.Open()
dt = npgsqldb.ExecuteDataTable(transStr)
' 将查询结果填充到ToolStripComboBox1下拉框中
For Each row As DataRow In dt.Rows
Dim id As Integer = row("id")
Dim filename As String = row("filename")
' 将id和filename存储到字典中
M_FileIdDict.Add(filename, id)
' 下拉框中只显示文件名
ToolStripComboBox1.Items.Add(filename)
Next
npgsqldb.Close()
Catch ex As Exception
If Not IsNothing(npgsqldb) Then
npgsqldb.Close()
End If
gLogNode = New LogNode($"查询图库文件失败!{vbCrLf}{ex.Message}", RuningLog.LogType.e_Error, RuningLog.LogMode.e_fileandRichTextBox)
gLogNode.SetLogColor(System.Drawing.Color.Red)
G_Log.AddLogNode(gLogNode)
End Try
End Sub
Private Sub ToolStripButton3_Click(sender As Object, e As EventArgs) Handles ToolStripButton3.Click
RichTextBox1.Clear()
Dim dic As New Dictionary(Of String, String)
@@ -2218,7 +2538,7 @@ Public Class CorelDRAW
Private Sub ToolStripButton1_Click_1(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
'打开文件选择器 选择cDR后缀的文件
Dim ServerFilePath As String = "R:\IIS ROOT\BLWLog\Web\wwwroot\PanelSelectionPic" ' "D:\IIS ROOT\BLWLog\Web\wwwroot\PanelSelectionPic" '
Dim ServerFilePath As String = "D:\IIS ROOT\BLWLog\Web\wwwroot\PanelSelectionPic" ' "R:\IIS ROOT\BLWLog\Web\wwwroot\PanelSelectionPic" '
Dim OpenFileDialog1 As New OpenFileDialog()
OpenFileDialog1.Filter = "CorelDRAW Files (*.cdr)|*.cdr"
Dim srcDoc As Document '素材文件
@@ -2232,8 +2552,17 @@ Public Class CorelDRAW
Dim gLogNode As LogNode
Dim ProjectPath As String
Dim SafeFileName As String
Dim errorMessage As String
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
' 上传前检查文件是否符合规范
If Not CheckLibraryFile(OpenFileDialog1.FileName, errorMessage) Then
gLogNode = New LogNode($"图库文件检测失败:{errorMessage}{vbCrLf}", RuningLog.LogType.e_Error, RuningLog.LogMode.e_fileandRichTextBox)
gLogNode.SetLogColor(System.Drawing.Color.Red)
G_Log.AddLogNode(gLogNode)
MessageBox.Show(errorMessage, "文件检测失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
Dim fid As Integer = AddFileToSQL(OpenFileDialog1.SafeFileName)
If fid = -1 Then
@@ -2976,4 +3305,114 @@ Public Class CorelDRAW
End Try
End Sub
Private Sub ToolStripButton5_Click(sender As Object, e As EventArgs) Handles ToolStripButton5.Click
'删除素材库
Try
' 3. 检查是否选择了素材库
If String.IsNullOrEmpty(ToolStripComboBox1.Text) Then
MsgBox("请先选择要删除的素材库!", vbExclamation, "错误")
Return
End If
' 4. 获取选中的素材库名称
Dim selectedFileName As String = ToolStripComboBox1.Text
' 1. 显示密码输入对话框
Dim password As String = InputBox("请输入密码", $"即将删除:{vbCrLf}{selectedFileName}", "", -1, -1)
' 2. 验证密码
If password <> "123456" Then
MsgBox("密码错误,删除失败!", vbExclamation, "错误")
Return
End If
' 5. 从字典中获取对应的ID
If M_FileIdDict.ContainsKey(selectedFileName) Then
Dim fileId As Integer = M_FileIdDict(selectedFileName)
' 6. 执行数据库删除操作
Dim npgsqldb As DbExecutor = New DbExecutor(DbExecutor.DbTypeEnum.Mysql, LocalConnString)
Try
npgsqldb.Open()
' 7. 开始事务
npgsqldb.BeginTransaction()
' 8. 根据素材库类型执行不同的删除逻辑
If selectedFileName.Contains("图标图库") Then
' 删除图标素材库相关数据
' 删除tbl_iconlibrary中FID一致的数据
Dim deleteIconSql As String = $"DELETE FROM `cdr_library`.`tbl_iconlibrary` WHERE `FID` = {fileId};"
npgsqldb.ExecuteNonQuery(deleteIconSql)
ElseIf selectedFileName.Contains("模型图库") Then
' 删除模型素材库相关数据
' 1. 处理tbl_model相关数据
' 查询tbl_model中FID等于fileId的数据
Dim modelSql As String = $"SELECT `Id` FROM `cdr_library`.`tbl_model` WHERE `FID` = {fileId};"
Dim modelDt As DataTable = npgsqldb.ExecuteDataTable(modelSql)
' 遍历tbl_model表得到的ID
For Each modelRow As DataRow In modelDt.Rows
Dim modelId As Integer = modelRow("Id")
' 删除tbl_trench中MID符合的数据
Dim deleteTrenchSql As String = $"DELETE FROM `cdr_library`.`tbl_trench` WHERE `MID` = {modelId};"
npgsqldb.ExecuteNonQuery(deleteTrenchSql)
' 删除tbl_model中对应ID的数据
Dim deleteModelSql As String = $"DELETE FROM `cdr_library`.`tbl_model` WHERE `ID` = {modelId};"
npgsqldb.ExecuteNonQuery(deleteModelSql)
Next
' 2. 处理tbl_pattern相关数据
' 查询tbl_pattern中FID等于fileId的数据
Dim patternSql As String = $"SELECT `Id` FROM `cdr_library`.`tbl_pattern` WHERE `FID` = {fileId};"
Dim patternDt As DataTable = npgsqldb.ExecuteDataTable(patternSql)
' 遍历tbl_pattern表得到的ID
For Each patternRow As DataRow In patternDt.Rows
Dim patternId As Integer = patternRow("Id")
' 删除tbl_location中MID符合的数据
Dim deleteLocationSql As String = $"DELETE FROM `cdr_library`.`tbl_location` WHERE `PID` = {patternId};"
npgsqldb.ExecuteNonQuery(deleteLocationSql)
' 删除tbl_pattern中对应ID的数据
Dim deletePatternSql As String = $"DELETE FROM `cdr_library`.`tbl_pattern` WHERE `ID` = {patternId};"
npgsqldb.ExecuteNonQuery(deletePatternSql)
Next
End If
' 9. 删除tbl_cdr_file中对应id的数据
Dim deleteFileSql As String = $"DELETE FROM `cdr_library`.`tbl_cdr_file` WHERE `ID` = {fileId};"
npgsqldb.ExecuteNonQuery(deleteFileSql)
' 10. 提交事务
npgsqldb.CommitTransaction()
' 11. 从下拉框中移除已删除的选项
ToolStripComboBox1.Items.Remove(selectedFileName)
' 12. 清空选择
ToolStripComboBox1.Text = ""
' 13. 显示成功消息
MsgBox("素材库删除成功!", vbInformation, "成功")
Catch ex As Exception
' 14. 回滚事务
npgsqldb.RollbackTransaction()
MsgBox($"删除失败:{ex.Message}", vbExclamation, "错误")
Finally
npgsqldb.Close()
End Try
Else
MsgBox("未找到素材库对应的ID", vbExclamation, "错误")
End If
Catch ex As Exception
MsgBox($"操作失败:{ex.Message}", vbExclamation, "错误")
End Try
End Sub
End Class