个人博客 用于记载日常收集的一些技术文章 ...
K3 BOS : VB:查找字符 K3 BOS : VB:查找字符 Debug.Print InStr("yyyy/MM/dd", "/") '5
Debug.Print InStr("yyyy/MM/dd", "-") '0
郭少锋 创建 2024-06-19 16:01:12 K3 BOS
K3 BOS : VB:日期格式 K3 BOS : VB:日期格式 Debug.Print Now() '2024-06-19 15:35:02

Debug.Print Format(Now(), "mm/dd/yy") '06-19-24
Debug.Print Format(Now(), "yy/mm/dd") '24-06-19
Debug.Print Format(Now(), "yyyy/mm/dd") '2024-06-19
Debug.Print Format(Now(), "yy-mm-dd") '24-06-19
Debug.Print Format(Now(), "mm-dd-yy") '06-19-24
Debug.Print Format(Now(), "yyyy-mm-dd") '2024-06-19
Debug.Print Format(Now(), "yymm") '2406
Debug.Print Format(Now(), "mmyy") '0624
Debug.Print Format(Now(), "yy-mm") '24-06
Debug.Print Format(Now(), "mm-yy") '06-24
Debug.Print Format(Now(), "yyyymmdd") '20240619

Debug.Print Format$(Now(), "mm/dd/yy") ' 同上
Debug.Print Format$(Now(), "yy/mm/dd") '
Debug.Print Format$(Now(), "yyyy/mm/dd") '
Debug.Print Format$(Now(), "yy-mm-dd") '
Debug.Print Format$(Now(), "mm-dd-yy") '
Debug.Print Format$(Now(), "yyyy-mm-dd") '
Debug.Print Format$(Now(), "yymm") '
Debug.Print Format$(Now(), "mmyy") '
Debug.Print Format$(Now(), "yy-mm") '
Debug.Print Format$(Now(), "mm-yy") '
Debug.Print Format$(Now(), "yyyymmdd") '
郭少锋 创建 2024-06-19 15:38:58 K3 BOS
K3 BOS : VB:二维数组 K3 BOS : VB:二维数组 ' 定义一个二维数组,这里是一个3x2的数组,即3行2列
Dim textArray(2, 1) As String

' 为二维数组的元素赋值
textArray(0, 0) = "行1, 列1"
textArray(0, 1) = "行1, 列2"
textArray(1, 0) = "行2, 列1"
textArray(1, 1) = "行2, 列2"
textArray(2, 0) = "行3, 列1"
textArray(2, 1) = "行3, 列2"

' 输出二维数组的内容
For i As Integer = 0 To 2
For j As Integer = 0 To 1
Console.WriteLine(textArray(i, j))
Next
Next
郭少锋 创建 2024-06-19 13:43:45 K3 BOS
K3 BOS : K3 填写数值 K3 BOS : K3 填写数值 aFQty1 = m_BillInterface.GetDataFldbyKey("FQty2", I)("FFLD") '【字段值】 FQty2 重量 FQtyStock "FFLD" = "249" / "FDSP" = "KG" / "FFND" = "KG" / "FLastUnitID" = "249" / "FMODIFY" = 1

aFUnit11 = m_BillInterface.GetDataFldbyKey("FBase9", I)("FFLD") '【内码】 FBase9 库存单位 FUnitStock
aFUnit12 = m_BillInterface.GetDataFldbyKey("FBase9", I)("FFND") '【编码】 FBase9 库存单位 FUnitStock
aFUnit13 = m_BillInterface.GetDataFldbyKey("FBase9", I)("FDSP") '【名称】 FBase9 库存单位 FUnitStock

aFQty2 = m_BillInterface.GetDataFldbyKey("FQty", I)("FFLD") '【字段值】 FQty 销售数量 FQtySale
aFUnit2 = m_BillInterface.GetDataFldbyKey("FBase5", I)("FDSP") '【字段值】 FBase5 销售单位 FUnitSale

aTxt1 = "": aTxt2 = "": aTxt2 = aFQty2 & " " & aFUnit2

If aFUnit1 <> aFUnit2 Then
aTxt1 = aFQty1 & " " & aFUnit1
End If

m_BillInterface.SetFieldValue "FText3", aTxt1, I '【填写数值】 FText3 重量文本 FQtyStockTxt
m_BillInterface.SetFieldValue "FText5", aTxt2, I '【填写数值】 FText5 数量文本 FQtySaleTxt
郭少锋 编辑 2024-06-18 15:28:02 创建 2023-04-06 21:59:20 K3 BOS
K3 BOS : VB:拆分文本 K3 BOS : VB:拆分文本 aSplits = Split(aFProjectVal, "|")

For Each aSplit In aSplits

If aSplit = "FDate" Then

aFDate = m_BillInterface.GetDataFldbyKey("FDate")("FFLD")

