Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/VBA не распознает формат Access 2007 *accdb - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
VBA не распознает формат Access 2007 *accdb
Гость Дата: Среда, 06.06.2012, 10:09 | Сообщение № 1
Группа: Гости
Доброе утро, уважаемые обитатели:)
Обращаюсь к Вам вот с каким вопросом, есть у меня макрос который затягивает данные в книгу Эксель из Access:

[vba]
Code
Sub load_access_sales()
Call clear_sheet("продажи_МБ")
' If UserForm8.TextBox1.Value <> "" Then

' T = UserForm2.TextBox1.Text
'' tt = UserForm2.TextBox2.Text

Dim strSql As String
Dim z
DB = "V:\Public\DRP_Project\БД\Sales.mdb"

strSql = "SELECT ЗАПРОС_МБ_NEW.[Дата сделки], ЗАПРОС_МБ_NEW.[Региональная дирекция], ЗАПРОС_МБ_NEW.[Тип контрагента], ЗАПРОС_МБ_NEW.[Код контрагента], ЗАПРОС_МБ_NEW.[Тип сделки (наим)], ЗАПРОС_МБ_NEW.[Код сделки], ЗАПРОС_МБ_NEW.[Код сделки кредита], ЗАПРОС_МБ_NEW.Валюта, ЗАПРОС_МБ_NEW.[Первоначальная сумма по договору (грнэкв)], ЗАПРОС_МБ_NEW.[%% ставка(маржа)], ЗАПРОС_МБ_NEW.[Count-Номер сделки] FROM ЗАПРОС_МБ_NEW;"

Sheet_name = "продажи_МБ"
z = GetRecord(DB, strSql, "", Sheet_name)

End Sub
[/vba]
Макрос чудно работает с базами данных 2000 и 2003 с расширением *mdb.

Так вот, после того, когда у меня появились базы Access 2007 c расширением *accdb - макрос пишет - "Нероспознаваемый формат базы данных". Переводить базу данных в 2003 не хочу, потому как по специфике работы - там ооочень важные данные. А я уверен, что после конвертирование в Access 2003 она будет сжиматься, а прецеденты после сжимание базы и исчезнование ваажной инфы у меня уже были..
Поэтому прошу помощи у Вас...мож кто когда-то сталкивался с такой проблемой.
 
Ответить
СообщениеДоброе утро, уважаемые обитатели:)
Обращаюсь к Вам вот с каким вопросом, есть у меня макрос который затягивает данные в книгу Эксель из Access:

[vba]
Code
Sub load_access_sales()
Call clear_sheet("продажи_МБ")
' If UserForm8.TextBox1.Value <> "" Then

' T = UserForm2.TextBox1.Text
'' tt = UserForm2.TextBox2.Text

Dim strSql As String
Dim z
DB = "V:\Public\DRP_Project\БД\Sales.mdb"

strSql = "SELECT ЗАПРОС_МБ_NEW.[Дата сделки], ЗАПРОС_МБ_NEW.[Региональная дирекция], ЗАПРОС_МБ_NEW.[Тип контрагента], ЗАПРОС_МБ_NEW.[Код контрагента], ЗАПРОС_МБ_NEW.[Тип сделки (наим)], ЗАПРОС_МБ_NEW.[Код сделки], ЗАПРОС_МБ_NEW.[Код сделки кредита], ЗАПРОС_МБ_NEW.Валюта, ЗАПРОС_МБ_NEW.[Первоначальная сумма по договору (грнэкв)], ЗАПРОС_МБ_NEW.[%% ставка(маржа)], ЗАПРОС_МБ_NEW.[Count-Номер сделки] FROM ЗАПРОС_МБ_NEW;"

Sheet_name = "продажи_МБ"
z = GetRecord(DB, strSql, "", Sheet_name)

End Sub
[/vba]
Макрос чудно работает с базами данных 2000 и 2003 с расширением *mdb.

Так вот, после того, когда у меня появились базы Access 2007 c расширением *accdb - макрос пишет - "Нероспознаваемый формат базы данных". Переводить базу данных в 2003 не хочу, потому как по специфике работы - там ооочень важные данные. А я уверен, что после конвертирование в Access 2003 она будет сжиматься, а прецеденты после сжимание базы и исчезнование ваажной инфы у меня уже были..
Поэтому прошу помощи у Вас...мож кто когда-то сталкивался с такой проблемой.

