我在vb里讀取了一個excel檔案,這個excel檔案有若干行和列組成,其中有一列資料是這樣組成的:
(1) 1 x a,2 x b
(2) 1 x b
(3) 2 x a
(4) 1 x a
(5) 1 x c
(6) 1 x b
(7) 1 x c,1 x b
...
若干行。這個一列的資料是這樣的,1 x a代表a物品有1件,同一行中可能會有多個品種。比如第(1)行和第(7)行,現在要求是這樣:當讀到一行,分離出物品和數量,這個物品在資料庫里有對應的庫存數。舉例:假如物品a剩余庫存數有3。b剩余庫存數有4,C剩余庫存數有2。那么根據要求,第(1)行是可以的,第(2)也是可以的,第(3)行也可以,第(4)行不可以,第(5)行可以,第(6)行可以,第(7)不可以。因為第(7)行c的數量是滿足的,但b的庫存數已經不足了,所以不可以。關于這個可以和不可以,在判斷到的某行的列的單元格里標記yes或者no。
我目前已經做了,讀入excel,分離物品和數量,如果從資料庫里每次操作,來回讀寫效率低下。如果想使盡可能少的訪問資料庫,面上如何解決。1 x a,每讀一行,分離出x前的數字,當到下一行了,還要繼續。
uj5u.com熱心網友回復:
以你的示例進行分析 先讀資料庫。得到以下資料Array(a)=3
Array(b)=4
Array(c)=2
'''''
讀第一行后
Array(a)=3-1=2
Array(b)=4-2=2
Array(c)=2
讀第二行后
Array(a)=2
Array(b)=2-1=1
Array(c)=2
讀第三行后
Array(a)=2-2=0
Array(b)=1
Array(c)=2
讀第四行后
Array(a)=0<1失敗
Array(b)=1
Array(c)=2
.....
.....
uj5u.com熱心網友回復:
有沒有切實可行的辦法。uj5u.com熱心網友回復:
用Split函式?uj5u.com熱心網友回復:
懇請提供更好的解決辦法。我的測驗代碼:
Private Sub TestNewFunction0805()
Dim strCustomer, strOrisku, strDestsku As String
Dim nRows, cntskus, isku2stock, isumsku As Integer
Dim nCurskuNum, tmpj, tmpk As Integer
Dim i1, i2, i3, i4 As Integer
Dim phbz1, phbz2 As String
nRows = CountMsflexgirdRows
For i1 = 1 To nRows - 1
phbz1 = msfg.TextMatrix(i1, 10)
phbz2 = msfg.TextMatrix(i1, 11)
strCustomer = msfg.TextMatrix(i1, 12)
cntskus = SplitTestSKU(phbz1)
For i2 = 0 To cntskus - 1
strOrisku = Sp(i2, 0)
isumsku = CInt(Sp(i2, 1))
isku2stock = GetStockNumBySKUAndOwner(strOrisku, strCustomer) ’獲取庫存數量函式
If isku2stock = -1 Then
msfg.TextMatrix(i1, 14) = "no"
GoTo exiti1
Else
msfg.TextMatrix(i1, 14) = "yes"
isku2stock = isku2stock - isumsku
End If
For i3 = i1 + 1 To nRows - 1
nCurskuNum = SplitTestInterSKU(msfg.TextMatrix(i3, 10))
For i4 = 0 To nCurskuNum - 1
If strOrisku = Spin(i4, 0) Then
isku2stock = isku2stock - CInt(Spin(i4, 1))
End If
If isku2stock >= 0 Then
msfg.TextMatrix(i3, 14) = "yes"'標記為無效訂單
Else
msfg.TextMatrix(i3, 14) ="no" '繼續處理
GoTo exiti1
End If
Next i4
For tmpj = 0 To 9
Spin(tmpj, 0) = ""
Spin(tmpj, 1) = ""
Next tmpj
Next i3
Next i2
For tmpk = 0 To 9
Sp(tmpk, 0) = ""
Sp(tmpk, 1) = ""
Next tmpk
exiti1:
Next i1
End Sub
uj5u.com熱心網友回復:
請人繼續指點!uj5u.com熱心網友回復:
2樓思路可行。先從資料庫讀出庫存,然后逐行記憶體中計算處理。uj5u.com熱心網友回復:
供參考:
Private Sub Command1_Click()
Dim dic As Object, arr, brr() As String, v() As String, t() As String, i As Long, j As Long
Set dic = CreateObject("scripting.dictionary")
dic("a") = 3
dic("b") = 4
dic("c") = 2
arr = Array("1 x a,2 x b", "1 x b", "2 x a", "1 x a", "1 x c", "1 x b", "1 x c,1 x b")
ReDim brr(UBound(arr))
For i = 0 To UBound(arr)
v = Split(arr(i), ",")
brr(i) = True
For j = 0 To UBound(v)
t = Split(v(j), "x")
brr(i) = brr(i) And (Val(Trim(t(0))) <= dic(Trim(t(1))))
dic(Trim(t(1))) = dic(Trim(t(1))) - Val(Trim(t(0)))
Next
Next
MsgBox Join(brr, ",")
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/145073.html
標籤:VB基礎類
下一篇:求助撰寫找相同程式,可看示例說明
