add vba generateSQL
This commit is contained in:
40
sql/juk_csv_item_definition.sql
Normal file
40
sql/juk_csv_item_definition.sql
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
DELETE FROM SH_CSV_ITEM_DEFINITION WHERE CODE = 'JUK';
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 1, '職員番号', '' ,TRUE, 'CHAR', 8, NULL, FALSE, FALSE, '' ,TRUE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 2, '事実発生年月日', '' ,TRUE, 'DATE', NULL, NULL, FALSE, TRUE, '' ,FALSE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 3, '提出年月日', '' ,FALSE, 'DATE', NULL, NULL, FALSE, TRUE, '' ,FALSE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 4, '受理年月日', '' ,FALSE, 'DATE', NULL, NULL, FALSE, TRUE, '' ,FALSE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 5, '届出の事由コード', '' ,TRUE, 'MASTER', 2, NULL, FALSE, FALSE, '' ,TRUE, NULL, '215', FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 6, '届出の備考', '' ,FALSE, 'VARCHAR', 20, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 7, '本人)形態区分', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{1,2}', NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 8, '本人)契約区分', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{0,1}', NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 9, '本人)契約開始日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 10, '本人)契約満了日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 11, '本人)所在地1', '' ,FALSE, 'VARCHAR', 60, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 12, '本人)所在地2', '' ,FALSE, 'VARCHAR', 40, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 13, '本人)家賃等月額', '' ,FALSE, 'NUMBER', 8, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 14, '本人)家賃区分_光熱費込', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{0,1}', NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 15, '本人)家賃区分_まかない付き', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{0,1}', NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 16, '配偶者)形態区分', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{1,2}', NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 17, '配偶者)契約区分', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{0,1}', NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 18, '配偶者)契約開始日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 19, '配偶者)契約満了日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 20, '配偶者)所在地1', '' ,FALSE, 'VARCHAR', 60, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 21, '配偶者)所在地2', '' ,FALSE, 'VARCHAR', 40, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 22, '配偶者)家賃等月額', '' ,FALSE, 'NUMBER', 8, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 23, '配偶者)家賃区分_光熱費込', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{0,1}', NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 24, '配偶者)家賃区分_まかない付き', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{0,1}', NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 25, '自宅)所有者情報', '' ,FALSE, 'ENUM', 1, NULL, TRUE, FALSE, '' ,TRUE, '{1,2,3,4}', NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 26, '自宅)所在地1', '' ,FALSE, 'VARCHAR', 60, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 27, '自宅)所在地2', '' ,FALSE, 'VARCHAR', 40, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 28, '自宅)入居日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 29, '自宅)取得理由', '' ,FALSE, 'MASTER', 1, NULL, TRUE, FALSE, '' ,TRUE, NULL, '216', TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 30, '自宅)新築・購入年月日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 31, '自宅)購入後5年経過日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 32, '該当条文1', '' ,FALSE, 'MASTER', 1, NULL, TRUE, FALSE, '' ,TRUE, NULL, '217', FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 33, '該当条文2', '' ,FALSE, 'MASTER', 1, NULL, TRUE, FALSE, '' ,TRUE, NULL, '217', FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 34, '支給の始期', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 35, '住居手当の月額', '' ,FALSE, 'NUMBER', 8, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 36, '備考', '' ,FALSE, 'VARCHAR', 40, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 37, '所属コード', '' ,FALSE, 'VARCHAR', 10, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, FALSE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 38, '認定年月日', '' ,FALSE, 'DATE', NULL, NULL, TRUE, TRUE, '' ,FALSE, NULL, NULL, TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
|
INSERT INTO SH_CSV_ITEM_DEFINITION VALUES ('JUK', 39, '(各庁の長)官職コード', '' ,FALSE, 'MASTER', 3, NULL, TRUE, FALSE, '' ,TRUE, NULL, '507', TRUE, FALSE, 'updsv7', CURRENT_TIMESTAMP);
|
||||||
39
src/sh/juk/init_module/Import_modules.bas
Normal file
39
src/sh/juk/init_module/Import_modules.bas
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
' ============================================================
|
||||||
|
' JUK Import - Simple Version
|
||||||
|
' ============================================================
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Sub ImportJukModules()
|
||||||
|
Const MODULE_PATH As String = "D:\Project\upds7\vba\src\sh\juk\module"
|
||||||
|
|
||||||
|
Dim fso As Object
|
||||||
|
Set fso = CreateObject("Scripting.FileSystemObject")
|
||||||
|
|
||||||
|
If Not fso.FolderExists(MODULE_PATH) Then
|
||||||
|
MsgBox "Folder not found"
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim file As Object
|
||||||
|
For Each file In fso.GetFolder(MODULE_PATH).Files
|
||||||
|
If LCase(fso.GetExtensionName(file.Name)) = "bas" Then
|
||||||
|
Dim modName As String
|
||||||
|
modName = fso.GetBaseName(file.Name)
|
||||||
|
|
||||||
|
On Error Resume Next
|
||||||
|
ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(modName)
|
||||||
|
|
||||||
|
ThisWorkbook.VBProject.VBComponents.Import file.Path
|
||||||
|
|
||||||
|
If Err.Number <> 0 Then
|
||||||
|
MsgBox "Error: " & Err.Description & " (" & Err.Number & ")"
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
On Error GoTo 0
|
||||||
|
Debug.Print "Imported: " & modName
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
MsgBox "Done"
|
||||||
|
End Sub
|
||||||
11
src/sh/juk/module/Common_Button.bas
Normal file
11
src/sh/juk/module/Common_Button.bas
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Attribute VB_Name = "Common_Button"
|
||||||
|
Option Explicit
|
||||||
|
' ============================================================
|
||||||
|
' Module Name: Common_Button
|
||||||
|
' Module Desc: Common_Button
|
||||||
|
' Module Methods:
|
||||||
|
' - CSV_Import_Button
|
||||||
|
' ============================================================
|
||||||
|
Sub DDL_Generate_Button()
|
||||||
|
GenerateJukCsvItemDefinition ActiveSheet
|
||||||
|
End Sub
|
||||||
230
src/sh/juk/module/SQL_Generate.bas
Normal file
230
src/sh/juk/module/SQL_Generate.bas
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
Attribute VB_Name = "SQL_Generate"
|
||||||
|
Option Explicit
|
||||||
|
' ============================================================
|
||||||
|
' JUK SQL Generator
|
||||||
|
' ============================================================
|
||||||
|
|
||||||
|
Public Sub GenerateJukCsvItemDefinition(ws As Worksheet)
|
||||||
|
Dim codePrefix As String: codePrefix = ws.CodeName
|
||||||
|
Dim outputFileName As String: outputFileName = LCase(codePrefix) & "_csv_item_definition.sql"
|
||||||
|
Dim csvFileName As String: csvFileName = LCase(codePrefix) & "_csv_item_definition.csv"
|
||||||
|
|
||||||
|
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row
|
||||||
|
If lastRow < 9 Then
|
||||||
|
MsgBox "No data found."
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim expectedSeq As Long: expectedSeq = 1
|
||||||
|
Dim i As Long
|
||||||
|
For i = 9 To lastRow
|
||||||
|
Dim itemSeq As Long
|
||||||
|
itemSeq = Val(Trim(CStr(ws.Cells(i, 3).Value)))
|
||||||
|
If itemSeq = 0 Then
|
||||||
|
lastRow = i - 1
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
If itemSeq <> expectedSeq Then
|
||||||
|
MsgBox "Seq error. Expected: " & expectedSeq & ", Actual: " & itemSeq & " (Row " & i & ")"
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
expectedSeq = expectedSeq + 1
|
||||||
|
Next
|
||||||
|
|
||||||
|
For i = 9 To lastRow
|
||||||
|
If Not ValidateRow(ws, i) Then Exit Sub
|
||||||
|
Next
|
||||||
|
|
||||||
|
Dim sqlHeader As String: sqlHeader = "DELETE FROM sh_csv_item_definition WHERE CODE = '" & UCase(codePrefix) & "';" & vbCrLf
|
||||||
|
Dim sqlLines As String: sqlLines = sqlHeader
|
||||||
|
For i = 9 To lastRow
|
||||||
|
sqlLines = sqlLines & GenerateSqlForRow(ws, i, codePrefix) & vbCrLf
|
||||||
|
Next
|
||||||
|
|
||||||
|
If sqlLines = "" Then
|
||||||
|
MsgBox "No data to output."
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim outputPath As String: outputPath = ThisWorkbook.Path & "\" & outputFileName
|
||||||
|
Dim fileNum As Long: fileNum = FreeFile
|
||||||
|
Open outputPath For Output As #fileNum
|
||||||
|
Print #fileNum, sqlLines;
|
||||||
|
Close #fileNum
|
||||||
|
|
||||||
|
' Generate CSV (columns matching INSERT INTO order)
|
||||||
|
Dim csvHeader As String: csvHeader = "CODE,ITEM_SEQ,ITEM_TITLE,ITEM_NAME,IS_DUPLICATE_CHECK_KEY,DATA_TYPE,PRECISION,SCALE,NULLABLE,ENABLE_FORMAT_CHECK,FORMAT_REGEX,ENABLE_EXIST_CHECK,ALLOWED_VALUES,MASTER_SYBT,ENABLE_RELATION_CHECK,JSON_IGNORE,CMNUSER"
|
||||||
|
Dim csvLines As String: csvLines = csvHeader & vbCrLf
|
||||||
|
For i = 9 To lastRow
|
||||||
|
csvLines = csvLines & GenerateCsvRow(ws, i, codePrefix) & vbCrLf
|
||||||
|
Next
|
||||||
|
|
||||||
|
Dim csvPath As String: csvPath = ThisWorkbook.Path & "\" & csvFileName
|
||||||
|
fileNum = FreeFile
|
||||||
|
Open csvPath For Output As #fileNum
|
||||||
|
Print #fileNum, csvLines;
|
||||||
|
Close #fileNum
|
||||||
|
|
||||||
|
MsgBox "Files generated:" & vbCrLf & outputPath & vbCrLf & csvPath
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function ValidateRow(ws As Worksheet, rowNum As Long) As Boolean
|
||||||
|
ValidateRow = True
|
||||||
|
|
||||||
|
Dim itemTitle As String: itemTitle = Trim(CStr(ws.Cells(rowNum, 4).Value))
|
||||||
|
Dim dataType As String: dataType = Trim(CStr(ws.Cells(rowNum, 16).Value))
|
||||||
|
Dim jsonIgnore As String: jsonIgnore = Trim(CStr(ws.Cells(rowNum, 61).Value))
|
||||||
|
|
||||||
|
If itemTitle = "" Then
|
||||||
|
MsgBox "item_title is empty. (Row " & rowNum & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
If dataType = "" Then
|
||||||
|
MsgBox "data_type is empty. (Row " & rowNum & " - " & itemTitle & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
If jsonIgnore = "" Then
|
||||||
|
MsgBox "json_ignore is empty. (Row " & rowNum & " - " & itemTitle & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim allowedValues As String: allowedValues = Trim(CStr(ws.Cells(rowNum, "AA").Value))
|
||||||
|
Dim isFormatCheck As String: isFormatCheck = Trim(CStr(ws.Cells(rowNum, "X").Value))
|
||||||
|
|
||||||
|
Select Case UCase(dataType)
|
||||||
|
Case "ENUM"
|
||||||
|
If allowedValues = "" Then
|
||||||
|
MsgBox "ENUM type must have allowed_values. (Row " & rowNum & " - " & itemTitle & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
If Not ValidateEnumFormat(allowedValues) Then
|
||||||
|
MsgBox "ENUM format error. (Row " & rowNum & " - " & itemTitle & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
Case "MASTER"
|
||||||
|
If Len(allowedValues) <> 3 Or Not IsNumeric(allowedValues) Then
|
||||||
|
MsgBox "MASTER type must be 3-digit number. (Row " & rowNum & " - " & itemTitle & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
Case "DATE", "VARCHAR", "NUMBER"
|
||||||
|
If isFormatCheck = "" Then
|
||||||
|
MsgBox dataType & " type must have required. (Row " & rowNum & " - " & itemTitle & ")"
|
||||||
|
ValidateRow = False
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
End Select
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ValidateEnumFormat(s As String) As Boolean
|
||||||
|
ValidateEnumFormat = False
|
||||||
|
Dim items As Variant: items = Split(s, ", ")
|
||||||
|
Dim i As Long
|
||||||
|
For i = LBound(items) To UBound(items)
|
||||||
|
Dim item As String: item = Trim(items(i))
|
||||||
|
If item = "" Then Exit Function
|
||||||
|
Dim parts As Variant: parts = Split(item, ":")
|
||||||
|
If UBound(parts) <> 1 Then Exit Function
|
||||||
|
If Not IsNumeric(parts(0)) Then Exit Function
|
||||||
|
Next
|
||||||
|
ValidateEnumFormat = True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function GenerateSqlForRow(ws As Worksheet, rowNum As Long, codePrefix As String) As String
|
||||||
|
Dim itemTitle As String: itemTitle = Trim(CStr(ws.Cells(rowNum, 4).Value))
|
||||||
|
If itemTitle = "" Then
|
||||||
|
GenerateSqlForRow = ""
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim itemSeq As Long: itemSeq = Val(Trim(CStr(ws.Cells(rowNum, 3).Value)))
|
||||||
|
Dim dataType As String: dataType = Trim(CStr(ws.Cells(rowNum, 16).Value))
|
||||||
|
Dim allowedValues As String: allowedValues = Trim(CStr(ws.Cells(rowNum, 27).Value))
|
||||||
|
|
||||||
|
' Parse data_type (e.g. VARCHAR(60) -> dataType='VARCHAR', precision=60)
|
||||||
|
Dim precision As String: precision = "NULL"
|
||||||
|
Dim vScale As String: vScale = "NULL"
|
||||||
|
Dim dtType As String: dtType = dataType
|
||||||
|
Dim pos As Long
|
||||||
|
Dim nums As String
|
||||||
|
|
||||||
|
If InStr(dataType, "(") > 0 Then
|
||||||
|
pos = InStr(dataType, "(")
|
||||||
|
dtType = Trim(Left(dataType, pos - 1))
|
||||||
|
nums = Mid(dataType, pos + 1)
|
||||||
|
nums = Trim(Left(nums, InStr(nums, ")") - 1))
|
||||||
|
precision = nums
|
||||||
|
If InStr(UCase(dataType), "NUMBER") > 0 And InStr(nums, ", ") > 0 Then
|
||||||
|
vScale = Trim(Mid(nums, InStr(nums, ", ") + 1))
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim isPk As String: isPk = SqlBool(GetIsChecked(ws, rowNum, "V"))
|
||||||
|
Dim isRequired As String: isRequired = SqlBool(GetIsChecked(ws, rowNum, "W"))
|
||||||
|
Dim isFormatCheck As String: isFormatCheck = SqlBool(GetIsChecked(ws, rowNum, "X"))
|
||||||
|
Dim isExistCheck As String: isExistCheck = SqlBool(GetIsChecked(ws, rowNum, "Y"))
|
||||||
|
Dim isRelationCheck As String: isRelationCheck = SqlBool(GetIsChecked(ws, rowNum, "Z"))
|
||||||
|
Dim isJsonIgnore As String: isJsonIgnore = SqlBool(GetIsChecked(ws, rowNum, "BI"))
|
||||||
|
|
||||||
|
Dim code As String: code = "'" & UCase(codePrefix) & "'"
|
||||||
|
Dim itemTitleStr As String: itemTitleStr = SqlString(itemTitle)
|
||||||
|
Dim dataTypeStr As String: dataTypeStr = SqlString(dtType)
|
||||||
|
|
||||||
|
' For MASTER type, store in MASTER_SYBT; for others, store in ALLOWED_VALUES
|
||||||
|
Dim allowedValuesStr As String
|
||||||
|
Dim masterSybt As String
|
||||||
|
If UCase(dtType) = "MASTER" Then
|
||||||
|
masterSybt = "'" & allowedValues & "'"
|
||||||
|
allowedValuesStr = "NULL"
|
||||||
|
Else
|
||||||
|
masterSybt = "NULL"
|
||||||
|
If allowedValues = "" Then
|
||||||
|
allowedValuesStr = "NULL"
|
||||||
|
Else
|
||||||
|
allowedValuesStr = "'{" & allowedValues & "}'"
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Dim cmnuser As String: cmnuser = "'updsv7'"
|
||||||
|
Dim dmndate As String: dmndate = "CURRENT_TIMESTAMP"
|
||||||
|
|
||||||
|
Dim nullable As String: nullable = IIf(isRequired = "TRUE", "FALSE", "TRUE")
|
||||||
|
|
||||||
|
GenerateSqlForRow = "INSERT INTO SH_CSV_ITEM_DEFINITION VALUES (" & _
|
||||||
|
code & ", " & itemSeq & ", " & itemTitleStr & ", '' ," & isPk & ", " & dataTypeStr & ", " & _
|
||||||
|
precision & ", " & vScale & ", " & nullable & ", " & isFormatCheck & ", '' ," & isExistCheck & ", " & _
|
||||||
|
allowedValuesStr & ", " & masterSybt & ", " & isRelationCheck & ", " & isJsonIgnore & ", " & cmnuser & ", " & dmndate & ");"
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function SqlBool(b As Boolean) As String
|
||||||
|
SqlBool = IIf(b, "TRUE", "FALSE")
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function GetIsChecked(ws As Worksheet, rowNum As Long, colNumOrLetter As Variant) As Boolean
|
||||||
|
Dim colNum As Long
|
||||||
|
If VarType(colNumOrLetter) = vbString Then
|
||||||
|
colNum = ws.Range(colNumOrLetter & "1").Column
|
||||||
|
Else
|
||||||
|
colNum = CLng(colNumOrLetter)
|
||||||
|
End If
|
||||||
|
Dim val As String: val = Trim(CStr(ws.Cells(rowNum, colNum).Value))
|
||||||
|
If val = "" Or val = "FALSE" Then
|
||||||
|
GetIsChecked = False
|
||||||
|
Else
|
||||||
|
GetIsChecked = True
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function SqlString(s As String) As String
|
||||||
|
If s = "" Then
|
||||||
|
SqlString = "NULL"
|
||||||
|
Else
|
||||||
|
SqlString = "'" & Replace(s, "'", "''") & "'"
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
@@ -1,292 +0,0 @@
|
|||||||
' ============================================================
|
|
||||||
' JUK CSV Item Definition Generator
|
|
||||||
'
|
|
||||||
' Description:
|
|
||||||
' Excel の CSV 項目定義シートから sh_csv_item_definition テーブル用の
|
|
||||||
' DML INSERT 文を生成する
|
|
||||||
'
|
|
||||||
' Usage:
|
|
||||||
' 1. 「CSV項目定義」シートを開く
|
|
||||||
' 2. VBAエディタで J1.cls をインポート
|
|
||||||
' 3. GenerateJukCsvItemDefinition マクロを実行
|
|
||||||
' 4. 同じフォルダに juk_csv_item_definition.sql が生成される
|
|
||||||
'
|
|
||||||
' Column Mapping:
|
|
||||||
' C - 順序号 (item_seq)
|
|
||||||
' D - 項目名 (item_title)
|
|
||||||
' P - データ型 (data_type)
|
|
||||||
' V - PK (is_duplicate_check_key)
|
|
||||||
' W - 必须入力 (nullable) - 反転
|
|
||||||
' X - 定義チェック (enable_format_check)
|
|
||||||
' Y - 存在チェック (enable_exist_check)
|
|
||||||
' Z - 関連チェック (enable_relation_check)
|
|
||||||
' AA -許可値 (allowed_values)
|
|
||||||
' BI - JsonIgnore (json_ignore)
|
|
||||||
'
|
|
||||||
' Output Sample:
|
|
||||||
' INSERT INTO sh_csv_item_definition (CODE, ITEM_SEQ, ITEM_TITLE, ITEM_NAME, IS_DUPLICATE_CHECK_KEY, DATA_TYPE, PRECISION, SCALE, NULLABLE, ENABLE_FORMAT_CHECK, FORMAT_REGEX, ENABLE_EXIST_CHECK, ALLOWED_VALUES, MASTER_SYBT, ENABLE_RELATION_CHECK, JSON_IGNORE, CMNUSER) VALUES ('JUK', 1, '職員番号', '', TRUE, 'CHAR', 8, NULL, FALSE, FALSE, '', TRUE, NULL, '', FALSE, FALSE, 'updsv7');
|
|
||||||
' ============================================================
|
|
||||||
|
|
||||||
Option Explicit
|
|
||||||
|
|
||||||
' --- 設定 ---
|
|
||||||
Private Const TARGET_SHEET_NAME As String = "CSV項目定義"
|
|
||||||
Private Const OUTPUT_FILE_NAME As String = "juk_csv_item_definition.sql"
|
|
||||||
Private Const DATA_START_ROW As Long = 9
|
|
||||||
Private Const CODE_PREFIX As String = "JUK"
|
|
||||||
Private Const DEFAULT_CMNUSER As String = "updsv7"
|
|
||||||
|
|
||||||
' --- カラム位置 (Excel 列番号) ---
|
|
||||||
Private Const COL_ITEM_SEQ As Long = 3
|
|
||||||
Private Const COL_ITEM_TITLE As Long = 4
|
|
||||||
Private Const COL_DATA_TYPE As Long = 16
|
|
||||||
Private Const COL_PK As Long = 22
|
|
||||||
Private Const COL_REQUIRED As Long = 23
|
|
||||||
Private Const COL_FORMAT_CHECK As Long = 24
|
|
||||||
Private Const COL_EXIST_CHECK As Long = 25
|
|
||||||
Private Const COL_RELATION_CHECK As Long = 26
|
|
||||||
Private Const COL_ALLOWED_VALUES As Long = 27
|
|
||||||
Private Const COL_JSON_IGNORE As Long = 61
|
|
||||||
|
|
||||||
' --- フィールド名 (DDLフィールド名→大写) ---
|
|
||||||
Private Const CODE = "CODE"
|
|
||||||
Private Const ITEM_SEQ = "ITEM_SEQ"
|
|
||||||
Private Const ITEM_TITLE = "ITEM_TITLE"
|
|
||||||
Private Const ITEM_NAME = "ITEM_NAME"
|
|
||||||
Private Const IS_DUPLICATE_CHECK_KEY = "IS_DUPLICATE_CHECK_KEY"
|
|
||||||
Private Const DATA_TYPE = "DATA_TYPE"
|
|
||||||
Private Const PRECISION = "PRECISION"
|
|
||||||
Private Const SCALE = "SCALE"
|
|
||||||
Private Const NULLABLE = "NULLABLE"
|
|
||||||
Private Const ENABLE_FORMAT_CHECK = "ENABLE_FORMAT_CHECK"
|
|
||||||
Private Const FORMAT_REGEX = "FORMAT_REGEX"
|
|
||||||
Private Const ENABLE_EXIST_CHECK = "ENABLE_EXIST_CHECK"
|
|
||||||
Private Const ALLOWED_VALUES = "ALLOWED_VALUES"
|
|
||||||
Private Const MASTER_SYBT = "MASTER_SYBT"
|
|
||||||
Private Const ENABLE_RELATION_CHECK = "ENABLE_RELATION_CHECK"
|
|
||||||
Private Const JSON_IGNORE = "JSON_IGNORE"
|
|
||||||
Private Const CMNUSER = "CMNUSER"
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Main: GenerateJukCsvItemDefinition
|
|
||||||
' ============================================================
|
|
||||||
Public Sub GenerateJukCsvItemDefinition()
|
|
||||||
Dim ws As Worksheet
|
|
||||||
Dim outputPath As String
|
|
||||||
Dim sqlLines As String
|
|
||||||
Dim lastRow As Long
|
|
||||||
Dim i As Long
|
|
||||||
Dim sql As String
|
|
||||||
|
|
||||||
On Error Resume Next
|
|
||||||
Set ws = ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
|
|
||||||
On Error GoTo 0
|
|
||||||
|
|
||||||
If ws Is Nothing Then
|
|
||||||
MsgBox "シート [" & TARGET_SHEET_NAME & "] が見つかりません。", vbExclamation
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
lastRow = ws.Cells(ws.Rows.Count, COL_ITEM_TITLE).End(xlUp).Row
|
|
||||||
|
|
||||||
If lastRow < DATA_START_ROW Then
|
|
||||||
MsgBox "データが見つかりません。", vbExclamation
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
sqlLines = ""
|
|
||||||
|
|
||||||
For i = DATA_START_ROW To lastRow
|
|
||||||
sql = GenerateSqlForRow(ws, i)
|
|
||||||
If sql <> "" Then
|
|
||||||
sqlLines = sqlLines & sql & vbCrLf
|
|
||||||
End If
|
|
||||||
Next i
|
|
||||||
|
|
||||||
If sqlLines = "" Then
|
|
||||||
MsgBox "出力するデータがありませんでした。", vbInformation
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
|
|
||||||
outputPath = ThisWorkbook.Path & "\" & OUTPUT_FILE_NAME
|
|
||||||
|
|
||||||
Call WriteTextFile(outputPath, FormatSql(sqlLines))
|
|
||||||
|
|
||||||
MsgBox "SQLファイルを生成しました:" & vbCrLf & outputPath, vbInformation
|
|
||||||
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Generate SQL for a single row
|
|
||||||
' IDE表示用: 只需要对value做注释
|
|
||||||
' ============================================================
|
|
||||||
Private Function GenerateSqlForRow(ws As Worksheet, rowNum As Long) As String
|
|
||||||
Dim itemTitle As String
|
|
||||||
Dim itemSeq As Long
|
|
||||||
Dim sqlParts As Variant
|
|
||||||
|
|
||||||
itemTitle = GetCellValue(ws, rowNum, COL_ITEM_TITLE)
|
|
||||||
If itemTitle = "" Then
|
|
||||||
GenerateSqlForRow = ""
|
|
||||||
Exit Function
|
|
||||||
End If
|
|
||||||
|
|
||||||
itemSeq = CLng(GetCellValue(ws, rowNum, COL_ITEM_SEQ))
|
|
||||||
|
|
||||||
sqlParts = Array( _
|
|
||||||
"INSERT INTO sh_csv_item_definition (", _ ' INSERT INTO
|
|
||||||
CODE & ",", _ ' code
|
|
||||||
ITEM_SEQ & ",", _ ' item_seq
|
|
||||||
ITEM_TITLE & ",", _ ' item_title
|
|
||||||
ITEM_NAME & ",", _ ' item_name
|
|
||||||
IS_DUPLICATE_CHECK_KEY & ",", _ ' is_duplicate_check_key
|
|
||||||
DATA_TYPE & ",", _ ' data_type
|
|
||||||
PRECISION & ",", _ ' precision
|
|
||||||
SCALE & ",", _ ' scale
|
|
||||||
NULLABLE & ",", _ ' nullable
|
|
||||||
ENABLE_FORMAT_CHECK & ",", _ ' enable_format_check
|
|
||||||
FORMAT_REGEX & ",", _ ' format_regex
|
|
||||||
ENABLE_EXIST_CHECK & ",", _ ' enable_exist_check
|
|
||||||
ALLOWED_VALUES & ",", _ ' allowed_values
|
|
||||||
MASTER_SYBT & ",", _ ' master_sybt
|
|
||||||
ENABLE_RELATION_CHECK & ",", _ ' enable_relation_check
|
|
||||||
JSON_IGNORE & ",", _ ' json_ignore
|
|
||||||
CMNUSER & ")", _ ' cmnuser
|
|
||||||
") VALUES (", _ ' VALUES
|
|
||||||
GetCode(), _ ' code
|
|
||||||
GetItemSeq(itemSeq), _ ' item_seq
|
|
||||||
SqlString(itemTitle), _ ' item_title
|
|
||||||
GetIsChecked(ws, rowNum, COL_PK), _ ' is_duplicate_check_key
|
|
||||||
SqlString(GetCellValue(ws, rowNum, COL_DATA_TYPE)), _ ' data_type
|
|
||||||
GetNull(), _ ' precision
|
|
||||||
GetNull(), _ ' scale
|
|
||||||
Not GetIsChecked(ws, rowNum, COL_REQUIRED), _ ' nullable
|
|
||||||
GetIsChecked(ws, rowNum, COL_FORMAT_CHECK), _ ' enable_format_check
|
|
||||||
GetEmptyStr(), _ ' format_regex
|
|
||||||
GetIsChecked(ws, rowNum, COL_EXIST_CHECK), _ ' enable_exist_check
|
|
||||||
SqlArrayOrNull(GetCellValue(ws, rowNum, COL_ALLOWED_VALUES)), _ ' allowed_values
|
|
||||||
GetEmptyStr(), _ ' master_sybt
|
|
||||||
GetIsChecked(ws, rowNum, COL_RELATION_CHECK), _ ' enable_relation_check
|
|
||||||
GetIsChecked(ws, rowNum, COL_JSON_IGNORE, True), _ ' json_ignore
|
|
||||||
GetCmnuser()) ' cmnuser
|
|
||||||
|
|
||||||
GenerateSqlForRow = Join(sqlParts, "")
|
|
||||||
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Get code value
|
|
||||||
' ============================================================
|
|
||||||
Private Function GetCode() As String
|
|
||||||
GetCode = "'" & CODE_PREFIX & "', "
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Get item_seq value
|
|
||||||
' ============================================================
|
|
||||||
Private Function GetItemSeq(seq As Long) As String
|
|
||||||
GetItemSeq = seq & ", "
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Get cmnuser value
|
|
||||||
' ============================================================
|
|
||||||
Private Function GetCmnuser() As String
|
|
||||||
GetCmnuser = "'" & DEFAULT_CMNUSER & "'"
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Get NULL value
|
|
||||||
' ============================================================
|
|
||||||
Private Function GetNull() As String
|
|
||||||
GetNull = "NULL, "
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Get empty string value
|
|
||||||
' ============================================================
|
|
||||||
Private Function GetEmptyStr() As String
|
|
||||||
GetEmptyStr = "'', "
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Format: 去掉IDE的换行和缩进,输出1行
|
|
||||||
' ============================================================
|
|
||||||
Private Function FormatSql(sql As String) As String
|
|
||||||
Dim lines As Variant
|
|
||||||
Dim i As Long
|
|
||||||
Dim result As String
|
|
||||||
|
|
||||||
lines = Split(sql, vbCrLf)
|
|
||||||
result = ""
|
|
||||||
|
|
||||||
For i = LBound(lines) To UBound(lines)
|
|
||||||
If Trim(lines(i)) <> "" Then
|
|
||||||
result = result & Trim(lines(i))
|
|
||||||
End If
|
|
||||||
Next i
|
|
||||||
|
|
||||||
FormatSql = result
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Get cell value as string (trimmed)
|
|
||||||
' ============================================================
|
|
||||||
Private Function GetCellValue(ws As Worksheet, rowNum As Long, colNum As Long) As String
|
|
||||||
GetCellValue = Trim(CStr(ws.Cells(rowNum, colNum).Value))
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Check if cell contains "○"
|
|
||||||
' ============================================================
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Boolean to SQL string
|
|
||||||
' ============================================================
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: String to SQL (quoted and escaped)
|
|
||||||
' ============================================================
|
|
||||||
Private Function SqlString(s As String) As String
|
|
||||||
If s = "" Then
|
|
||||||
SqlString = "NULL, "
|
|
||||||
Else
|
|
||||||
SqlString = "'" & Replace(s, "'", "''") & "', "
|
|
||||||
End If
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Array string to SQL or NULL
|
|
||||||
' ============================================================
|
|
||||||
Private Function SqlArrayOrNull(s As String) As String
|
|
||||||
If s = "" Then
|
|
||||||
SqlArrayOrNull = "NULL, "
|
|
||||||
Else
|
|
||||||
SqlArrayOrNull = "'{" & s & "}', "
|
|
||||||
End If
|
|
||||||
End Function
|
|
||||||
|
|
||||||
|
|
||||||
' ============================================================
|
|
||||||
' Helper: Write text file
|
|
||||||
' ============================================================
|
|
||||||
Private Sub WriteTextFile(filePath As String, content As String)
|
|
||||||
Dim fileNum As Long
|
|
||||||
fileNum = FreeFile
|
|
||||||
Open filePath For Output As #fileNum
|
|
||||||
Print #fileNum, content;
|
|
||||||
Close #fileNum
|
|
||||||
End Sub
|
|
||||||
Reference in New Issue
Block a user