Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ODBC и чтение СХЕМЫ данных из Excel / 5 сообщений из 5, страница 1 из 1
21.04.2017, 13:29
    #39442256
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и чтение СХЕМЫ данных из Excel
Хочу перестраховаться и потренироваться...

Короче, список таблиц (листов) с файла 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
21.04.2017, 14:49
    #39442317
ODBC и чтение СХЕМЫ данных из Excel
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
21.04.2017, 15:24
    #39442346
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и чтение СХЕМЫ данных из Excel
aleks2Короче, список таблиц (листов) с файла Excel хачу.
Но не могу.

была же вроде тема 1027275
...
Рейтинг: 0 / 0
21.04.2017, 16:07
    #39442377
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и чтение СХЕМЫ данных из Excel
Анатолий ( Киев )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
22.04.2017, 12:01
    #39442643
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и чтение СХЕМЫ данных из Excel
Всем спасибо, все свободны.

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


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