拜託高手大大幫我除錯
Option Explicit
Private Const LB_SETHORIZONTALEXTENT = &H194
'宣告一個DLL內的外部程序
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Dim TempStr As String '用於讀取暫存區資料
Dim TempBool As Boolean '判斷資料是否已讀取完畢
Private Sub Form_Load()
'===設定、開啟串列連接埠===
With MSComm1
.CommPort = 1 '設定串列連接埠代號
.Handshaking = comXOnXoff
.NullDiscard = True
.RThreshold = 1
If Not (.PortOpen) Then
.PortOpen = True '開啟串列連接埠
End If
End With
End Sub
Private Sub MSComm1_OnComm()
'===讀取接收暫存區中的資料===
Dim TempLong As Long
Dim MaxLength As Integer '記錄ListBox中的最大字串長度
Dim TempIndex As Integer '記錄ListBox中最長字串的索引值
If TempBool And MSComm1.CommEvent = comEvReceive Then
TempStr = MSComm1.Input
'判斷目前取得資料是否為所有資料
If Val(TempStr) + 3 = Len(TempStr) - InStr(1, TempStr, "&") Then
List1.AddItem Mid(TempStr, InStr(1, TempStr, "&") + 1), 0
TempStr = ""
MaxLength = Len(List1.List(0))
For TempLong = 0 To List1.ListCount - 1 '尋找最長字串
If Len(List1.List(TempLong)) >= MaxLength Then
TempIndex = TempLong
MaxLength = Len(List1.List(TempLong))
End If
Next TempLong
'產生一個水平捲軸
Call SendMessage(List1.hwnd, LB_SETHORIZONTALEXTENT, _
ByVal TextWidth(List1.List(TempIndex)) / 14.8, ByVal 0&)
Else
MSComm1.RThreshold = Val(TempStr) + 20 - Len(TempStr) + _
InStr(1, TempStr, "&") '設定最小接收字元數為尚未讀取字元數
'去除字串長度與分隔字元
TempStr = Mid(TempStr, InStr(1, TempStr, "&") + 1)
TempBool = False
End If
Else
List1.AddItem TempStr + MSComm1.Input, 0
TempStr = ""
TempBool = True
MSComm1.RThreshold = 1
MaxLength = Len(List1.List(0))
For TempLong = 0 To List1.ListCount - 1
If Len(List1.List(TempLong)) >= MaxLength Then
TempIndex = TempLong
MaxLength = Len(List1.List(TempLong))
End If
Next TempLong
Call SendMessage(List1.hwnd, LB_SETHORIZONTALEXTENT, _
ByVal TextWidth(List1.List(TempIndex)) / 14.8, ByVal 0&)
End If
End Sub
' ......表單的外部宣告
Private cn As ADODB.Connection
Private rs As ADODB.Recordset
' ......表單載入時的事件程序
Private Sub Form1_Load()
' 連結資料庫
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=C:\........"
cn.CursorLocation = adUseClient
cn.Open
' 取得資料集
Set rs = New ADODB.Recordset
rs.Open "******", cn, adOpenStatic, adLockOptimistic
' DataGrid取得資料集以顯示記錄
Set DataGrid1.DataSource = rs
End Sub
' ......按新增鈕所觸發的事件程序
Private Sub cmdAdd_Click()
rs.AddNew "@@@@@", List1.List
End Sub
我利用MSCOMM讀取到RS-232的資料顯示在表單上List1上
利用DataGrid1顯示我所要儲存List1資料的資料庫(此為空白資料庫)
現在我要利用按鈕把List1裡的資料新增到資料庫裡
按鈕觸發的程式如上"按新增鈕所觸發的事件程序"底下所示
"表單的外部宣告 "之前的程式則為MSCOMM控制項的程式
中間則為DataGrid1的程式
結果我執行時按這按鈕
程式顯示"引數不為選擇性"
即資料並無法新增到資料庫裡
程式倒數第二行List的地方被藍色框住
倒數第三行Private那一排整排被黃色框住
我覺得問題應該出現在這部份
不過小弟我VB才疏學淺無法看出真正問題
請問高手大大
程式是哪裡出問題
可以請高手大大告訴我嗎
拜託您了
小弟我感激不盡
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.85.178
Visual_Basic 近期熱門文章
PTT數位生活區 即時熱門文章