沧海一舟888 发表于 2008-5-14 12:06:00

autocad vba与数据库的连接

<p>本人最近想编一个小程序,用来统计DWG中的零件数据,程序如下,已能运行,但不知道为什么不能录入英文,有哪位大侠能帮忙指导一下,运界面如附件:</p><p>Option Explicit<br/>Dim adoCon As Connection&nbsp;&nbsp;&nbsp; '连接对象<br/>Dim adoRs As Recordset '记录集对象<br/>Dim strPath As String</p><p>Private Sub cmdAdd_Click()<br/>&nbsp;&nbsp;&nbsp; Dim control As control<br/>&nbsp;&nbsp;&nbsp; For Each control In Form1.Controls<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If TypeOf control Is TextBox Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If control.Text = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "参数不能为空,请重新输入!", vbCritical<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; On Error GoTo errHandle</p><p>&nbsp;&nbsp;&nbsp; '添加新的记录<br/>&nbsp;&nbsp;&nbsp; With adoRs<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .AddNew<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(0) = txtId.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(1) = txtptStX.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(2) = txtptStY.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(3) = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(4) = txtptEnX.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(5) = txtptEnY.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Fields(6) = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Update<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Exit Sub<br/>errHandle:<br/>&nbsp;&nbsp;&nbsp; If Err.Number = -2147467259 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "首先修改文本框中的数值,然后单击“添加”按钮,完成添加的操作。", vbCritical<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Err.Clear<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '由于添加数据失败,不能更新数据库,故取消更新<br/>&nbsp;&nbsp;&nbsp; adoRs.CancelUpdate<br/>End Sub</p><p>Private Sub cmdDelete_Click()<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; If MsgBox("删除当前记录?", vbYesNo, "确认删除") = vbYes Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.Delete adAffectCurrent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If adoRs.EOF Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveLast<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveNext<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ExchangeData False<br/>End Sub</p><p>Private Sub cmdExit_Click()<br/>&nbsp;&nbsp;&nbsp; Unload Me<br/>End Sub</p><p>Private Sub cmdFirst_Click()<br/>&nbsp;&nbsp;&nbsp; adoRs.MoveFirst<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ExchangeData False<br/>End Sub</p><p>Private Sub cmdLast_Click()<br/>&nbsp;&nbsp;&nbsp; adoRs.MoveLast<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ExchangeData False<br/>End Sub</p><p>Private Sub cmdModify_Click()<br/>&nbsp;&nbsp;&nbsp; ExchangeData True<br/>End Sub</p><p>Private Sub cmdNext_Click()<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '如果已经到达末尾<br/>&nbsp;&nbsp;&nbsp; If adoRs.EOF Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveLast<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveNext<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ExchangeData False<br/>End Sub</p><p>Private Sub cmdPrevious_Click()<br/>&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; If adoRs.BOF Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveFirst<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MovePrevious<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ExchangeData False<br/>End Sub</p><p>Private Sub UserForm_Initialize()<br/>&nbsp;&nbsp;&nbsp; '必须首先获得当前的工程路径<br/>&nbsp;&nbsp;&nbsp; strPath = ThisDrawing.Application.VBE.ActiveVBProject.FileName<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '连接数据库<br/>&nbsp;&nbsp;&nbsp; Set adoCon = New Connection<br/>&nbsp;&nbsp;&nbsp; adoCon.CursorLocation = adUseClient<br/>&nbsp;&nbsp;&nbsp; adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Left(strPath, Len(strPath) - 8) &amp; "lineData.mdb;"<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; '打开记录集<br/>&nbsp;&nbsp;&nbsp; Set adoRs = New Recordset<br/>&nbsp;&nbsp;&nbsp; adoRs.Open "ptStEn", adoCon, adOpenDynamic, adLockOptimistic<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; If adoRs.RecordCount &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveLast<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.MoveFirst<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExchangeData False<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</p><p>Private Sub UserForm_Terminate()<br/>&nbsp;&nbsp;&nbsp; '关闭连接和记录集<br/>&nbsp;&nbsp;&nbsp; adoRs.Close<br/>&nbsp;&nbsp;&nbsp; adoCon.Close<br/>End Sub</p><p>'bSave参数取True,表示将文本框中的内容保存到数据库中;取False表示读取数据库的内容<br/>Private Sub ExchangeData(ByVal bSave As Boolean)<br/>&nbsp;&nbsp;&nbsp; If bSave Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.Fields(0) = txtId.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.Fields("ptst(x)") = txtptStX.Text&nbsp;&nbsp;&nbsp;&nbsp; '保存内容仍可使用字段名称或者索引号访问数据库内容<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.Fields("ptst(y)") = txtptStY.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.Fields(4) = txtptEnX.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adoRs.Fields(5) = txtptEnY.Text<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtId.Text = adoRs.Fields("ObjectID")&nbsp;&nbsp; '根据字段名称或者索引均可以访问其内容<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtptStX.Text = adoRs.Fields(1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtptStY.Text = adoRs.Fields(2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtptEnX.Text = adoRs.Fields(4)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtptEnY.Text = adoRs.Fields(5)<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub<br/></p>
页: [1]
查看完整版本: autocad vba与数据库的连接