我正在尝试找出硬盘目录中的
tables.DBF
的名称。
随后,我需要知道它们的列的名称,但即使是表的名称我也不知道如何找到。标准 SQL 工具不起作用,这是合乎逻辑的。该脚本在 IIS (win server 2008)、VBScript 下的站点上运行。对于连接,我使用驱动程序:AccessDatabaseEngine_X64。
从特定表中进行选择是有效的,创建、删除表 - 它有效。连接代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE=1251%>
<%
Function OpenDBFConn(Path)
Dim Conn: Set Conn = CreateObject("ADODB.Connection")
Conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Path & ";" & _
"Extended Properties=""DBASE IV;"";"
Set OpenDBFConn = Conn
End Function
Dim DBConn
Set DBConn = OpenDBFConn("C:\update")
Dim Lel
Set Lel = DBConn.Execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_type='BASE TABLE'")
%>
脚本结果:
Microsoft Access 数据库引擎找不到对象“INFORMATION_SCHEMA.TABLES”。确保该对象存在并且其名称和路径名称拼写正确。如果“INFORMATION_SCHEMA.TABLES”不是本地对象,请检查您的网络连接或联系服务器管理员。
这是合乎逻辑的。在这里,访问系统表的方法将不起作用,因为它们不是。问题 - 我如何知道“更新”文件夹中表的名称?文件夹截图:
1) 表名称。正如已经提到的,使用 FileSystemObject:
获取表名称(即 M1072R、M10201 等)Set fs=Server.CreateObject("Scripting.FileSystemObject")
Set fo=fs.GetFolder("C:\update")
For Each x in fo.files
If LCase(fs.GetExtensionName(x.path)) = "dbf" Then
Response.Write fs.GetBaseName(x.path) & ";"
End if
Next
2)列名称:
'Dim Lel
'Set Lel = DBConn.Execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_type='BASE TABLE'")
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "M1072R", DBConn
'-- where M1072R is your table/dbf file
For Each f In rs.Fields
Response.Write "Column=" & f.Name & ";"
Next
获取列的另一种方法是使用 OpenSchema
Set rs=DBConn.OpenSchema(4, Array(Null, Null, "M1072R"))
'-- where M1072R is your table/dbf file,
'-- 4 stands for adSchemaColumns
Do While Not rs.EOF
Response.Write "Column=" & rs.Fields("COLUMN_NAME").Value & ";"
rs.MoveNext
Loop
OLEDB.4.0、ADO、VBScript 代码(ASP 经典):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%OPTION EXPLICIT%>
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
With objConn
.Provider = "Microsoft.Jet.OLEDB.4.0;"
.ConnectionString = "Data Source=" & Server.MapPath("\test.mdb")
.Open
End With
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
Const adSchemaTables = 20 ' SchemaEnum Values (Returns the tables (including views) defined in the catalog that are accessible to a given user)
Set objRS = objConn.OpenSchema(adSchemaTables)
if objRS.EOF then
response.write "<div>adSchemaTables: empty!</div>"
objRS.Close()
Set objRS = Nothing
else
objRS.MoveFirst
While Not objRS.EOF
response.write objRS.Fields("TABLE_NAME") & "<br />"
objRS.MoveNext
wend
objRS.Close()
Set objRS = Nothing
end if
%>