Найти имя всех таблиц в базе данных DBF - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь узнать имена 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

1 Ответ

0 голосов
/ 15 октября 2018

1) Имена таблиц.Как уже упоминалось, получить имена таблиц (например, M1072R, M10201 и т. Д.), Используя FileSystemObject :

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 
...