powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ODBC и чтение СХЕМЫ данных из Excel
5 сообщений из 5, страница 1 из 1
ODBC и чтение СХЕМЫ данных из Excel
    #39442256
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу перестраховаться и потренироваться...

Короче, список таблиц (листов) с файла Excel хачу.
Но не могу.

Кто умеет?

' Вот эта хрень не работает!
Set x = .GetSchema("TABLES")

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  
  Set ExcelConn = New ADODB.Connection
  
  With ExcelConn
  
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
                        "DBQ=" + file + ";" & _
                        "ReadOnly=TRUE;"

    Debug.Print .ConnectionString
    .Open

    ' Вот эта хрень не работает!
    Set x = .GetSchema("TABLES")

    Set rs = .Execute("SELECT * FROM [Лист1$]")
    For Each x In rs.Fields
       Debug.Print x.Name
    Next
     
    .Close
...
Рейтинг: 0 / 0
ODBC и чтение СХЕМЫ данных из Excel
    #39442317
HELPTo list all of the tables and queries in the Microsoft Access NWind database, simply use the following code:
Set rs = cn.OpenSchema(adSchemaTables)
While Not rs.EOF
Debug.Print rs!TABLE_NAME
rs.MoveNext
Wend

To list only the tables in the Access Nwind database, use:
Set rs = cn.OpenSchema(adSchemaTables, _
Array(Empty, Empty, Empty, "Table")
Откуда вы взяли .GetSchema("TABLES")?
Что это за цикл по полям одной записи?
Причем здесь .Execute("SELECT * FROM [Лист1$]")?

Почему используете ODBC, а не Provider?
...
Рейтинг: 0 / 0
ODBC и чтение СХЕМЫ данных из Excel
    #39442346
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks2Короче, список таблиц (листов) с файла Excel хачу.
Но не могу.

была же вроде тема 1027275
...
Рейтинг: 0 / 0
ODBC и чтение СХЕМЫ данных из Excel
    #39442377
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )HELPTo list all of the tables and queries in the Microsoft Access NWind database, simply use the following code:
Set rs = cn.OpenSchema(adSchemaTables)
While Not rs.EOF
Debug.Print rs!TABLE_NAME
rs.MoveNext
Wend

