|
|
|
| У меня стоит 2003 Акс, до этого устанавливал 2010, потом снес. У пользователей установлен 2003. В проекте (mdb) используется билиотека Microsoft ActiveX Data Object 2.4(это для доступа к данным с использованием ADO, в частности для работы с MS SQL SERVER). Мне необходимо создать mde-файл и установить пользователю. После чего приложение работать отказывается, ругаясь не на ту версию подключенной билиотеки.
Чего делаю я - залезаю в References и меняю Microsoft ActiveX Data Object 2.4 на 2.1. После чего пытаюсь создать mde, на что он мне отвечает - иди на x.., без каких либо вразумительных объснений. Отсылаю пользователю mdb с Microsoft ActiveX Data Object 2.1 - работает. Но мне пользователю нужно установить mde.
Подскажите, если кто чего знает? | |
|
| |
|
|
|
| Создать на машине пользователя. | |
|
| |
|
|
|
| я гонял в локалке под другим пользователем у нас в отделе - работатет. Отослал заказчику - жопа. | |
|
| |
|
|
|
| /decompile
/compact
/mde
| |
|
| |
|
|
|
| заинтриговали - поясните... | |
|
| |
|
|
|
| у Вас же MDE собирается нормально, так что это Вам вряд ли поможет.
Нужно, чтобы заказчик скачал и установил у себя библиотеку ADO для работы Аксесом 2003 версии (для 2010 нужна другая библиотека). Скачать можно с узла Микрософта | |
|
| |
|
|
|
| спасибо. Обязательно попробую это сделать. Но у пользователя на компе установлены те же самые библиотеки, что и у меня - я проверял. Это файлы под именем msado21.tlb, msado25.tlb. Установил им mdb-шник со ссылкой на 21 - работает, а с 25 - не работает. | |
|
| |
|
|
|
| TeamViewer 7.
И посмотрите, что там на компе у заказчика.
И заодно попытайтесь cоздать mde прямо на его компе - удалённо тасазать. | |
|
| |
|
|
|
| А где compile? Отослать неоткомпилированную базу? | |
|
| |
|
|
|
| вопрос в тему - у половины офиса стоит 2007-й у другой ХР,
у меня все подряд в референсах MS Ecxel 12.0..., у одной части все ОК, у другой визжит на библиотеку - как можно программно узнать версию Екселя и програмно-же прикрутить ее в референсы? | |
|
| |
|
|
|
|
Public Function VersionMS(Optional appnam$ = "msaccess")
Dim FSO As Object
If appnam <> "msaccess" And appnam <> "excel" And appnam <> "winword" Then Exit Function
Set FSO = CreateObject("Scripting.FileSystemObject")
VersionMS = FSO.GetFileVersion(SysCmd(acSysCmdAccessDir) & appnam & ".exe")
Set FSO = Nothing
End Function
|
| |
|
| |
|
|
|
| оно то классно - но я получаю версию АКСА, а мне нужно получить версию Екселя, которая установлена даже не в этой папке
получается как-то надо ее найти в реестре
или по другому - как программно получить доступ к Референсам чтобы поменять ссылку. | |
|
| |
|
|
|
| захотел обмануть Акс - напрямую поменять референс
Application.References.Item(14).FullPath = "C:\Program Files\Microsoft Office\Office10\EXCEL.EXE"
Application.References.Item(14).Minor = 4
орет что .FullPath - только для чтения - как яго победить. | |
|
| |
|
11 Кб. |
|
| Узнать версию
Public Sub eeeeeeeeeeeeeeeeee()
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application") ', "terminal1")
Debug.Print xlApp.Version
Set xlApp = Nothing
End Sub
|
По references см. вложение (из базы знаний Егорова. Авторы неизвестны)->
Может, нароешь что надо | |
|
| |
|
|
|
| проблема программно перебить на более позднюю версию, вернее оно и не программно не перебивается на позднюю версию | |
|
| |
|
|
|
| В примерах из вложения решается подобная проблема для версий адо.
Може как-нить по аналогии | |
|
| |
|
|
|
| а я и не заметил файлика - копаю | |
|
| |
|
|
|
| Недавно на форуме SQL.RU была такая же тема. Не вы спрашивали?
Существующую ссылку нельзя изменить. Ее нужно удалить и создать новую (для библиотеки типов лучше метод AddFromGuid).
Но в А2000 появилась проблема - битую ссылку на библиотеку нельзя удалить.
Не знаю, как в А2007, но есть подозрение, что в А2003 проблема осталась.
В случае с Excel я бы настоятельно рекомендовал вам позднее связывание (т.е. без ссылки на библиотеку). Для удобства разработки можно применить условную компиляцию (#Const, #If), при которой объявление функций, переменных и констант можно описать разными кусками кода для подключенной библиотеки (когда вы у себя правите код) и для отключенной (при отправке базы юзерам). | |
|
| |
|
|
|
|
В случае с Excel я бы настоятельно рекомендовал вам позднее связывание
|
для особо одаренных как это деется | |
|
| |
|
|
|
| Позднее связывание, это когда ссылка на библиотеку не используется. Тогда все специальные объектные переменные описываются как Object, а специальные константы дублируются своими одноименными. Создание объектов віполняется методами CreateObject или GetObject.
Вот пример с условным компилированием:
#Const IsExcelRef = 1 '0 - ссылка на библиотеку Excel отсутствует.
Sub OpenExcel()
#If IsExcelRef = 1 Then
Dim ExlApp As Excel.Application, WB As Excel.Workbook, WSh As Excel.Worksheet, rng As Excel.Range
Set ExlApp = New Excel.Application
#Else
Dim ExlApp As Object, WB As Object, WSh As Object, rng As Object
Const xlMinimized = -4140
Const xlMaximized = -4137
Set ExlApp = CreateObject("Excel.Application")
#End If
'Set ExlApp = CreateObject("Excel.Application") 'В обоих вариантах можно вынести за пределы условной компиляции
'Делаем окно Excel видимым и свернутым
ExlApp.Visible = True
ExlApp.WindowState = xlMinimized
'...
End Sub
| Т.е. при установленной ссылке и IsExcelRef = 1 пишете код, наслаждаясь справкой и списками свойств/методов объектов, затем IsExcelRef = 0 - отключаете ссылку - тестируете - отдаете в работу. | |
|
| |
|
|
|
|
| /compile
з.ы. ну забыл и шо теперь! | |
|
| |
|
|
|