If aNo2 = "" Then

aNo1 = aNo1 & Format(aFDate, "yyyymm") '日期格式
Else
aNo3 = aNo3 & Format(aFDate, "yyyy-mm-dd") '日期格式
End If
End If
Next
郭少锋 创建 2024-06-18 15:25:51 K3 BOS
K3 BOS : VB:日期格式 K3 BOS : VB:日期格式 https://blog.csdn.net/qq_35844043/article/details/116745321
VB6使用正则浅谈

二、正则处理日期格式

思路:正则是一个好东西,那么用正则+Format/Format$实现看看

考虑到有些用户电脑正则相关的文件损坏,无法使用正则,所以先封装获取正则对象的方法,如下:

Public Function GetRegExpObj() As Object
On Error Resume Next

'函数说明:获取一个正则表达式对象
'创建作者:Commas
'创建时间:2022-04-28
'修改时间:

Set GetRegExpObj = CreateObject("vbscript.regexp")
If Err <> 0 Then
Call MsgBox(Err.Description)
Err.Clear
Set GetRegExpObj = Nothing
End If

End Function


再实现日期格式化方法。如果可以获取到正则对象,那么就用正则实现,否则就用“遍历+IsDate(vDate)试错”进行简单尝试,如下:

Public Function FmtDateStr(ByVal vDate As Variant, Optional sFormat As String = "YYYY-MM-DD") As String
On Error Resume Next

'函数说明:将日期或日期字符串格式化输出日期字符串,默认输出格式为“YYYY-MM-DD”,如“2022-04-28”
'创建作者:Commas
'创建时间:2022-04-28
'修改时间:
'------数据格式说明------
'vDate:需要格式化的日期或作日期字符串,如“星期四 2022.04.28 12:15:59”、“2022_04_28 12:15:59 星期四”
'sFormat:预期的日期字符串格式,默认为“YYYY-MM-DD”
'------数据格式说明------

If TypeName(vDate) = "Date" Then
FmtDateStr = Format$(vDate, sFormat)
Else
Dim re As Object
Set re = GetRegExpObj()
If re Is Nothing Then
'用于兼容电脑正则对象受损的处理过程,简单处理,适用于“日期 星期几”或“星期几 日期”的格式
Dim aryDate() As String, aryTemp() As String, i As Long, j As Long
aryDate = Split(vDate, " ")
aryTemp = Split("\@.@_@:", "@")

For i = 0 To UBound(aryDate)
vDate = aryDate(i)
For j = 0 To UBound(aryTemp)
vDate = Replace(vDate, aryTemp(j), "-")
Next j

If IsDate(vDate) Then
Exit For
End If
Next i

If Not IsDate(vDate) Then
FmtDateStr = ""
Exit Function
End If
Else
re.Global = True
re.IgnoreCase = False '设置是否匹配大小写
re.Pattern = "(\d{4}\D\d{1,2}\D\d{1,2})"

Dim clnM As Object
Set clnM = re.Execute(vDate)
vDate = clnM.Item(0).Value

re.Pattern = "\D"
vDate = re.Replace(vDate, "-")
End If

FmtDateStr = Format$(CDate(vDate), sFormat)

End If

End Function


接着我们来看看实现的效果吧,如下:

Option Explicit

Private Sub Form_Load()

Debug.Print "0"
Debug.Print FmtDateStr("2022\04\28 星期三")
Debug.Print FmtDateStr("星期三 2022\04\28")

Debug.Print "1"
Debug.Print FmtDateStr("2022/04/28 星期三")
Debug.Print FmtDateStr("星期三 2022/04/28")

Debug.Print "2"
Debug.Print FmtDateStr("2022-04-28 星期三")
Debug.Print FmtDateStr("星期三 2022-04-28")

Debug.Print "3"
Debug.Print FmtDateStr("2022.04.28 星期三")
Debug.Print FmtDateStr("星期三 2022.04.28")

Debug.Print "4"
Debug.Print FmtDateStr("2022_04_28 星期三")
Debug.Print FmtDateStr("星期三 2022_04_28")

Debug.Print "5"
Debug.Print FmtDateStr("2022/4/28 星期三")
Debug.Print FmtDateStr("星期三 2022/4/28")

Debug.Print "6"
Debug.Print FmtDateStr("2022-4-28 星期三")
Debug.Print FmtDateStr("星期三 2022-4-28")

Debug.Print "7"
Debug.Print FmtDateStr("2022.4.28 星期三")
Debug.Print FmtDateStr("星期三 2022.4.28")

Debug.Print "8"
Debug.Print FmtDateStr("2022_4_28 星期三")
Debug.Print FmtDateStr("星期三 2022_4_28")

Debug.Print "9"
Debug.Print FmtDateStr("星期四 2022-04-28 12:15:59")
Debug.Print FmtDateStr(Now)

