查找DBF数据库中所有表的名称

问题描述 投票:0回答:2

我正在尝试找出硬盘目录中的

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”不是本地对象,请检查您的网络连接或联系服务器管理员。

这是合乎逻辑的。在这里,访问系统表的方法将不起作用,因为它们不是。问题 - 我如何知道“更新”文件夹中表的名称?文件夹截图:

Screenshot of the folders

vbscript asp-classic dbf
2个回答
0
投票

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 

0
投票

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

%>
© www.soinside.com 2019 - 2024. All rights reserved.