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"
Sheet_name = "продажи_МБ" z = GetRecord(DB, strSql, "", Sheet_name)
End Sub
[/vba] Макрос чудно работает с базами данных 2000 и 2003 с расширением *mdb.
Так вот, после того, когда у меня появились базы Access 2007 c расширением *accdb - макрос пишет - "Нероспознаваемый формат базы данных". Переводить базу данных в 2003 не хочу, потому как по специфике работы - там ооочень важные данные. А я уверен, что после конвертирование в Access 2003 она будет сжиматься, а прецеденты после сжимание базы и исчезнование ваажной инфы у меня уже были.. Поэтому прошу помощи у Вас...мож кто когда-то сталкивался с такой проблемой.Гость
' Выгрузка данных из БД 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Гость
Гость, попробуйте вместо MS DAO 3.6 Object Library подключить Microsoft Office 14.0 Access database engine Object Library (это для 2010, для 2007 наверное 12.0 в середине).
Гость, попробуйте вместо MS DAO 3.6 Object Library подключить Microsoft Office 14.0 Access database engine Object Library (это для 2010, для 2007 наверное 12.0 в середине).Gustav
я использую для этого технологию 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;..."
я использую для этого технологию ADO поменялся поставщик данных: 2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..." 2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."
может это как-то связано?
Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO.
Quote
я использую для этого технологию ADO поменялся поставщик данных: 2007 - "Provider=Microsoft.ACE.OLEDB.12.0;..." 2003 - "Provider=Microsoft.Jet.OLEDB.4.0;..."
может это как-то связано?
Это альтернативный вариант решения проблемы и, кстати, концептуально более правильный. Но для этого надо GetRecord переписать под ADO. 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
Если Вам не сложно, можете набросать альтернативный вариант решения..а нет - буду сам как -то пытаться..Гость
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