Автор - Гость
Дата добавления - 06.06.2012 в 10:09
Gustav Дата: Среда, 06.06.2012, 10:30 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Текст функции GetRecord - в студию! А также расскажите, какие галочки у вас включены в Excel в редакторе VBA в пункте меню Tools \References.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеТекст функции GetRecord - в студию! А также расскажите, какие галочки у вас включены в Excel в редакторе VBA в пункте меню Tools \References.

Автор - Gustav
Дата добавления - 06.06.2012 в 10:30
Гость Дата: Среда, 06.06.2012, 10:36 | Сообщение № 3
Группа: Гости
[vba]
Code
' Выгрузка данных из БД
Public Function GetRecord(strDB, strSql, PWD, Sheet_name As String) As Variant ' функция формирующая набор записей по сформированому запросу
'On Error Resume Next
Dim i As Byte
Dim DB As DAO.Database
Dim qdfTempQuery As DAO.QueryDef
Dim rs As DAO.Recordset
Set DB = OpenDatabase(strDB, False, False, "MS Access; PWD=" & PWD) 'открытие базы данных с монопольным паролем
Set qdfTempQuery = DB.CreateQueryDef("") ' пустые кавычки означают, что запрос не будет сохранен в базе данных
With qdfTempQuery ' формируем параметры запроса
'Debug.Print strSql
.Sql = strSql ' передаем запрос на выполнение
Set rs = .OpenRecordset(dbOpenForwardOnly) 'производим запись данных
End With
Set GetRecord = rs ' передаем записанные данные функции, которая может принимать форму массива данных
Sheets(Sheet_name).Range("A2").CopyFromRecordset rs

For i = 1 To rs.Fields.Count
Sheets(Sheet_name).Cells(1, i).Value = rs.Fields(i - 1).Name
Next
End Function
[/vba]
Включены следуюющие модули (библиотеки):
VBA for application
MS Excel 12.0 Object Library
OLE AUTOMATION
MS Offise 12.0 Object Library
MS Forms 12.0 Object Library
MS DAO 3.6 Object Library
 
Ответить
Сообщение[vba]
Code
' Выгрузка данных из БД
Public Function GetRecord(strDB, strSql, PWD, Sheet_name As String) As Variant ' функция формирующая набор записей по сформированому запросу
'On Error Resume Next
Dim i As Byte
Dim DB As DAO.Database
Dim qdfTempQuery As DAO.QueryDef
Dim rs As DAO.Recordset
Set DB = OpenDatabase(strDB, False, False, "MS Access; PWD=" & PWD) 'открытие базы данных с монопольным паролем
Set qdfTempQuery = DB.CreateQueryDef("") ' пустые кавычки означают, что запрос не будет сохранен в базе данных
With qdfTempQuery ' формируем параметры запроса
'Debug.Print strSql
.Sql = strSql ' передаем запрос на выполнение
Set rs = .OpenRecordset(dbOpenForwardOnly) 'производим запись данных
End With
Set GetRecord = rs ' передаем записанные данные функции, которая может принимать форму массива данных
Sheets(Sheet_name).Range("A2").CopyFromRecordset rs

For i = 1 To rs.Fields.Count
Sheets(Sheet_name).Cells(1, i).Value = rs.Fields(i - 1).Name
Next
End Function
[/vba]
Включены следуюющие модули (библиотеки):
VBA for application
MS Excel 12.0 Object Library
OLE AUTOMATION
MS Offise 12.0 Object Library
MS Forms 12.0 Object Library
MS DAO 3.6 Object Library

Автор - Гость
Дата добавления - 06.06.2012 в 10:36
Gustav Дата: Среда, 06.06.2012, 10:57 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Гость, попробуйте вместо MS DAO 3.6 Object Library подключить Microsoft Office 14.0 Access database engine Object Library (это для 2010, для 2007 наверное 12.0 в середине).


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеГость, попробуйте вместо MS DAO 3.6 Object Library подключить Microsoft Office 14.0 Access database engine Object Library (это для 2010, для 2007 наверное 12.0 в середине).

Автор - Gustav
Дата добавления - 06.06.2012 в 10:57
Саня Дата: Среда, 06.06.2012, 11:08 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?
 
Ответить
Сообщениея использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Автор - Саня
Дата добавления - 06.06.2012 в 11:08
Gustav Дата: Среда, 06.06.2012, 11:29 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Quote

я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO. smile


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Quote

я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO. smile

