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

时间:2018-09-29 06:43:03

标签: vbscript asp-classic dbf

我正试图找出tables.DBF的名称,这些名称在硬盘目录中。

随后,我需要知道它们的列的名称,但是即使是表的名称,我也不知道如何找出。标准的SQL工具不起作用,这是合乎逻辑的。该脚本在IIS(Windows 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

1 个答案:

答案 0 :(得分: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