To list only the tables in the Access Nwind database, use:
Set rs = cn.OpenSchema(adSchemaTables, _
Array(Empty, Empty, Empty, "Table")
1. Откуда вы взяли .GetSchema("TABLES")?
2. Что это за цикл по полям одной записи?
3. Причем здесь .Execute("SELECT * FROM [Лист1$]")?

4. Почему используете ODBC, а не Provider?

Какой он любопытный.

1. Из интернету. Чо за глупый вопрос.
2. Не понимаешь, чтоле? Имена полей таблицы. Для посмотреть.
3. Тебя ж про ЭТО не спрашивают.
4. Кто такой "Provider". Я его не знаю. А OLE DB объявлено deprecated. Все идут на ODBC. Такова воля Микрософт.
...
Рейтинг: 0 / 0
ODBC и чтение СХЕМЫ данных из Excel
    #39442643
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, все свободны.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
Private Sub btnLoadFile_Click()

  Dim file As String, str As String, strCnt As Integer
  Dim xlsConn As ADODB.Connection, xlsSchema As ADODB.Recordset, xlsList As String, xlsRs As ADODB.Recordset
  Dim FileId As Integer, f As ADODB.Field
  
  file = GetSetting(CurrentProject.Name, Me.Name, "btnLoadFile_LastFile")
  
  file = Trim(SelectTxtFile(file))
  
  If file = "" Then
    MsgBox "Ôàéë íå óêàçàí.", Buttons:=vbOKOnly + vbInformation, Title:=Me.Name
    Exit Sub
  End If
  
  If (InStrRev(file, ".") = 0) Or (InStrRev(file, ".") <= InStrRev(file, "\")) Then
    file = file + ".xlsx"
  End If
  
  If Dir(file) = "" Then
    MsgBox "&#212;&#224;&#233;&#235; [" + file + "] &#237;&#229; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#243;&#229;&#242;.", Buttons:=vbOKOnly + vbExclamation, Title:=Me.Name
    Exit Sub
  End If
  
  DoCmd.Hourglass True
  
  SaveSetting CurrentProject.Name, Me.Name, "btnLoadFile_LastFile", file
  
  On Error GoTo Err_Click
  
  Set xlsConn = New ADODB.Connection
  strCnt = 0
  
  With xlsConn
  
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
                        "DBQ=" + file + ";" & _
                        "ReadOnly=TRUE;"

    .Open
    
    Set xlsSchema = .OpenSchema(adSchemaTables)
    
    xlsList = ""
    While Not xlsSchema.EOF And (xlsList = "")
      
        str = xlsSchema.Fields("TABLE_NAME").value
        
        Set xlsRs = .Execute("SELECT * FROM [" + str + "]")
        
        If xlsRs.Fields(0).Name <> "&#207;&#224;&#247;&#234;&#224;" Then
          xlsRs.Close
        Else
          xlsList = str
        End If
        
        xlsSchema.MoveNext
      
    Wend
    
    xlsSchema.Close
    Set xlsSchema = Nothing
    
    If xlsList = "" Then
    
        MsgBox "&#203;&#232;&#241;&#242; &#241; &#228;&#224;&#237;&#237;&#251;&#236;&#232; &#226; &#244;&#224;&#233;&#235;&#229; [" + file + "] &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237;.", Buttons:=vbOKOnly + vbExclamation, Title:=Me.Name
    
    Else
    
        With New ADODB.Command
          
          .CommandText = "Finances.accTicketsRC_FileId"
          .CommandType = adCmdStoredProc
          .CommandTimeout = 120
          .NamedParameters = True
          .ActiveConnection = CurrentProject.Connection
          .Parameters.Append .CreateParameter("Return", adInteger, adParamReturnValue)
          .Parameters.Append .CreateParameter("@File", adVarWChar, adParamInput, 512, file)
          .Parameters.Append .CreateParameter("@Id", adInteger, adParamOutput)
          .Execute Options:=adExecuteNoRecords
          
          FileId = .Parameters("@Id")
          
        End With
        
        With New ADODB.Recordset
          .Open Source:="select top(0) * from Finances.TicketsRC_ExcelFileLines" _
                 , ActiveConnection:=CurrentProject.Connection _
                 , CursorType:=adOpenKeyset _
                 , LockType:=adLockBatchOptimistic _
                 , Options:=adCmdText
        
          While Not xlsRs.EOF
            
            .AddNew
            strCnt = strCnt + 1
            
            .Fields("FileId") = FileId
            
            For Each f In xlsRs.Fields
              .Fields(f.Name) = f.value
            Next
            
            xlsRs.MoveNext
          
          Wend
          
          .UpdateBatch
          .Close
        
        End With

        xlsRs.Close
        
        DoCmd.Hourglass False
    
        MsgBox "&#196;&#224;&#237;&#237;&#251;&#229; &#231;&#224;&#227;&#240;&#243;&#230;&#229;&#237;&#251; &#232;&#231; [" + file + "]. &#194;&#241;&#229;&#227;&#238; " + CStr(strCnt) + " &#241;&#242;&#240;&#238;&#234;.", Buttons:=vbOKOnly, Title:=Me.Name
        
    End If
    
    Set xlsRs = Nothing
    
  
  End With
  
  Set xlsConn = Nothing
  
  DoCmd.Hourglass False
  
Exit Sub

Err_Click:
    
    DoCmd.Hourglass False
    MsgBox Error_Descriptions.Translate(Err.Description), Title:=Me.Name

End Sub
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ODBC и чтение СХЕМЫ данных из Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]