2013-11-01 12 views
8

Tôi cần tạo một danh sách các trường (tên, loại và kích cỡ) từ bảng Access. mã VB đơn giản này mang lại cho tôi gần những gì tôi cần:Lấy tên của kiểu dữ liệu ADO từ thuộc tính recordset.field.type?

Set rs = CurrentDb.OpenRecordset("myTable") 
For x = 0 To rs.Fields.Count - 1 
    Print #1, rs.Fields(x).Name & vbTab & rs.Fields(x).Type & vbTab & rs.Fields(x).Size 
Next 

Tuy nhiên "Loại" tất nhiên là một hằng số như "10" thay vì một cái gì đó như "Varchar".

tôi sẽ làm điều này:

Select Case rs.Fields(x).Type 
    Case adChar 
    fieldType = "adChar" 
    Case adInteger 
    fieldType = "adInteger" 
    Case adDouble 
ETCETERA.... 

Nhưng tôi tự hỏi, nếu có một cách tốt hơn, một cái gì đó giống như DataTypeEnum.FindName (Type) hoặc một cái gì đó?

Xin lỗi trước nếu đây là "câu hỏi ngu ngốc", nhưng tôi không làm việc trong VB mỗi ngày và Googling đã không đưa ra câu trả lời rõ ràng về điều này.

+3

nó không phải là một câu hỏi ngu ngốc. Hãy thử 'Debug.Print TypeName (rs.Fields (x)), VarType (rs.Fields (x))' i havent đã thử nghiệm nó nhưng chỉ cần cung cấp cho nó một đi –

+3

Không có cách nào dễ dàng để chuyển đổi (trong VBA) một giá trị enum thành tên "tương đương" của nó. Cách bạn có nó là khá nhiều cách bạn làm điều đó. –

+2

Allen Browne có một [trang liệt kê các hằng số] tốt (http://allenbrowne.com/ser-49.html) và thậm chí anh ta có [FieldTypeName] (http://allenbrowne.com/func-06.html) (di chuyển xuống một chút trên trang đó) chức năng, nhưng bạn có lẽ sẽ vẫn phải cuộn của riêng bạn để có được chính xác những gì bạn muốn. – Blackhawk

Trả lời

6

Câu trả lời trong các nhận xét theo câu hỏi (ở trên) là tuyệt vời, rất tiếc là chúng sẽ không hoạt động ở đây. " Không có cách nào đơn giản để lấy kiểu dữ liệu chứa trong một trường. Gần nhất tôi đã có thể đi là để làm điều này cho nhanh-n-bẩn:

Function Scripting() 
    Dim rs As DAO.Recordset 
    Dim ff As String 
    Dim fieldType As String 
    ff = "c:\Users\me\Desktop\Structure.txt" 
    Open ff For Output As #1 
    Set rs = CurrentDb.OpenRecordset("myTable") 
    For x = 0 To rs.Fields.Count - 1 
     Print #1, rs.Fields(x).Name & vbTab & TypeName(rs.Fields(x).Value) & vbTab & rs.Fields(x).Size 
    Next 
    Close #1 
    rs.Close 
    Set rs = Nothing 
End Function 

Bạn sẽ được khuyên đi để Allen Browne 's trang tuyệt vời và lấy chức năng của mình FieldTypeName() cho một giải pháp tốt hơn.

Nhờ tất cả mọi người (mehow, blackhawk, Chris Rolliston và Tim Williams) đã tìm hiểu câu trả lời.

+1

+1 để nhắc tôi về trang web của Allen Browne. – paulroho

Các vấn đề liên quan