塊定義
Option Explicit
Type VMCode
prd_no As String '編碼
spc As String '具體規格
ut As String '機關
End Type
Type VCode
prd_no As String '編碼
PRD_MARK As String '供應商
qty As Single '現有庫存
qty_on_way As Single '在途
qty_on_prc As Single '在制
qty_on_rsv As Single '未發量
qty_end As Single '可用庫存
name As String '庫位
End Type
主程式
Option Explicit
Private Declare Function LCMapstring Lib "kernel32" Alias "LCMapStringA" (ByVal locale As Long, ByVal dwpflags As Long, ByVal lpsrcstr As String, ByVal cchsrc As Long, ByVal lpdeststr As String, ByVal cchdest As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpstring As String) As Long
Dim stf As String
Dim stj As String
Dim stlen As String
Dim cnn As ADODB.Connection
Dim DataTemp() As VMCode
Dim DTemp() As VCode
Private Sub Combo1_Click()
Dim rs As ADODB.Recordset
Dim rst1 As ADODB.Recordset
Dim sql1 As String
Dim stf1 As String
Dim stj1 As String
Dim stlen1 As String
Dim sql2 As String
Dim i, x, y As Integer
Dim str2 As String
Set rs = New ADODB.Recordset
Text1.Text = DataTemp(Combo1.ListIndex).prd_no
Label4.Caption = "機關:" & DataTemp(Combo1.ListIndex).ut
sql1 = "select PRD_NO,PRD_MARK,QTY,QTY_ON_WAY,QTY_ON_PRC,QTY_ON_RSV,WH from dbo.prdt1 where '" & Trim(Text1.Text) & "' = prd_no"
rs.Open Trim$(sql1), cnn, adOpenKeyset, adLockOptimistic
If rs.RecordCount <> 0 Then
ReDim DTemp(rs.RecordCount - 1)
ReDim str1(0 To rs.RecordCount - 1)
x = rs.RecordCount
List1.Clear
rs.MoveFirst
For i = 0 To rs.RecordCount - 1
DTemp(i).PRD_MARK = rs.Fields(1) & Space(7 - Len(rs.Fields(1)))
DTemp(i).prd_no = rs.Fields(0)
DTemp(i).qty = rs.Fields(2)
str1(i) = DTemp(i).qty & Space(10 - Len(Str(DTemp(i).qty)))
DTemp(i).qty_on_way = rs.Fields(3)
DTemp(i).qty_on_prc = rs.Fields(4)
DTemp(i).qty_on_rsv = rs.Fields(5)
DTemp(i).name = rs.Fields(6)
DTemp(i).qty_end = DTemp(i).qty + DTemp(i).qty_on_way + DTemp(i).qty_on_prc - DTemp(i).qty_on_rsv
'rst1.Open Trim$(sql2), cnn, adOpenKeyset, adLockOptimistic
'List1.AddItem "供應商:" & DTemp(i).PRD_MARK & "現有庫存:" & str1(i) & "可用庫存:" & DTemp(i).qty_end & vbCrLf
rs.MoveNext
Next i
rs.Close
Set rs = Nothing
For y = 0 To x - 1
Set rst1 = New ADODB.Recordset
sql2 = "select wh,name from dbo.MY_WH where '" & Trim(DTemp(y).name) & "' = wh"
rst1.Open Trim$(sql2), cnn, 3, 2
If rst1.RecordCount <> 0 Then
stf1 = rst1.Fields(1)
stlen1 = lstrlen(stf1)
stj1 = Space(stlen1)
LCMapstring &H804, &H2000000, stf1, stlen1, stj1, stlen1
str2 = stj1
List1.AddItem "庫位:" & str2 & " 供應商:" & DTemp(y).PRD_MARK & "現有庫存:" & str1(y) & "可用庫存:" & DTemp(y).qty_end & vbCrLf
End If
rst1.Close
Set rst1 = Nothing
Next y
Else:
List1.Clear
List1.AddItem "無庫存"
End If
End Sub
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim VarString
Dim dbFilePath As String
'Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim SQL As String
Dim i As Integer
dbFilePath = "FileDSN=db_tz13.dsn;UID=sa;PWD=sqlsa" 'server 192.168.1.12
If KeyCode = 13 Then
Text1.Text = ""
If Combo1.Text <> "" Then
VarString = Split(Combo1.Text, " ") 'split是一個切割函數
Combo1.Clear
SQL = "SELECT prd_no,spc,ut FROM DBO.PRDT WHERE "
For i = 0 To UBound(VarString)
stj = VarString(i)
stlen = lstrlen(stj)
stf = Space(stlen)
LCMapstring &H804, &H4000000, stj, stlen, stf, stlen
VarString(i) = stf
If i <> 0 Then
SQL = SQL & " and "
End If
SQL = SQL & "CHARINDEX(N'" & Trim(VarString(i)) & "',spc)<>0"
'N 在這裡表示 Unicode,就是雙位元組字元。對于西文字元,用一個位元組來存儲過足夠了,對于東方文字,就需要兩個位元組來存儲。字元串用引号,公式用& &,字元型資料用單引号
Next i
SQL = SQL & " order by prd_no"
Else
Label3.Caption = ""
Exit Sub
End If
Else
Exit Sub
End If
On Error GoTo ExecuteSQL_Error
Set cnn = New ADODB.Connection
cnn.Open dbFilePath
cnn.Execute "use db_tz13"
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
'Rs.open文法:rs.open Source(sql語句),ActiveConnection(資料庫連接配接),CursorType(遊标),LockType(資料鎖定類型)
'Set rs = New ADODB.Recordset
'SQL1 = "select prd_no,qty from dbo.prdt1 where rst.fields(0)=prd_no "
'rs.Open SQL1, cnn, adOpenKeyset, adLockOptimistic
If rst.RecordCount <> 0 Then
ReDim DataTemp(rst.RecordCount - 1)
Label3.Caption = "找到符合條件的 " & rst.RecordCount & "條記錄!"
rst.MoveFirst
For i = 0 To rst.RecordCount - 1
stf = rst.Fields(1)
stlen = lstrlen(stf)
stj = Space(stlen)
LCMapstring &H804, &H2000000, stf, stlen, stj, stlen
'Set rs = New ADODB.Recordset
DataTemp(i).prd_no = rst.Fields(0)
DataTemp(i).spc = stj
DataTemp(i).ut = rst.Fields(2)
'rs.Open "select prd_no,qty from dbo.prdt1 where CHARINDEX(N'" & Trim(DataTemp(i).prd_no) & "',prd_no)<>0", cnn, adOpenKeyset, adLockBatchOptimistic
'DataTemp(i).qty = rs.Fields(1)
Combo1.AddItem DataTemp(i).prd_no & " | " & DataTemp(i).spc '& " | 數量:" & rs.Fields(1)
rst.MoveNext
'rs.MoveNext
If i = 100 Then
i = rst.RecordCount
Label3.Caption = Label3.Caption & Chr(13) & "請注意僅僅列出前100個記錄!"
End If
Next i
'Combo1.Drop
'SendKeys "{f4}"
Else
Label3.Caption = "找到符合條件的 0條記錄!"
End If
rst.Close
Set rst = Nothing
Exit Sub
ExecuteSQL_Error:
MsgBox "連接配接伺服器失敗!", vbOKOnly + vbCritical, "錯誤!"
End Sub
Private Sub Command1_Click()
Shell "C:\WINDOWS\system32\calc.exe", vbNormalFocus
End Sub