End Sub

运行结果:

0
2022-04-28
2022-04-28
1
2022-04-28
2022-04-28
2
2022-04-28
2022-04-28
3
2022-04-28
2022-04-28
4
2022-04-28
2022-04-28
5
2022-04-28
2022-04-28
6
2022-04-28
2022-04-28
7
2022-04-28
2022-04-28
8
2022-04-28
2022-04-28
9
2022-04-28
2022-04-28

无论是正则,还是非正则处理,都能顺利完成预期结果的工作
郭少锋 创建 2024-06-18 10:28:09 K3 BOS
K3 BOS : VB:日期格式 K3 BOS : VB:日期格式 1-2)内置格式化函数格式日期 2.0

既然花里胡哨的非字符串的日期数据可以正确的格式化,那么是不是意味着我们只要将日期字符串先转换日期数据,再格式化就可以?

日期字符串→日期→Format或Format$日期格式化

Option Explicit

Private Sub Form_Load()
On Error Resume Next

Dim vDate As Variant

Debug.Print 1
vDate = "2022/04/28"
vDate = CDate(vDate)
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD") '正常
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

Debug.Print 4
vDate = Now
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD")
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

Debug.Print 2
vDate = "2022-04-28 星期四"
vDate = CDate(vDate) '出错
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD")
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

Debug.Print 3
vDate = "星期四 2022-04-28"
vDate = CDate(vDate) '出错
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD")
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

End Sub

结论:日期字符串无法正确被转换为日期,至此,这条路也是行不通的,看来得另寻他法了……
郭少锋 创建 2024-06-18 10:23:34 K3 BOS
K3 BOS : VB:日期格式 K3 BOS : VB:日期格式 一、Format与Format$
1-1)内置格式化函数格式日期 1.0

Option Explicit

Private Sub Form_Load()
On Error Resume Next

Dim vDate As Variant

Debug.Print 1
vDate = "2022/04/28"
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD")
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

Debug.Print 2
vDate = "2022-04-28 星期四"
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD")
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

Debug.Print 3
vDate = "星期四 2022-04-28"
Debug.Print vDate, "→", Format(vDate, "YYYY-MM-DD")
Debug.Print vDate, "→", Format$(vDate, "YYYY-MM-DD")

End Sub

运行结果:

1
2022/04/28 → 2022-04-28
2022/04/28 → 2022-04-28
2
2022-04-28 星期四 → 2022-04-28 星期四
2022-04-28 星期四 → 2022-04-28 星期四
3
星期四 2022-04-28 → 星期四 2022-04-28
星期四 2022-04-28 → 星期四 2022-04-28
4
2023-02-19 1:40:45 → 2023-02-19
2023-02-19 1:40:45 → 2023-02-19
郭少锋 创建 2024-06-18 10:20:45 K3 BOS
SQL : SQL:事务 SQL : SQL:事务 begin tran

Update IC_MAxNum set FFlag = 1 where FUserID = @UserID and FTableName = @TableName and FNumber = @FNumber
set @FInterID = @FNumber
commit


begin transaction
------------------------------------------------------------------------------------------------------------------------------------------------------------
if @FinterID = -1

set @Sql = 'Insert Into ICMaxNum(FTableName,FMaxNum) values(''' + @tableName + ''',' + str(1000 + @iStep) + ') '
else
set @Sql = 'update ICMaxNum set FMaxNum = ' + str(1000 + @iStep) + ' where FTableName = ''' + @tableName + ''''

------------------------------------------------------------------------------------------------------------------------------------------------------------
while @i< = @iStep begin

set @Sql = @Sql + ' insert into IC_MAxNum(FTableName,FUserID,FNumber) values(''' + @TableName + ''',' + str(ltrim(@UserID)) + ',' + str(1000 + @i) + ') '
set @i = @i + 1
end

set @Sql = @Sql + ' Update IC_MAxNum set FFlag = 1 where FUserID = ' + str(ltrim(@UserID)) + ' and FTableName = ''' + @TableName + ''' and FNumber = 1001'

exec (@Sql)
------------------------------------------------------------------------------------------------------------------------------------------------------------
if @@error = 0 begin
commit
select @FInterID = 1001
end
else begin
rollback
select @FinterID = -1
end
郭少锋 创建 2024-06-15 16:43:59 SQL
SQL : SQL:数字 转文本 SQL : SQL:数字 转文本 declare @FNumber int
declare @i int
declare @Sql nvarchar(4000)

set @Sql = @Sql + ' insert into IC_MAxNum( FTableName,FUserID,FNumber ) values( ''' + @TableName + ''',' + str(ltrim(@UserID)) + ',' + str(@FInterID + @i) + ') '

str(@FInterID + @i) -- 数字 转文本
郭少锋 编辑 2024-06-15 16:28:33 创建 2024-06-15 16:28:24 SQL