Страницы: 1
RSS
VBA не распознает формат Access 2007 *accdb
 
Доброе утро, уважаемые обитатели:)  
Обращаюсь к Вам вот с каким вопросом, есть у меня макрос который затягивает данные в книгу Эксель из Access:  
 
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  
Макрос чудно работает с базами данных 2000 и 2003 с расширением *mdb.  
 
Так вот, после того, когда у меня появились базы Access 2007 c расширением *accdb - макрос пишет - "Нероспознаваемый формат базы данных". Переводить базу данных в 2003 не хочу, потому как по специфике работы - там ооочень важные данные. А я уверен, что после конвертирование в Access 2003 она будет сжиматься, а прецеденты после сжимание базы и исчезнование ваажной инфы у меня уже были..  
Поэтому прошу помощи у Вас...мож кто когда-то сталкивался с такой проблемой.
 
Правильную строку подключения для Access 2007 посмотрите здесь:  http://www.connectionstrings.com/access-2007 <BR>Предподлагается, что Office 2007 или 2010 установлен.
 
Спасибо Вам за ссылку, но если чесно я там абсолютно не разобрался- всего 2 месяца работаю с VBA (самоучка), если я Вам покажу код полностью с подключением к БД - вы мне подскажите, как правильно прописать -дабы она таки работала с расширением *accdb
 
Никогда не работал с файлами accdb, но помочь попытаюсь.  
Строка поключения, наверное, у Вас прописана в GetRecord()  
Выложите сюда код этой процедуры.  
И уточните, у Вас Excel или Access 2007 или 2010 установлен(ы)?
 
Установлен у меня 2007 office - соответсвенно стоит тот же Access и Excel.  
Выкладываю Вам весь код:  
 
Option Explicit  
Dim T As Date, tt As Date, m As Date  
Dim t1 As Date  
Dim t2 As Date  
Dim t3 As Date  
Dim t4 As Date  
Dim t5 As Date  
Dim t6 As Date  
Dim t7 As Date  
Dim t8 As Date  
Dim t9 As Date  
Dim t10 As Date  
Dim t11 As Date  
Dim t12 As Date  
Dim Sheet_name As String  
Dim ttt As Boolean  
Dim tttt As Boolean  
Dim h As Date  
 
'===================DataBase===============  
Public PWD As String 'пароль базы данных BRS  
Public DB As String 'путь к базе данных BRS на сервере  
 
Public Function DateAccess(d As Date)  
   DateAccess = "#" & Month(d) & "/" & Day(d) & "/" & Year(d) & "#"  
End Function  
 
' Выгрузка данных из БД  
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  
 
 
 
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
 
Вопрос закрыт,решил проблему подключением модуля:  
-вместо MS DAO 3.6 Object Library подключил Microsoft Office 12.0 Access database engine Object Library!  
Заработало, работает с *mdb и *accdb.
 
Никто так не поможет, как сам себе :-)  
Форум ушел в off-line, ответить не успел.  
Можно еще было воспользоваться ADO, но запрос пришлось бы переписать, да и DAO все же быстрее в раза полтора.
Страницы: 1
Читают тему
Наверх