Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: References - вашу мать...
 
 автор: dmsrv803   (30.01.2012 в 16:35)   личное сообщение
 
 

У меня стоит 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.
Подскажите, если кто чего знает?

  Ответить  
 
 автор: Дядя Федор   (30.01.2012 в 16:39)   личное сообщение
 
 

Создать на машине пользователя.

  Ответить  
 
 автор: dmsrv803   (30.01.2012 в 16:50)   личное сообщение
 
 

я гонял в локалке под другим пользователем у нас в отделе - работатет. Отослал заказчику - жопа.

  Ответить  
 
 автор: silich   (30.01.2012 в 18:09)   личное сообщение
 
 

/decompile
/compact
/mde

  Ответить  
 
 автор: dmsrv803   (30.01.2012 в 18:17)   личное сообщение
 
 

заинтриговали - поясните...

  Ответить  
 
 автор: ДрЮня   (30.01.2012 в 18:53)   личное сообщение
 
 

у Вас же MDE собирается нормально, так что это Вам вряд ли поможет.
Нужно, чтобы заказчик скачал и установил у себя библиотеку ADO для работы Аксесом 2003 версии (для 2010 нужна другая библиотека). Скачать можно с узла Микрософта

  Ответить  
 
 автор: dmsrv803   (31.01.2012 в 09:51)   личное сообщение
 
 

спасибо. Обязательно попробую это сделать. Но у пользователя на компе установлены те же самые библиотеки, что и у меня - я проверял. Это файлы под именем msado21.tlb, msado25.tlb. Установил им mdb-шник со ссылкой на 21 - работает, а с 25 - не работает.

  Ответить  
 
 автор: час   (13.04.2012 в 01:09)   личное сообщение
 
 

TeamViewer 7.
И посмотрите, что там на компе у заказчика.
И заодно попытайтесь cоздать mde прямо на его компе - удалённо тасазать.

  Ответить  
 
 автор: Дядя Федор   (31.01.2012 в 08:05)   личное сообщение
 
 

А где compile? Отослать неоткомпилированную базу?

  Ответить  
 
 автор: kot_k_k   (31.01.2012 в 09:49)   личное сообщение
 
 

вопрос в тему - у половины офиса стоит 2007-й у другой ХР,
у меня все подряд в референсах MS Ecxel 12.0..., у одной части все ОК, у другой визжит на библиотеку - как можно программно узнать версию Екселя и програмно-же прикрутить ее в референсы?

  Ответить  
 
 автор: silich   (31.01.2012 в 10:00)   личное сообщение
 
 


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

  Ответить  
 
 автор: kot_k_k   (12.04.2012 в 11:41)   личное сообщение
 
 

оно то классно - но я получаю версию АКСА, а мне нужно получить версию Екселя, которая установлена даже не в этой папке
получается как-то надо ее найти в реестре

или по другому - как программно получить доступ к Референсам чтобы поменять ссылку.

  Ответить  
 
 автор: kot_k_k   (12.04.2012 в 12:00)   личное сообщение
 
 

захотел обмануть Акс - напрямую поменять референс
Application.References.Item(14).FullPath = "C:\Program Files\Microsoft Office\Office10\EXCEL.EXE"
Application.References.Item(14).Minor = 4

орет что .FullPath - только для чтения - как яго победить.

  Ответить  
 
 автор: Дядя Федор   (12.04.2012 в 12:44)   личное сообщение
11 Кб.
 
 

Узнать версию

Public Sub eeeeeeeeeeeeeeeeee()

Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application") ', "terminal1")
Debug.Print xlApp.Version
Set xlApp = Nothing

End Sub


По references см. вложение (из базы знаний Егорова. Авторы неизвестны)->
Может, нароешь что надо

  Ответить  
 
 автор: kot_k_k   (12.04.2012 в 12:59)   личное сообщение
 
 

проблема программно перебить на более позднюю версию, вернее оно и не программно не перебивается на позднюю версию

  Ответить  
 
 автор: Дядя Федор   (12.04.2012 в 13:06)   личное сообщение
 
 

В примерах из вложения решается подобная проблема для версий адо.
Може как-нить по аналогии

  Ответить  
 
 автор: kot_k_k   (12.04.2012 в 13:09)   личное сообщение
 
 

а я и не заметил файлика - копаю

  Ответить  
 
 автор: Анатолий (Киев)   (12.04.2012 в 14:01)   личное сообщение
 
 

Недавно на форуме SQL.RU была такая же тема. Не вы спрашивали?
Существующую ссылку нельзя изменить. Ее нужно удалить и создать новую (для библиотеки типов лучше метод AddFromGuid).
Но в А2000 появилась проблема - битую ссылку на библиотеку нельзя удалить.
Не знаю, как в А2007, но есть подозрение, что в А2003 проблема осталась.
В случае с Excel я бы настоятельно рекомендовал вам позднее связывание (т.е. без ссылки на библиотеку). Для удобства разработки можно применить условную компиляцию (#Const, #If), при которой объявление функций, переменных и констант можно описать разными кусками кода для подключенной библиотеки (когда вы у себя правите код) и для отключенной (при отправке базы юзерам).

  Ответить  
 
 автор: kot_k_k   (12.04.2012 в 15:48)   личное сообщение
 
 


В случае с Excel я бы настоятельно рекомендовал вам позднее связывание



для особо одаренных как это деется

  Ответить  
 
 автор: Анатолий (Киев)   (13.04.2012 в 11:49)   личное сообщение
 
 

Позднее связывание, это когда ссылка на библиотеку не используется. Тогда все специальные объектные переменные описываются как 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 - отключаете ссылку - тестируете - отдаете в работу.

  Ответить  
 
 автор: kot_k_k   (13.04.2012 в 12:13)   личное сообщение
 
 

ага

пауза

спасибо

  Ответить  
 
 автор: silich   (31.01.2012 в 09:56)   личное сообщение
 
 

/compile

з.ы. ну забыл и шо теперь!

  Ответить  
 
 автор: Дядя Федор   (31.01.2012 в 11:14)   личное сообщение
 
 

У нас висит плакат.
Путин грозит пальцем и надпись.
"Я вас вижу - вы не работаете!"

  Ответить  
 
 автор: silich   (31.01.2012 в 11:45)   личное сообщение
 
 

вынь и работай! :)

  Ответить  
 
 автор: час   (13.04.2012 в 01:08)   личное сообщение
 
 


Может - вставь и работай?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList