|
|
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
В моем приложении в экселе идет подключение к БД через ADO следующими строками: Код: plaintext 1. 2. Перед этим пользователь в ячейке выбирает нужную БД. Проблема одна. Когда пользователь забывает выбрать нужную БД или не правильно выбирает, то программа пытается подключиться к недоступной в настроящий момент БД. При этом приложение зависает на n-ое кол-во времени. Как проверить существует ли БД, прежде чем к ней подключаться? Или здесь поможет только перехватывание ошибки cn.Open через через это n-ое кол-во времени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 18:28 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 18:49 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Worobjoff Может это вам подойдет Может быть. Только автор там знал, что спрашивает, а я там мало что понял. Что за стандартный диалог "Свойства связи с данными" с выбором драйвера OLE DB? Смысл представленной функции? И "самое главное" - откуда брать hWnd? Без hWnd не могу попробовать это на примере. Можете по подробнее объяснить? Мне показалось, что данная функция возвращает строку для cn.ConnectionString и подключается к БД. И, видимо, если БД недоступна, функция просто возвращает пустую строку. Я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 19:21 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
k-nike2Как проверить существует ли БД, прежде чем к ней подключаться?В общем случае это невозможно. Некоторые базы предоставляют клиентам возможность сделать поиск серверов БД по локалке или по указаным подсетям, но только через родные клиентские интерфейсы. Через ADO этот сервис недоступен совсем. Самое реальное в твоем случае это использовать cn.ConnectionTimeout=X где X это количество секунд в течении которых клиент пытается найти сервер. По умолчанию там стоит 15, но для серверов в LAN можно вполне снизить до 2-3 секунд. Если за указаное время клиент не смог подцепиться к серверу - cn.Open завершится с ошибкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 19:56 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
k-nike2Что за стандартный диалог "Свойства связи с данными" с выбором драйвера OLE DB?Если провайдер не смог установить связь с базой, он может вернуть ошибку, а может показать свой встроенный диалог в котором пользователь сможет подправить первоначально заданую строку коннекта и попытаться подконнектится снова. Бери документацию на своего провайдера (у тебя это IBProvider) и смотри есть ли у него такая возможность вообще и если есть, то какими флагами в строке коннекта этот диалог запрещается или разрешается. k-nike2И "самое главное" - откуда брать hWnd? Без hWnd не могу попробовать это на примере.Это хендл родительского окна. Диалог коннекта который будет отрисовывать провайдер будет рисоваться модальным для окна твоего приложения. Можно в hWnd кинуть 0 и тогда диалог не будет модальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 20:03 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Судя по строке подключения, БД файловая. В этом случае, нужно только проверить, есть ли такой файл sklad.gdb If dir("10.10.11.8:f:\DB\sklad.gdb")="" then msgbox "Такая БД отсутствует!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 23:04 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
ВasiССудя по строке подключения, БД файловая. В этом случае, нужно только проверить, есть ли такой файл sklad.gdb If dir("10.10.11.8:f:\DB\sklad.gdb")="" then msgbox "Такая БД отсутствует!" судя по строке подключения субд нифига не файловая а клиент-серверная... в свое время я решал эту проблему методом похожим на предложенный White Owl... а именно делаем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. З.Ы. для подключения к Firebird/Interbase также можно качнуть отсюда драйвера и подключаться при помощи такой строчки: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 23:31 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
2 White Owl. Даааа, боюсь мои фришный IBProvider много чего не поддерживает. Видимо вариант с n.ConnectionTimeout самый оптимальный. 2 Basic. А ваш вариант мне поначалу показался хорош, но потом подумалось, что все-таки недостаточно. Т.к. доступ к БД осуществляется через сервер БД (InterBase Server), установленный на 10.10.11.8, т.е. если делать просто проверку доступности файла нужно, наверное, на серваке расшаривать сетевые ресурсы, а это, наверное, не правильно с точки зрения безопасности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 23:34 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за участие. 2Nikz Ну да да. Я так и понял. Спасибо за готовый пример. Я в терминологии не очень, но разве клиент-серверная БД, которой является InterBase не может быть файловой? Там же вся база в одном файле .gdb и содержится! А что касается этого odbc драйвера. Он мне может заменить мой IBProvider? Или они как-то дополнять друг друга будут Меня интересует подключение именно через ADO, т.к. мне почему-то не нравиться в ручную прописывать DSN'ы. IBProvider я инсталлирую и все - можно запускать приложения. Удобно. И если вдруг меня не будет и на какой-нибудь комп надо будет установить мое приложение, можно все на пальцах объяснить даже чайнику что установить чтоб заработало, а так нужно писать целую инструкцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:02 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
k-nike2Я в терминологии не очень, но разве клиент-серверная БД, которой является InterBase не может быть файловой? Там же вся база в одном файле .gdb и содержится!Не важно где она содержится, важно как к ней доступ идет. Даже если ты нашел файл sklad.gdb, не факт что ты сможешь к нему подключится. Потому что сначала надо запустить специальную программу под названием "сервер базы данных", загрузить в него этот файл и только после этого можно получать доступ к данным. Файловые БД работают без серверов - в них клиентская программа сама работает напрямую с файлами БД. k-nike2А что касается этого odbc драйвера. Он мне может заменить мой IBProvider? Или они как-то дополнять друг друга будут Заменить. Никаких дополнений. В принципе, ты можешь делать несколько коннектов из своего клиента к разнам базам или даже к одной. И каждый коннект может идти через другого провайдера. Извращение конечно, но возможно :) k-nike2Меня интересует подключение именно через ADO, т.к. мне почему-то не нравиться в ручную прописывать DSN'ы.Не используй слов которые не понимаешь :) DSN это совсем не так уж страшно. DSN это та же самая строка коннекта, которой дали имя и сохранили ее в регистри. если сейчас ты в строке коннекта пишешь: Код: plaintext Код: plaintext А если не хочешь создавать DSN в регистри можешь каждый раз отдавать cn.Open полную строку коннекта как ты делаешь уже сейчас. k-nike2IBProvider я инсталлирую и все - можно запускать приложения. Удобно. И если вдруг меня не будет и на какой-нибудь комп надо будет установить мое приложение, можно все на пальцах объяснить даже чайнику что установить чтоб заработало, а так нужно писать целую инструкцию.С точки зрения инсталляции ODBC драйвер не намного отличается от IBProvider. Копируешь его куда-нибудь на клиентскую машину, регистрируешь драйвер в винде и все. Зато у ODBC есть огромный плюс - среди универсальных интерфейсов он самый широко известный, самый мощный и самый простой в работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:23 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
k-nike2... но разве клиент-серверная БД, которой является InterBase не может быть файловой? Там же вся база в одном файле .gdb и содержится! так в принципе любая инфа которая лежит на винте располагается там так или иначе в виде файлов... ИМХО (в теории не силен) файловая БД отличается от клиент-серверной тем что файловая просто хранит информацию, а всю обработку этой информации берет на себя клиентская часть приложения (запросы там, апдейты и т.д) а в клиент-серверная не просто хранит информацию, но и выполняет сама всю работу по обработке этой информации (т.е. например запрос выполняется на сервере, а клиентам уходит только результат этого запроса, в то время как файл-сервер считывает содержимое всех необходимых табличек, и выполняет запрос на стороне клиента, в результате увеличивается нагрузка на сетку и на клиентскую машину) почему я вообще обратил на это внимание: 1. функция Код: plaintext 2. даже если мы каким нибудь способом будем проверять наличие файла "f:\DB\sklad.gdb" на машине "10.10.11.8" и узнаем что такой файл физически существует это еще не гарантирует что подключение к базе произойдет успешно, так как мы подключаемся не к файлу а к СЕРВЕРУ БД который крутится на машине с адресом "10.10.11.8" и говорим ему что нам нужна база располагающаяся по адресу "f:\DB\sklad.gdb". Если сервер на этой машине по каким то причинам не работает, то не зависимо от того есть файл базы данных физически на жестком диске или нет, подключиться к базе не получится... k-nike2...А что касается этого odbc драйвера. Он мне может заменить мой IBProvider? Или они как-то дополнять друг друга будут да по большому счету это одно и тоже k-nike2...Меня интересует подключение именно через ADO, т.к. мне почему-то не нравиться в ручную прописывать DSN'ы. не совсем понял, это и есть подключение через ADO, просто другим способом... единственная разщница только в том, что не нужно писать строчку Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:28 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
White Owl... ну в принципе именно это я и имел в виду :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:29 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Nikzединственная разщница только в том, что не нужно писать строчку Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:33 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Опа! Вот я и добрался до первой сотни постов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:36 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
White Owl Nikzединственная разщница только в том, что не нужно писать строчку Код: plaintext Код: plaintext не знал... век живи - век учись :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:39 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Чет я совсем растерялся. Изначально у меня шло подключени через ODBC. По предоставленной мне любезно ссылке http://www.ibase.ru/devinfo/excel_odbc.htm в ветке форума InterBase,FireBird,Yaffil я и настраивал его. Там, к сожалению, не говорилось о том, что можно не создавать DSN запись. Помнится из всех 3 бесплатных драйверов только Gemini заработал как надо. И там же посоветовали этот IBProvider. Мне он показался проще и в последствии я под него все переделал. А в чем я растерялся, так это в технологиях. Что же такое ADO и ODBC? В чем различия? Может ссылки какие дадите русские, где почитать можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 00:55 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
k-nike2Чет я совсем растерялся. Изначально у меня шло подключени через ODBC. По предоставленной мне любезно ссылке http://www.ibase.ru/devinfo/excel_odbc.htm в ветке форума InterBase,FireBird,Yaffil я и настраивал его. Там, к сожалению, не говорилось о том, что можно не создавать DSN запись. Помнится из всех 3 бесплатных драйверов только Gemini заработал как надо. И там же посоветовали этот IBProvider. Мне он показался проще и в последствии я под него все переделал. А в чем я растерялся, так это в технологиях. Что же такое ADO и ODBC? В чем различия? Может ссылки какие дадите русские, где почитать можно? ADO (ActiveX Data Object) - это метод доступа к информации в базе данных (не важно в какой именно) ODBC (не помню как расшифровывается) - это технология создающая своего рода мостик, определяющая правила как интерпретировать информацию хранящуюся в определенной базе данных для того что бы к ней можно обращаться (при помощи например ADO) т.е. по простому, в нашем случае: ADO - это средство (синтаксис) для работы с таблицами. ODBC - это средство для того что бы можно было при помощи ADO подключиться к этим самым таблицам (ведь баз данных всяких много существует, и доступ к ним необходимо как то стандартизировать). DSN (Data Source Name) - строка подключения к базе данных сохраненная на компьютере пользователя, включающая в себя информацию о том к базе данных какого типа мы подключаемся, где лежит эта самая база и т.д. Эта штука сделана просто для (сомнительного) удобства, что бы при необходимости подключения не приходилось прописывать строку подключения ручками, а можно было бы использовать готовый DSN как шаблон этой строки... вот насчет где почитать - нескажу, так как не знаю, сам учился методом художественного тыка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 01:19 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
NikzADO (ActiveX Data Object) - это метод доступа к информации в базе данных (не важно в какой именно) ODBC (не помню как расшифровывается) - это технология создающая своего рода мостик, определяющая правила как интерпретировать информацию хранящуюся в определенной базе данных для того что бы к ней можно обращаться (при помощи например ADO)Ой наврааааал :) Читать надо доку идущую с MDAC. Там все четко и просто написано. Вот базовые объяснения всех трех основных интерфейсов: MDAC 2.8The Microsoft® Open Database Connectivity (ODBC) interface is a C programming language interface that makes it possible for applications to access data from a variety of database management systems (DBMSs). The ODBC interface permits maximum interoperability—an application can access data in diverse DBMSs through a single interface. Furthermore, that application will be independent of any DBMS from which it accesses data. Users of the application can add software components called drivers, which interface between an application and a specific DBMS. OLE DB is a set of COM-based interfaces that expose data from a variety of sources. OLE DB interfaces provide applications with uniform access to data stored in diverse information sources, or data stores. These interfaces support the amount of DBMS functionality appropriate to the data store, enabling the data store to share its data. Microsoft® ActiveX® Data Objects (ADO) enable your client applications to access and manipulate data from a variety of sources through an OLE DB provider. Its primary benefits are ease of use, high speed, low memory overhead, and a small disk footprint. ADO supports key features for building client/server and Web-based applications. А если по очень простому: ODBC и OLE DB это низкоуровневые универсальные интерфейсы. ODBC - интерфейс процедурного типа, OLE DB - объектного. А ADO - объектная надстройка над одним из этих или любым другим провайдером по выбору программиста. Ручная работа с ODBC предпочтительна для процедурных языков (С например) OLE DB - удобен в С++, (впрочем я все равно предпочитаю ODBC :) А вот специально для Visual Basic Микросфт придумал ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 01:59 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
Ну так я же и говорю: Nikz...ИМХО(в теории не силен)... Это было так... мое видение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2006, 15:36 |
|
||
|
Проверка существования БД при подключении через ADO
|
|||
|---|---|---|---|
|
#18+
k-nike2 Worobjoff Может это вам подойдет Может быть. Только автор там знал, что спрашивает, а я там мало что понял. Что за стандартный диалог "Свойства связи с данными" с выбором драйвера OLE DB? Смысл представленной функции? И "самое главное" - откуда брать hWnd? Без hWnd не могу попробовать это на примере. Можете по подробнее объяснить? Мне показалось, что данная функция возвращает строку для cn.ConnectionString и подключается к БД. И, видимо, если БД недоступна, функция просто возвращает пустую строку. Я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2006, 08:53 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=275&tid=2165669]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 376ms |

| 0 / 0 |
