作者quanyong (万般皆是命阿)
看板Visual_Basic
标题拜托高手大大帮我除错
时间Mon May 14 17:20:14 2007
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