Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Доброе утро. я на медне с проблемкой столкнулся. На чужой машине код писал, так вот, ежели я создаю переменную типа Recordset, то в процессе выполнения кода мне ошибку дает (кажется не соответствие типов выдавал), а ежели я заменяю при определении переменной (в DIM'е) Recordset на Variant - все замечательно работает: преобразует переменную в Recordset. В чем может быть дело?
______________________
Дорогу осилит идущий...
27 авг 06, 11:55    [3058175]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
bubucha
Member

Откуда:
Сообщений: 5642
Ну может в процессе выполнения кода, до того места, где переменной присваевается рекордсет, ей скармиливается нЕрекордсет
27 авг 06, 12:02    [3058185]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27549
Вам надо было писать DAO.Recordset, тогда все пойдет
27 авг 06, 12:03    [3058188]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
Потому что Recordset бывает в разных библиотеках: в DAO, и в ADODB.
Поэтому, если у вас в пректе есть ссылки на обе библиотеки, то при объявлении Dim rst As Recordset, rst становится рекордсетом той библиотеки, приоритет которой выше. А потом в коде вы пытаетесь работать с этим rst как рекордсетом другой библиотеки. Наилучшее решение - при объявлении переменной указывать библиотеку, например Dim rst As DAO.Recordset.

Наверняка эта проблема описана в FAQ.
27 авг 06, 12:06    [3058196]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
bubucha
Ну может в процессе выполнения кода, до того места, где переменной присваевается рекордсет, ей скармиливается нЕрекордсет

Это исключено. =) Я, чего греха таить, рассеян слегка, =))))) но... такой ошибки не делал. =)
27 авг 06, 12:09    [3058202]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
mds_world
Вам надо было писать DAO.Recordset, тогда все пойдет
Но ведь на др. машинах я писал просто Recordset и все работало? Значит это не является обязательным условием...
________________________________
Я так... думаю.... =))))
27 авг 06, 12:11    [3058206]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Serge Gavrilov
Потому что Recordset бывает в разных библиотеках: в DAO, и в ADODB.
Поэтому, если у вас в пректе есть ссылки на обе библиотеки, то при объявлении Dim rst As Recordset, rst становится рекордсетом той библиотеки, приоритет которой выше. А потом в коде вы пытаетесь работать с этим rst как рекордсетом другой библиотеки. Наилучшее решение - при объявлении переменной указывать библиотеку, например Dim rst As DAO.Recordset.

Наверняка эта проблема описана в FAQ.

Я тоже так решил, по началу, но, т.к. подключена у меня была лишь библиотека DAO..... вопрос отвалился. итак... это не тот вариант... =)
27 авг 06, 12:12    [3058209]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
bubucha
Member

Откуда:
Сообщений: 5642
автор
Это исключено. =)

Ну вам ведннее конечно. Я не понял про "других машинах" - на них работает?
27 авг 06, 12:14    [3058214]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
Compositum
mds_world
Вам надо было писать DAO.Recordset, тогда все пойдет
Но ведь на др. машинах я писал просто Recordset и все работало? Значит это не является обязательным условием...

Не обязательным только в том случае, если вы уверены, что подобный объект не используется другой библиотекой. А так как вы, как я вижу, в этом совсем не уверены, то это настоятельная рекомендация.
Я для подобных объектов всегда указываю библиотеку, даже если точно знаю, что в данный момент, не использую другую библиотеку. Но завтра мне может понадоюиться другая библиотека ....
27 авг 06, 12:19    [3058222]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
Compositum
... это не тот вариант... =)

позвольте усомниться :-)
27 авг 06, 12:19    [3058224]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
bubucha

Ну вам виднее конечно. Я не понял про "других машинах" - на них работает?

На них работает, в том-то и дело...
27 авг 06, 12:20    [3058225]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Serge Gavrilov

позвольте усомниться :-)
Почему? Ведь ADO я отключил, и, соответственно не мог перепутать Recordset'ы. =)
27 авг 06, 12:22    [3058230]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
bubucha
Member

Откуда:
Сообщений: 5642
автор
На них работает, в том-то и дело...

ну дык на других, может быть нету адо?
автор
Почему? Ведь ADO я отключил, и, соответственно не мог перепутать Recordset'ы. =)

оптимист однако
27 авг 06, 12:23    [3058234]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
ЁхынПалыч
Guest
2 Compositum:
Прислушайтесь, пожалуйста, к грамотным советам по поводу полной записи при объявлении объектов, As DAO.Recordset и т.п. это очень не лишне. И даже если на удалённой машине вы уверены что там одно ДАО, то ещё бабка надвое сказала какое оно ДАО. Многие сторонние апп имеют дурную привычку приезжать в инсталл со своими длл-лами, не особо педалируя апи функцию проверки версий.
Compositum

Но ведь на др. машинах я писал просто Recordset и все работало? Значит это не является обязательным условием...

Стратегическая ошибка!

Зы. Это же относится и к другим объектам, не только ДАО. Не используйте поведений по умолчанию, если делаете проект не для себя, это правило написано "кровью" программистов и подтверждается слишком часто.
27 авг 06, 12:28    [3058243]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
ЁхынПалыч
2 Compositum:
Прислушайтесь, пожалуйста, к грамотным советам по поводу полной записи при объявлении объектов, As DAO.Recordset и т.п. это очень не лишне. И даже если на удалённой машине вы уверены что там одно ДАО, то ещё бабка надвое сказала какое оно ДАО. Многие сторонние апп имеют дурную привычку приезжать в инсталл со своими длл-лами, не особо педалируя апи функцию проверки версий.
Compositum

