2009-09-14 5 views

Répondre

0

pour cette solution:

Option Explicit 

Public Sub ExportTableDesign() 
    Const strFileName_c As String = "testFldOutput.txt" 
    Dim strFullPath As String 
    Dim db As DAO.Database 
    Dim tdf As DAO.TableDef 
    Dim strTblName As String 
    Dim fld As DAO.Field 
    Dim strm As ADODB.Stream 
    Set db = Access.CurrentDb 
    strFullPath = Environ("USERPROFILE") & "\DeskTop\" & strFileName_c 
    Do 
     strTblName = InputBox("Please enter name of table to extract:", "Enter Table Name", strTblName) 
     If LenB(strTblName) = 0& Then Exit Sub 
     If TableExists(strTblName) Then 
      Set tdf = db.TableDefs(strTblName) 
      Exit Do 
     End If 
     MsgBox "Can not find table: " & strTblName, vbExclamation 
    Loop 
    Set strm = New ADODB.Stream 
    With strm 
     .Open 
     .LineSeparator = adCRLF 
     .WriteText "Field Name" & vbTab & "Data Type", adWriteLine 
     For Each fld In tdf.Fields 
      .WriteText fld.name & vbTab & TypeToString(fld.Type), adWriteLine 
     Next 
     .SaveToFile strFullPath, adSaveCreateOverWrite 
    End With 
    db.Close 
    Shell "Excel.exe " & strFullPath & "", vbMaximizedFocus 
End Sub 

Private Function TypeToString(ByVal typeValue As DAO.DataTypeEnum) As String 
    Dim strRtnVal As String 
    Select Case typeValue 
    Case dbBigInt: strRtnVal = "Big Integer" 
    Case dbBinary: strRtnVal = "Binary" 
    Case dbBoolean: strRtnVal = "Boolean" 
    Case dbByte: strRtnVal = "Byte" 
    Case dbChar: strRtnVal = "Char" 
    Case dbCurrency: strRtnVal = "Currency" 
    Case dbDate: strRtnVal = "Date/Time" 
    Case dbDecimal: strRtnVal = "Decimal" 
    Case dbDouble: strRtnVal = "Double" 
    Case dbFloat: strRtnVal = "Float" 
    Case dbGUID: strRtnVal = "GUID" 
    Case dbInteger: strRtnVal = "Integer" 
    Case dbLong: strRtnVal = "Long" 
    Case dbLongBinary: strRtnVal = "Long Binary (OLE Object)" 
    Case dbMemo: strRtnVal = "Memo" 
    Case dbNumeric: strRtnVal = "Numeric" 
    Case dbSingle: strRtnVal = "Single" 
    Case dbText: strRtnVal = "Text" 
    Case dbTime: strRtnVal = "Time" 
    Case dbTimeStamp: strRtnVal = "Time Stamp" 
    Case dbVarBinary: strRtnVal = "VarBinary" 
    Case Else: strRtnVal = "Unknown" 
    End Select 
    TypeToString = strRtnVal 
End Function 

Private Function TableExists(ByVal tableName As String) As Boolean 
    On Error Resume Next 
    TableExists = LenB(Access.CurrentDb.TableDefs(tableName).name) 
End Function 
+0

Je ne comprends pas la raison de l'utilisation d'ADO pour la sortie. –

+1

rofl Salut David, nous devons arrêter de nous rencontrer de cette façon;) Comme tout le reste, il y a vingt façons de peler un chat. Vous pourriez utiliser les capacités d'E/S natives de VB, SQL, le FSO, etc. Vous pourriez même mettre tout cela dans Excel et récupérer les informations au lieu de les pousser. (Ce que je fais professionnellement, je me suis écrit un petit "add-in développeur" qui effectue diverses analyses sur des bases de données.) J'ai surtout utilisé ADO, parce que je savais qu'Access aurait déjà l'ensemble de référence et si quelqu'un décidait d'explorer le code , les fonctions avancées d'un ADO.Stream sont plus décelables que l'IO File natif a tendance à être – Oorang

+0

Oh attends ... Je pense que je vois ce que vous demandez: D ... Comme PowerUser, je n'étais pas 100% clair sur la question. Mais il l'a étiqueté Excel, alors j'ai juste pris une supposition éclairée sur ce qu'il pourrait vouloir faire en fonction des choses que j'ai faites moi-même :) – Oorang

Questions connexes