вопрос про связывание

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

вопрос про связывание

Сообщение Wasup! » 29.11.2006 (Ср) 11:23

В программе использую Excel 2000, в references выставлена галка Microsoft Excel 9.0 Object Library. В коде использую так:
Код: Выделить всё
Public e                    As new excel.Application
Dim b                       As Workbook
Set b = e.Workbooks.Add
и т.д.


1) Будет ли программа работать на компьютерах с другой версией Excel?
2) А если сделать инсталлятор в котором будет EXCEL9.OLB?
Или лучше вообще отказаться от раннего связывания и везде заменить на позднее чтобы обеспечить работу с той версией Excel, которая есть в системе?
Код: Выделить всё
Public e                    As object
Dim b                       As object
e=CreateObject("Excel.Application")
Set b = e.Workbooks.Add


Тот же вопрос и про ADO. Обратил внимание, что после установки MDAC в системе появляются все версии ADO 2.0-2.8
Как в этом случае поступить со связыванием и стоит ли включать библиотеку в инсталлятор?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.11.2006 (Ср) 11:25

RTFM.

1. Нет.
2. Тогда вообще всё рухнет.
Да.

В ADO связывание делать раннее. Библиотеки не включать ни в какой форме, кроме полного дистрибутива MDAC.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: вопрос про связывание

Сообщение Vi » 30.11.2006 (Чт) 7:55

Wasup! писал(а):1) Будет ли программа работать на компьютерах с другой версией Excel?

Гарантируется работа программы без перекомпиляции в более поздних версиях Excel, т.е. >= 9.0. В ранних версиях работа возможна, если используются методы, существующие в этих ранних версиях. Но создание приложения/документов должны быть версионно-независимыми, т.е. "Public e As new excel.Application" или "Public e As excel.Application: Set e = new excel.Application" недопустимы, и нужно делать "Public e As excel.Application: Set e = CreateObject("excel.Application")".
Wasup! писал(а):2) А если сделать инсталлятор в котором будет EXCEL9.OLB?

Это не имеет значения: EXCEL9.OLB используется только при компиляции, но не во время работы.
Wasup! писал(а):Или лучше вообще отказаться от раннего связывания и везде заменить на позднее чтобы обеспечить работу с той версией Excel, которая есть в системе?

Есть смысл, но только нужно проверять отработку методов - их может и не быть.
Wasup! писал(а):Тот же вопрос и про ADO. Обратил внимание, что после установки MDAC в системе появляются все версии ADO 2.0-2.8
Как в этом случае поступить со связыванием и стоит ли включать библиотеку в инсталлятор?

В инсталлятор нужно включать программный код, ссылочные библиотеки типов не имеет смысла включать в инсталлятор, т.к. они не используются во время выполнения. Но, я думаю, инсталлятор достаточно умен, чтобы это и не делать.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: вопрос про связывание

Сообщение tyomitch » 30.11.2006 (Чт) 8:51

Vi писал(а):
Wasup! писал(а):1) Будет ли программа работать на компьютерах с другой версией Excel?

Гарантируется работа программы без перекомпиляции в более поздних версиях Excel, т.е. >= 9.0. В ранних версиях работа возможна, если используются методы, существующие в этих ранних версиях. Но создание приложения/документов должны быть версионно-независимыми, т.е. "Public e As new excel.Application" или "Public e As excel.Application: Set e = new excel.Application" недопустимы, и нужно делать "Public e As excel.Application: Set e = CreateObject("excel.Application")".

Почему это будет работать? Из TLB возьмётся IID по умолчанию, т.е. самый последний. На предыдущих версиях этот IID не поддерживается, и будет ошибка "Type Mismatch" на команде Set. Или не так?
Изображение

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: вопрос про связывание

Сообщение Vi » 01.12.2006 (Пт) 7:46

tyomitch писал(а):Почему это будет работать? Из TLB возьмётся IID по умолчанию, т.е. самый последний. На предыдущих версиях этот IID не поддерживается, и будет ошибка "Type Mismatch" на команде Set. Или не так?

Мой ответ был привязан именно к Excel, т.е. Микрософтовскому серверу. У них IID интерфейса не меняется, даже если состав интерфейса изменился.

Для других серверов, более правильных, ответ, конечно же, положительно-отрицательный: если интерфейс существует в более ранней версии, то работать будет, если не существует, то не будет.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: вопрос про связывание

Сообщение tyomitch » 01.12.2006 (Пт) 11:35

Vi писал(а):
tyomitch писал(а):Почему это будет работать? Из TLB возьмётся IID по умолчанию, т.е. самый последний. На предыдущих версиях этот IID не поддерживается, и будет ошибка "Type Mismatch" на команде Set. Или не так?

Мой ответ был привязан именно к Excel, т.е. Микрософтовскому серверу. У них IID интерфейса не меняется, даже если состав интерфейса изменился.

:shock: :shock: Ух-ох...

Конкретные IID-ы я сейчас не смогу назвать (нет разных версий Excel под руками), но делать так строжайще запрещено: http://blogs.msdn.com/oldnewthing/archi ... 87658.aspx
Изображение

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 01.12.2006 (Пт) 14:26

1. Должен работать на версиях 9+
INFO: Writing Automation Clients for Multiple Office Versions


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 20

    TopList  
cron