Но ведь на др. машинах я писал просто Recordset и все работало? Значит это не является обязательным условием...

Стратегическая ошибка!

Зы. Это же относится и к другим объектам, не только ДАО. Не используйте поведений по умолчанию, если делаете проект не для себя, это правило написано "кровью" программистов и подтверждается слишком часто.

ока, буду писать DAO.Recordset =)
27 авг 06, 12:36    [3058260]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27549
И DAO.Database. Все тоже самое.
27 авг 06, 12:49    [3058288]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Семен Семеныч
Guest
mds_world
И DAO.Database. Все тоже самое.

Да, для унификации. Но я не знаю другой библиотеки, кроме DAO, где есть объект Database, хотя не исключено что такое может быть, например, использовать такое название в своей библиотеке :-)
27 авг 06, 12:54    [3058294]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27549
Семен Семеныч
[quot mds_world]И DAO.Database. Все тоже самое.

Да, для унификации. Но я не знаю другой библиотеки, кроме DAO, где есть
Не помню точно ситуации, но я уже попадал многовариантность в Database и, поэтому, как писал сегодня ЁхынПалыч, это правило написано "кровью" программистов.
27 авг 06, 13:02    [3058307]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
ЁхынПалыч
Guest
mds_world абсолютно прав!
Но цель такого объявления (DAO.Database) даже не столько в унификации, сколько в однозначной проверке наличия нужной библиотеки. Этот код, как правило, пишется при старте апп и инициализации глобальных объектов программы. Т.е. простая проверка на наличие ДАО библиотеки, с обработкой ошибки (исключения). И эту ситуёвину следует отловить сразу, не дожидаясь штатного старта апп и начала работы с рекордсетами.
27 авг 06, 13:16    [3058338]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Семен Семеныч
Guest
mds_world
...Не помню точно ситуации, но я уже попадал многовариантность в Database и, поэтому, как писал сегодня ЁхынПалыч, это правило написано "кровью" программистов.

Попасть можно хоть с чем, например, с публично объявленной кем-то где-то в модуле функцией Left, делающей совсем не то, что от нее ожидаешь.
Но я мало видел кода, где бы для функций VBA обязательно указывалась библиотека. Вы указываете? :-)
27 авг 06, 13:19    [3058343]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Семен Семеныч
Guest
ЁхынПалыч
Т.е. простая проверка на наличие ДАО библиотеки, с обработкой ошибки (исключения). И эту ситуёвину следует отловить сразу, не дожидаясь штатного старта апп и начала работы с рекордсетами.

ну, с DAO в mdb можно работать и без подключения библиотеки, а само наличие DAO, можно проверит наличием CurrentDb. Но мы далеко уходим от темы, я нигде не возражал против использования указателя на библиотеку, я просто выказал сомнение, что все, в том числе и вы, его жестко придерживаетесь :-)
27 авг 06, 13:28    [3058355]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
ЁхынПалыч
Guest
Семен Семеныч
Но я мало видел кода, где бы для функций VBA обязательно указывалась библиотека.

:-)))

Хоть вопрос и не мне был задан... Я не указываю ВБА.Лефт :-))) И тоже налетал на эти погремушки. Но тут случай из "переходите улицу на зелёный свет" - так надо, так правильно, а дальше ответственность пешехода.

Зы. Случай с перегрузкой ВБА функций исключительно редок (хотя и не импоссибль). А на "левые" объекты .Датабасе, .Рекордсет, .Филдс и т.п. при распространении своего апп наткнуться шансов в разы больше.

Семен Семеныч, никто вас ни в чём не упрекал, господь с вами! :-) Мы обменялись мнениями. И автору топика их почитать будет, думаю, интересно.

А по поводу придерживаться полных объявлений - да, придерживаюсь, жёстко, стандарт (библиотека ВБА единственное исключение). :-)
27 авг 06, 13:39    [3058364]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Семен Семеныч
Guest
ЁхынПалыч
...Семен Семеныч, никто вас ни в чём не упрекал, господь с вами! :-)

Да у меня и мысли такой не было, а вот после ваших слов засомневался :-)

ЁхынПалыч

Зы. Случай с перегрузкой ВБА функций исключительно редок (хотя и не импоссибль). А на "левые" объекты .Датабасе, .Рекордсет, .Филдс и т.п. при распространении своего апп наткнуться шансов в разы больше.

На левые Left :-) (или подобное) я натыкался чаще, правя чужой код, чем на левый Database.
Я действительно не знаю другой библиотеки кроме DAO, широко используемой в Acceess, где есть Database. Мне просто интересно, есть ли такая.
27 авг 06, 13:49    [3058387]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27549
2 СеменСеменыч!
Извините, ради бога! При цитировании, часть вашего текста попала в мой. Уверяю вас, чисто случайно. Понятия не имею как это случилось. Извините, но не виноват.
27 авг 06, 14:03    [3058422]     Ответить | Цитировать Сообщить модератору
 Re: Не распознает Recordset, хотя значение Variant в него переводит  [new]
Семен Семеныч
Guest
mds_world
2 СеменСеменыч!
Извините, ради бога! При цитировании, часть вашего текста попала в мой. Уверяю вас, чисто случайно. Понятия не имею как это случилось. Извините, но не виноват.


Да бросьте вы, какие извинения! Совершенно не за что извиняться.
Я прекрасно все понял.
27 авг 06, 14:11    [3058437]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить