Đến nội dung


Hình ảnh
- - - - -

hỏi về thao tác với CSDL bằng VBA


  • Please log in to reply
4 replies to this topic

#1 hoatran_gha

hoatran_gha

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 18 November 2008 - 10:59 AM

Em đang học về VBA trong autoCAD nhưng đến phần CSDL thì thấy mắc quá. Bác nào giúp em doạn code tạo 1 file diem.MDB sau đó nhập tọa độ của 1 điểm gồm X và Y(tu 1file .txt), sau đó truy xuất từ file diem.MDB đó vẽ trên autocad với ạ
Cảm ơn các bác nhiều!
  • 0

#2 neweng08

neweng08

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 November 2008 - 01:54 AM

Tôi chưa thử link giữa CAD và Access bao giờ, nhưng nếu bác chịu khó đọc cái này (tiếng Anh :leluoi: ) chắc sẽ được, hướng dẫn rất căn bản và chi tiết:

VBA: Integrating with Microsoft Access - Part 1
VBA: Integrating with Microsoft Access - Part 2
VBA: Integrating with Microsoft Access - Part 3
From Autodesk.com

Ngoài ra còn rất nhiều vấn đề khác, tấc cả về AutoCAD các bác tham khảo tại AutoCAD Services & Support
  • 0

#3 bisok2

bisok2

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 July 2009 - 05:47 PM

Em đang học về VBA trong autoCAD nhưng đến phần CSDL thì thấy mắc quá. Bác nào giúp em doạn code tạo 1 file diem.MDB sau đó nhập tọa độ của 1 điểm gồm X và Y(tu 1file .txt), sau đó truy xuất từ file diem.MDB đó vẽ trên autocad với ạ
Cảm ơn các bác nhiều!

Mình cũng tập tành làm việc với VBA trong cad. sau đây là đoạn code về đọc dữ liệu từ file MDB và vẽ lại trong CAD của mình
đây là ứng dụng cụ thể về việc đọc 1 file MDB được export từ chương trình Sap 8.203
đầu tiên là modun về tạo FileDialog để mở file MDB (cái này do mình ko đủ ocx để tạo commondialog nên phài nhờ ông anh làm hộ :s_big: )
=======================
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Function SelectFileDialog(ByVal isOpen, ByVal FileFilter, ByVal initDir)
Dim strTemp, strTemp1, pathStr As String
Dim I, n, J As Long
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
Dim Fname As String
OpenFile.lStructSize = Len(OpenFile)
If FileFilter = "" Then
sFilter = "Text Files (*.txt)" & Chr(0) & "*.TXT" & Chr(0)
Else
sFilter = FileFilter
End If
If FileFilter = "" Then
OpenFile.lpstrInitialDir = initDir
Else
OpenFile.lpstrInitialDir = "d:\"
End If
If isOpen = True Then
OpenFile.lpstrTitle = "Open"
Else
OpenFile.lpstrTitle = "Save"
End If

OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
OpenFile.flags = 0
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
SelectFileDialog = ""
Else
SelectFileDialog = Trim(OpenFile.lpstrFile)
End If
End Function
===========================
tiếp theo là modun vẽ
============
Public Sub Ve3DThap()
Dim strSQL
Dim Line As Variant
Dim SP As Variant, EP As Variant
Dim StartPoint(0 To 2) As Double
Dim EndPoint(0 To 2) As Double
Dim bytSoDotCu As Byte
Dim DBKT As Database
Dim RS As Recordset, RS1 As Recordset
Dim bytI As Byte
Dim intSoThanhCu, intSoThanhMoi
Dim CaoTrinh As Double
Dim SQL As String
Dim fileName As String
fileName = SelectFileDialog(True, "Data Files (*.mdb)" & Chr(0) & "*.mdb" & Chr(0), "D:")
If Not (fileName = "") Then
Call MoCSDL(DBKT, Trim(fileName))
'Doc du lieu tu bang [Connectivity - Frame/Cable]
strSQL = "SELECT Fr.Frame, JC1.XorR as XorR1, JC1.Y as Y1 , JC1.Z as Z1, JC2.XorR AS XorR2, JC2.Y as Y2 , JC2.Z as Z2 " & _
"FROM ([Connectivity - Frame/Cable] AS Fr INNER JOIN [Joint Coordinates] AS JC1 ON Fr.JointI = JC1.Joint) " & _
"INNER JOIN [Joint Coordinates] AS JC2 ON Fr.JointJ = JC2.Joint"
Set RS = DBKT.OpenRecordset(strSQL)
RS.MoveFirst
Do While Not RS.EOF
StartPoint(0) = RS.Fields("XorR1")
StartPoint(1) = RS.Fields("Y1")
StartPoint(2) = RS.Fields("Z1")
EndPoint(0) = RS.Fields("XorR2")
EndPoint(1) = RS.Fields("Y2")
EndPoint(2) = RS.Fields("Z2")
Set Line = ThisDrawing.ModelSpace.AddLine(StartPoint, EndPoint)
RS.MoveNext
Loop
'§ãng RS më bëi c©u truy vÊn strSQL
RS.Close
Else
MsgBox "Chon Lai Duong Dan File Du Lieu"
End If
End Sub
Mình sẽ up file mdb cho bạn tiện sử dụng
  • 0

#4 bisok2

bisok2

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 July 2009 - 05:52 PM

Và Đây là đường link của file MDB
http://www.cadviet.com/upfiles/db1.zip
cái SQL nó phụ thuộc vào cấu trúc của bảng trong MDB
Có gì thắc mắc có thể liên hệ với em qua địa chỉ yaho: bisok2@yahoo.com
Em rất mong được chia sẻ kinh nghiệm :s_big:
  • 0

#5 bisok2

bisok2

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 July 2009 - 06:05 PM

bài trước em thiếu một modun em xin phép bổ sung
====================================================
Public Sub MoCSDL(strDBName As Database, strFileName As String)
On Error GoTo ErrorHandler:
' blnKetThuc = False
If strFileName = "" Then
' blnKetThuc = True
MsgBox "Nhap lai duong dan File du lieu", vbCritical
Exit Sub
End If
Set strDBName = OpenDatabase(strFileName)
Exit Sub
ErrorHandler:
MsgBox "Kh«ng më ®­îc CSDL! Chän l¹i File MDB !" & Err.Description
' blnKetThuc = True
Exit Sub
End Sub
==================================================
  • 0