Форум: "Начинающим";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизDAO 3.5 Найти похожие ветки
← →
Joy (2005-10-13 13:32) [0]Приветствую.
Пытаюсь использовать DAO...
При попытке создать COM-объект из этой библиотеки вылается "OleSysError "Класс не лицензирован для использования" ".
Что бы это значило и как его "лицензировать" то?
Из того же VC++ все ведь работает(там правда свой класс поверх COM, ну а я импротирую из DLL(TLB)).
← →
sniknik © (2005-10-13 14:07) [1]возможно установка 3.6 "закрыла" более старую версию себя? (посмотри есть такой? и если есть сделай TLB из него, чего получится?)
← →
Joy (2005-10-13 14:19) [2]несколько "фактов"...
в delphi в списке registered type libraries(и ActiveX Controls) нет ни 3.5 ни 3.6
(пользуюсь кнопкой Add)
в каталоге \Program Files\Common Files\Microsoft Shared\DAO\ есть dao350 и dao360.dll
dao 3.5 ставлю сам инсталлятором
(можно еще и вручную копировать файлы куда надо по MS"вскому докумету - пробовал - разницы никакой, тока что в DAO добавляется файл dao3525.tlb)
программа которая использует DAO 3.5 (писаная на VC++) прекрасно работает
при импорте
TLB файла - пишет версию 3.5
dao350.dll - 4.0
dao360.dll - 5.0
может что то поможет для ответа...
← →
sniknik © (2005-10-13 14:52) [3]а, значит 3.6 есть...
> программа которая использует DAO 3.5 (писаная на VC++) прекрасно работает
не факт при наличии 2-х dll. попробуй удалить dao350.dll и запустить программу, на 95% уверен она и без нее будет работать.
← →
Joy (2005-10-13 15:15) [4]нет. это уже проверено. пока не поставишь 3.5 - прога не работает.
собсно по этому мне и приходится использовать 3.5 - она будет на момент работы моей программы...
какие еще варианты? что вообще означает сообщение о лицензии...?
← →
Joy (2005-10-14 06:25) [5]UP
ну поможите хоть ктонить....
← →
Digitman © (2005-10-14 10:16) [6]
> Joy (14.10.05 06:25) [5]
а тебе какая разница-то, DAO какой версии предоставит свой сервис твоей программе ?
инсталлировать DAO 3.5 ты конечно вправе, но смысл инсталляции тут, imho, будет иным - для работы твоей программы в системе должен присутствовать хотя бы один DAO-движок ..
поэтому при старте программы обратись к реестру, выбери из него все регистр.записи для всех потенциально инсталлированных версий DAO, проанализируй/отсортируй список, далее в цикле по порядку убывания номеров обнаруженных версий (4.0 -> 3.6 -> 3.5) пытайся создать соотв.COM-объект ... условие выхода из цикла - первый же успешно созданный объект
← →
Joy (2005-10-14 14:14) [7]вопчем описание всей задачи
пишется инсталлятор для готовой программы(пожалуйста не нужно говорить про готовые инсталляторы - так надо =) тем более фунцию установки она уже успешно делает)
после установки неободимых файлов в числе других операций нужно открыть мдб файл и в таблицу записать одну запись...
да...можно конечно искать разные версии...
но дело то в другом - я не могу создать ни одного объекта DAO ни от 3.6 ни 3.5.. хотя другие программы использующие дао работают...(тот же office)
то есть мне кажется дело тут в чем то другом(не исключаю и "кривые_руки.sys")
кто добрый - если не солжно - простой код для создания того же DBEngine ?
я это делаю просто CreateComObject(_"DBEngine_GUID"_)
_"DBEngine_GUID"_ - guid из юнита созданного импортом dao350.dll
ведь вроде же ничего больше не надо?
← →
zx © (2005-10-14 14:54) [8]а почему не ADO, с ним вроде проще, да и стоит оно обычно уже ... и компоненты есть ...
← →
sniknik © (2005-10-14 14:58) [9]> я это делаю просто CreateComObject(_"DBEngine_GUID"_)
это скорее всего неверная запись (нет такого гуида _"DBEngine_GUID"_, возможно он с чемто совпал(ты взял не тот) и он "невыполнимого типа" поэтому и вышеприведенная ошибка)
p.s. посты [1], [3] теперь можно не рассматривать, там еще предполагал что "все делается правильно" (после [7] это уже невозможно).
← →
Digitman © (2005-10-14 15:05) [10]
> _"DBEngine_GUID"_
где и как этот ид-р объявлен ? откуда взялся ? какой идиот посоветовал тебе использовать кавычки в имени идентификатора ?
← →
Joy (2005-10-17 08:20) [11]Этта...сорри. я не то имел ввиду под _"DBEngine_GUID"_ - имеется ввиду вместо него GUID... точнее CLASS_DBEngine
описан он в dao_tlb.pas(сгенерированый при импорте из dao350.dll)
CLASS_DBEngine: TGUID = "{00000010-0000-0010-8000-00AA006D2EA4}";
и соответственно
CreateComObject(CLASS_DBEngine)
или
CreateOleObject("{00000010-0000-0010-8000-00AA006D2EA4}")
так то ведь прально?(собсно в сгенерированном модуле так же используется)
а по поводу ADO - ну не факт что оно будет на старых машинах с win95/98 - а такие довольно часто еще появляются...
← →
sniknik © (2005-10-17 09:03) [12]> так то ведь прально?
возможно. параметр (сгенеренное в модуль dao_tlb.pas) списан верно. осталось еше сам вызов проверить и можно за сочинение (такие "художественные" отступления/аллегории только в литературе приветствуются) оценку ставить.
← →
Joy (2005-10-17 12:16) [13]> осталось еше сам вызов проверить
так вот как раз на вызове
CreateComObject(CLASS_DBEngine)
или
CreateOleObject("{00000010-0000-0010-8000-00AA006D2EA4}")
оно и выдает ошибку...
← →
palva © (2005-10-17 12:54) [14]Я обычно делаю
CreateOleObject("DAO.DBEngine.35")
а какие-то циферки в реестре искать - это круто
← →
sniknik © (2005-10-17 13:23) [15]Joy (17.10.05 12:16) [13]
> так вот как раз на вызове
> CreateComObject(CLASS_DBEngine)
> или
> CreateOleObject("{00000010-0000-0010-8000-00AA006D2EA4}")
так и пишеш? это неверная запись, CreateOleObject функция, и результат ее работы ты теряеш. а во втором случае еще и несовпадение типов, гуид это не строка.
впрочем ошибка по этому поводу будет выдаваться другие. поэтому вывод - за фантазию по сочинению 5, за все остальное 2 с минусом.
palva © (17.10.05 12:54) [14]
> а какие-то циферки в реестре искать - это круто
их не надо искать, они генерятся при создании модуля ...tlb.pas из сом обьекта автоматом. и даже "обертку" в компонент делает при желании (галочку там при импорте не снимать и все).
← →
Joy (2005-10-17 14:18) [16]> так и пишеш? это неверная запись, CreateOleObject функция, и результат ее работы ты теряеш
Блин! Ну не надо прикапываться к словам то теперь! =(
Может обсудим еще и стиль программирования мой - как я переменные и константы именую, какие отступы делаю?
в данном случае не играет роли функция это или нет - я всеравно не получаю её результат в_данном_конкретном_случае - во время выполнения этих ф-ий генерируется исключение EOleSysError и его ловит дебаггер...
естественно в рабочем приложении будет уже и результат сохраняться...
> а во втором случае еще и несовпадение типов, гуид это не строка
тут как раз надо строку -ClassName (или гуид в виде строки - но тут да-это может быть идеологически неправильно - хотя опять же гуид он же обязан быть уникальным для каждого конкретного объекта на сколько я знаю)
если действительно хочешь помочь - покажи пример который 100% работает у тебя - я проверю у себя и буду очень благодарен если это заработает...
palva © (17.10.05 12:54) [14]
CreateOleObject("DAO.DBEngine.35") и CreateOleObject("{00000010-0000-0010-8000-00AA006D2EA4}") - это практически синоним - можешь залезть в реестр и поискать по "DAO.DBEngine.35"
Ошибка выдается и в том и в другом случае...
Собсно вопрос был вообще - в каких условиях и по какой причине может происходить исключение "Класс не лицензирован для использования".
← →
sniknik © (2005-10-17 14:52) [17]> Может обсудим еще и стиль программирования мой - как я переменные и константы именую,
стиль не надо а вот константы и переменые важны, т.к. от них глюк может зависеть...
> тут как раз надо строку -ClassName
извини не обратил внимания, что функция другая. но все одно на имя класса строка с гуидом тоже непохожа (будет ошибка о ненайдености класса)
> если действительно хочешь помочь - покажи пример который 100% работает у тебя - я проверю у себя и буду очень
> благодарен если это заработает...
с чего решил, что я хочу помоч? никогда не хотел и сейчас не хочу. для меня форум это место общения + поиск нового и интересного + решение "кросвордов" + сам не знаю чего но это тоже для меня. (эгоист... :-\ )
а помошь вторична, это побочный продукт. как таковой цели помочь тебе, у меня нет (да в общемто наверное ни у кого нет...).
т.е. прежде чем помоч я должен получить чтото взамен. собственно здесь меня интересует практически то же самое что и тебя. только с другой стороны "а, что же можно сделать такого, чтобы возникла подобная ошибка...", потому как, что ни делаю все время работает правильно.
ты же, не хочеш ничего давать взамен. поэтому минимально интересен, только на предмет потрепатся. что мы и делаем. ;)
кстати 100% рабочий вариант вовсе не сложно найти. гораздо проще чем "выбиваеть" из форумчан несчастную строчку...
← →
Joy (2005-10-17 15:01) [18]Ах ну раз потрепаться - тогда конечно =) хотя помоему тут есть отдельный форум для этого...?
Я то с дуру подумал что тут есть люди которые могут помочь с проблемой...
и ни из кого ничего не выбивал - собсно никто даже не показал где я неправ...
ну чтож...все на ошибках учимся =)
Спасибо за "приятное" общение =)
← →
sniknik © (2005-10-17 15:18) [19]> Я то с дуру подумал что тут есть люди которые могут помочь с проблемой...
это ты правильно подумал. тут есть люди которые могут помочь с проблемой... только им тоже в свою очередь чтото нужно.
(ну к примеру я не буду решать кросворд где за каждой фразой/вопросом придется дозваниваться главному редактору/или по одному вопросу в день публикуют/и т.д. любое ограничение которое мне не нравится)
> собсно никто даже не показал где я неправ...
собственно не напрягаясь на поиск вижу 2 таких поста, где говорится в "чем" ты не прав. а вот насчет "где", это сложнее, это надо знать адрес. впрочем есть универсальный "в 17-й строке", только он мало кому помогает.
← →
Joy (2005-10-17 15:33) [20]Да что это за такое...то есть ты все же хочешь сказать что я задаю глупости, спрашиваю неправильно и еще и понять не могу умные ответы других...? )))
Проект -новый.Форма.Кнопка.В uses добавляем - ComObj.На OnClick кнопки пишем одну строку CreateOleObject("DAO.DBEngine.35").Компилим.Запускаем.Жмем кнопку.Ошибка.
все.больше кода нет.
что я не так делаю?
А изначально я даже не это спрашивал - я спрасил конкретно - что это за ошибка такая и что она обозначает(вообще,абстрактно - а не в моем приложении).
Дошли уже до 100% кода - всеравно ведь не ответит никто по существу...=))
← →
zx © (2005-10-17 15:58) [21]а я бы ещё про ADO подумал, гораздо проще приложить к программе mdac_typ.exe.
← →
$hade (2005-10-17 16:04) [22]я как раз пытаюсь избавится от кучи отдельных програм при установке основной программы (на данный момент после копирования файлов приходится запускать 5 отдельных утилит(для разных частей программы) и установщиков чтоб настроить программу - потому просто отдать пользователю диск с программой чтоб он сам поставил не получается..а хочется=) )
конечно с ADO проще будет(хотя бы за счет того что готовые компоненты есть)...но хотелось бы все же разобраться уже принципиально с этой проблемой...
← →
sniknik © (2005-10-17 16:14) [23]ладно давай так. повторяю тоже самое
> Проект -новый.Форма.Кнопка.В uses добавляем - ComObj.На OnClick кнопки пишем одну строку
> CreateOleObject("DAO.DBEngine.35").Компилим.Запускаем.Жмем кнопку.Ошибка.
правильно ошибка - "недопустимая строка с указанием класса" (у меня не установлен) у тебя...
смотрим перевый же ответ.
> возможно установка 3.6 "закрыла" более старую версию себя? (посмотри есть такой? и если есть сделай TLB из него, чего получится?)
т.е. проверь (!!!), и скажи что получилось, скажи!, проверь и скажи!, а не отмахивайся типа до этого чегото делали, пока не поставиш другая (!!!) прога не заработает...
неужели трудно поддерживать диалог с человеком который взялся тебе помогать? или трудно цифру 5 на 6 поменять и кнопку нажать? и не надо отмазок что тебе нужен 3,5 на самом деле, тебя не просят менять принцип тебя просят проверить.
а дальше если заработает (в уверен на 95%), идем дальше к > Digitman © (14.10.05 10:16) [6], и отвечаем на вопрос "тебе есть разница какая версия DAO отработает?" и тутже готовый рецепт к действию (немного не так как сделал бы я, но тоже вариант)
← →
sniknik © (2005-10-17 16:16) [24]> zx © (17.10.05 15:58) [21]
jet в mdac не входит.
← →
Joy (2005-10-17 16:37) [25]Ок.
я не отмахивался и проверял уже так...
попробуем еще раз...
http://www.torry.net/tools/db/dbother/coldbver.zip - маленькая утилита, которая показавает установлены ли DAO/ADO и какой версии.Говорит что есть и 3.5 и 3.6
CreateOleObject("DAO.DBEngine.35"); - ошибка!
CreateOleObject("DAO.DBEngine.36"); - работает!
делаем regsvr32 /u dao350.dll. Запускаем основную прогу - не работает.
делаем regsvr32 dao360.dll(на всяк случай) - не работает
делаем regsvr32 dao350.dll(возвращаем обратно) - работает!
то есть можно сделать вывод что ей надо именно 3.5.
поставим вопрос по другому - очень может быть что чегото не хватает(какого то файла или записи в реестре) Откуда поставить этот redistributable DAO чтоб точно быть уверенным что оно все правильно ставит?
← →
Joy (2005-10-17 16:54) [26]попробовал сейчас несколько готовых компонентов которые используют dao - везде та же ошибка...
явно чего то не хватает...=(
← →
sniknik © (2005-10-17 17:09) [27]> я не отмахивался и проверял уже так...
проверка, пока она не озвучена здесь считается невыполненной. себе на уме можеш держать что угодно, здесь действительно только сказанное.
> CreateOleObject("DAO.DBEngine.36"); - работает!
отлично! причина ([0] "Что бы это значило") определена с большой долнй вероятности и озвучена в [1], первом же ответе .
продолжаем дальше, идеш в ответ [3], и делаеш то что там просил
тк. во это
> то есть можно сделать вывод что ей надо именно 3.5.
не факт, а в [3] как раз проверка на то что же ей действительно нужно, запись в реестре или собственно движок (dll). и если ссылка в реестре может быть подменена для другой версии то сам файл нет.
> поставим вопрос по другому
у меня тоже есть интесный вопрос. не замечаеш что мы идем по тому о чем уже говорилось? и, что по идее тобой должно быть проверено.
и второе. если вдруг, та прога действительно не может работать с 3.6 напрямую, то ты действительно хочеш сей недостаток в точности воспроизвести и у себя тоже?.
← →
sniknik © (2005-10-17 17:15) [28]> попробовал сейчас несколько готовых компонентов которые используют dao - везде та же ошибка...
ключница водку делала. © Иван Васильевич меняет профессию.
← →
Joy (2005-10-17 17:18) [29]попробовал [3] - не работает.
>у меня тоже есть интесный вопрос. не замечаеш что мы идем по тому о чем уже говорилось? и, что по идее тобой должно быть проверено.
ээ...ты про что именно?
>и второе. если вдруг, та прога действительно не может работать с 3.6 напрямую, то ты действительно хочеш сей недостаток в точности воспроизвести и у себя тоже?.
а что ты предлагаешь?
я бы с радостью вообще бы не лез туда - но уж если полез - надо лезть так чтоб ничего лишнего не болталось.ну не таскать же с собой 2 версии dao одну для себя другую для основной проги?
← →
Joy (2005-10-17 17:20) [30]>ключница водку делала. © Иван Васильевич меняет профессию.
что то к концу рабочего дня сапсем плохо с мозгами...это к чему было? )
← →
sniknik © (2005-10-17 17:36) [31]> попробовал [3] - не работает.
> ээ...ты про что именно?
про все, раз тебя спросили то не просто же так, если чтото посоветовали то как думаеш результат не интересен?
заметь у меня такой ситуации не наблюдается. обо всем, что происходит я сужу с твоих слов. и о чем я могу судить если все мной сказаное "ухнуло в черный ящик"?
> а что ты предлагаешь?
> я бы с радостью вообще бы не лез туда - но уж если полез - надо лезть так чтоб ничего лишнего не болталось.ну не таскать
> же с собой 2 версии dao одну для себя другую для основной проги?
кто предлагал таскать?
второй раз > Digitman © (14.10.05 10:16) [6] перечитай подход.
элементарно же - пытаешся подключится к старшей версии - не получилось, пытаешся к младшей - не получилось выдаеш ошибку.
и все, при установленной 3,6 будет работать через нее, при отсутствии через 3,5. и таскай что угодно а работать будет то что установленно "сверху".
Joy (17.10.05 17:20) [30]
аллегория, перевод - написано дилетантом который не смог отследить версионность. (водка была дерьмовая, по этому поводу царь и высказался)
← →
sniknik © (2005-10-17 17:38) [32]впрочем возможно компаненты взяты настолько старые, что сделаны тогда когда 3,6 не было и в помине...
← →
Joy (2005-10-17 17:45) [33]элементарно же - пытаешся подключится к старшей версии - не получилось, пытаешся к младшей - не получилось выдаеш ошибку
ладно...наверное на том и порешим =) а то и так уже слишком большая ветка вышла...(
>написано дилетантом который не смог отследить версионность
(мог бы и сам блин догадаться =))
я бы так не сказал =) там просто есть возможность и 3.6 и 3.5 выбрать...на 3.6 все хорошо а на 3.5 та же ошибка...всетаки думаю дело в том что чего то из файла не хватает...
а сами компаненты очень даже хорошие...
вопчем буите у нас в Новосибе - с меня пиво )
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.036 c