Автор - Gustav
Дата добавления - 06.06.2012 в 11:29
Гость Дата: Среда, 06.06.2012, 11:44 | Сообщение № 7
Группа: Гости
Quote (Gustav)
я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO.
Цитата:

я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO. Gustav

Если Вам не сложно, можете набросать альтернативный вариант решения..а нет - буду сам как -то пытаться..
 
Ответить
Сообщение
Quote (Gustav)
я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO.
Цитата:

я использую для этого технологию ADO
поменялся поставщик данных:
2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..."
2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."

может это как-то связано?

Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO. Gustav

Если Вам не сложно, можете набросать альтернативный вариант решения..а нет - буду сам как -то пытаться..

Автор - Гость
Дата добавления - 06.06.2012 в 11:44
Саня Дата: Среда, 06.06.2012, 11:53 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Уокенбах:
[vba]
Code
Sub ADO_Demo()
' This demo requires a reference to
' the Microsoft ActiveX Data Objects 2.x Library
     Dim DBFullName As String
     Dim Cnct As String, Src As String
     Dim Connection As ADODB.Connection
     Dim Recordset As ADODB.Recordset
     Dim Col As Integer
     Cells.Clear
     ' Database information
     DBFullName = ThisWorkbook.Path & "\budget data.accdb"
     ' Open the connection
     Set Connection = New ADODB.Connection
     Cnct = "Provider=Microsoft.ACE.OLEDB.12.0;"
     Cnct = Cnct & "Data Source=" & DBFullName & ";"
     Connection.Open ConnectionString:=Cnct
     ' Create RecordSet
     Set Recordset = New ADODB.Recordset
     With Recordset
         ' Filter
         Src = "SELECT * FROM Budget WHERE Item = 'Lease' "
         Src = Src & "and Division = 'N. America' "
         Src = Src & "and Year = '2008'"
         .Open Source:=Src, ActiveConnection:=Connection
         ' Write the field names
         For Col = 0 To Recordset.Fields.Count - 1
             Range("A1").Offset(0, Col).Value = _
             Recordset.Fields(Col).Name
         Next
         ' Write the recordset
         Range("A1").Offset(1, 0).CopyFromRecordset Recordset
     End With
     Set Recordset = Nothing
     Connection.Close
     Set Connection = Nothing
End Sub
[/vba]
 
Ответить
СообщениеУокенбах:
[vba]
Code
Sub ADO_Demo()
' This demo requires a reference to
' the Microsoft ActiveX Data Objects 2.x Library
     Dim DBFullName As String
     Dim Cnct As String, Src As String
     Dim Connection As ADODB.Connection
     Dim Recordset As ADODB.Recordset
     Dim Col As Integer
     Cells.Clear
     ' Database information
     DBFullName = ThisWorkbook.Path & "\budget data.accdb"
     ' Open the connection
     Set Connection = New ADODB.Connection
     Cnct = "Provider=Microsoft.ACE.OLEDB.12.0;"
     Cnct = Cnct & "Data Source=" & DBFullName & ";"
     Connection.Open ConnectionString:=Cnct
     ' Create RecordSet
     Set Recordset = New ADODB.Recordset
     With Recordset
         ' Filter
         Src = "SELECT * FROM Budget WHERE Item = 'Lease' "
         Src = Src & "and Division = 'N. America' "
         Src = Src & "and Year = '2008'"
         .Open Source:=Src, ActiveConnection:=Connection
         ' Write the field names
         For Col = 0 To Recordset.Fields.Count - 1
             Range("A1").Offset(0, Col).Value = _
             Recordset.Fields(Col).Name
         Next
         ' Write the recordset
         Range("A1").Offset(1, 0).CopyFromRecordset Recordset
     End With
     Set Recordset = Nothing
     Connection.Close
     Set Connection = Nothing
End Sub
[/vba]

Автор - Саня
Дата добавления - 06.06.2012 в 11:53
Гость Дата: Среда, 06.06.2012, 11:57 | Сообщение № 9
Группа: Гости
Quote (Саня)
Уокенбах:


Знаем такого, спс.

Вопрос закрыт..Спасибо всем, кто откликнулся..Неделю мучался с этим вопросом..
 
Ответить
Сообщение
Quote (Саня)
Уокенбах:


Знаем такого, спс.

Вопрос закрыт..Спасибо всем, кто откликнулся..Неделю мучался с этим вопросом..

Автор - Гость
Дата добавления - 06.06.2012 в 11:57
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!