小智 15
我在ms访问太多了.
我知道这样做的唯一方法是使用vba,并定义例如记录集,并循环遍历字段.
例如:
Sub ListFields()
dim rst as new adodb.recordset
rst.open "SELECT * FROM SomeTable", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
' Note: adOpenForwardOnly and adLockReadOnly are the default values '
' for the CursorType and LockType arguments, so they are optional here '
' and are shown only for completeness '
dim ii as integer
dim ss as string
for ii = 0 to rst.fields.count - 1
ss = ss & "," & rst.fields(ii).name
next ii
Debug.Print ss
End Sub
Run Code Online (Sandbox Code Playgroud)
字符串变量ss将包含名为"SomeTable"的表中所有列名的逗号分隔列表.
通过稍微重新格式化逻辑,您应该能够将此数据插入到另一个表中,然后查询它.
这有帮助吗?
该版本易于运行,可以直接粘贴到Access中。将此功能添加到模块中,以F5运行,然后从输入框中复制结果:
Public Function FieldNames() As String
Dim sTable As String
Dim rs As DAO.Recordset
Dim n As Long
Dim sResult As String
sTable = InputBox("Name of table?")
If sTable = "" Then
Exit Function
End If
Set rs = CurrentDb.OpenRecordset(sTable)
With rs
For n = 0 To .Fields.Count - 1
sResult = sResult & .Fields(n).Name & vbCrLf
Next 'n
.Close
End With
Set rs = Nothing
InputBox "Result:" & vbCrLf & vbCrLf _
& "Copy this text (it looks jumbled, but it has one field on each line)", _
"FieldNames()", sResult
End Function
Run Code Online (Sandbox Code Playgroud)
替代输出:
用户user1003916提供了InputBox的替代方案,以克服1024个字符的限制(我尚未对此进行测试):
Sub CopyText(Text As String)
'VBA Macro using late binding to copy text to clipboard.
'By Justin Kay, 8/15/2014
Dim MSForms_DataObject As Object
Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
MSForms_DataObject.SetText Text
MSForms_DataObject.PutInClipboard
Set MSForms_DataObject = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
更新:要使用此 SQL 查询,您必须使用 DBEAVER 等工具。访问客户端不允许您查询它的隐藏结构。
哎呀!IMO:我无法想象想要潜入 VBA 的黑暗腹地
SELECT * FROM information_schema.columns
WHERE TABLE_NAME="YOUR_TABLE_NAME"
AND
TABLE_SCHEMA="PUBLIC"
Run Code Online (Sandbox Code Playgroud)
PS 我注意到 Access 称我的架构为“PUBLIC”
上面使用了 Access 2016 并通过 ODBC 和 jdbc:ucanaccess 进行了测试,并且效果很好。
示例输出