| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему выполненяется только 1 sql запрос к ADODB без использования базы данных по умолчанию?

Почему выполненяется только 1 sql запрос к ADODB без использования базы данных по умолчанию?

Ответ
Поиск в этой теме
Непрочитано 25.02.2009, 11:57 #1
Почему выполненяется только 1 sql запрос к ADODB без использования базы данных по умолчанию?
Дима_
 
Продуман
 
Питер
Регистрация: 22.02.2007
Сообщений: 2,840

Вобщем ситуация такая:
Код:
[Выделить все]
Команда: (setq connect (vlax-create-object "adodb.connection"))
#<VLA-OBJECT _Connection 083e0e90>
Команда: (vlax-invoke-method connect "open" "driver={MySQL ODBC 3.51 Driver}" 
"gost" nil T)
nil
Команда: (vlax-invoke-method connect "execute" "use test" T T)
#<VLA-OBJECT _Recordset 083e6dd8>
Команда: (vlax-invoke-method connect "execute" "show databases" T T)
#<VLA-OBJECT _Recordset 083e8b78>
Команда: (vlax-invoke-method connect "execute" "show databases" T T)
#<VLA-OBJECT _Recordset 083eaad0>
Теперь если перезапустить автокад (именно перезапустить всю программу, чтобы закрыть соединение а не открыть новый документ) то:
Код:
[Выделить все]
Команда: (setq connect (vlax-create-object "adodb.connection"))
#<VLA-OBJECT _Connection 083f0e90>
Команда: (vlax-invoke-method connect "open" "driver={MySQL ODBC 3.51 Driver}" 
"gost" nil T)
nil
Команда: (vlax-invoke-method connect "execute" "show databases" T T)
#<VLA-OBJECT _Recordset 083f6e08>
Команда: (vlax-invoke-method connect "execute" "show databases" T T)
; ошибка: Ошибка Automation. [MySQL][ODBC 3.51 
Driver][mysqld-5.0.24-community-nt]You have an error in your SQL syntax; check 
the manual that corresponds to your MySQL server version for the right syntax 
to use near 'show databases' at line 1
Видимо при выполнении запроса без установленной таблицы где-то оседает ошибка - теперь кстати без перезапуска работать не будет. Вопрос где ее (ошибку) искать.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Просмотров: 3910
 
Непрочитано 25.02.2009, 12:42
#2
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Сильно как-то все непонятно, я в твоем коде вообще SQL запроса невижу, а если тебе надо подключится к MySQL так тема уже поднималась здесь и здесь
Holon вне форума  
 
Автор темы   Непрочитано 25.02.2009, 12:50
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Holon Посмотреть сообщение
Сильно как-то все непонятно, я в твоем коде вообще SQL запроса невижу, а если тебе надо подключится к MySQL так тема уже поднималась здесь и здесь
а "show databases" это что - причем объект возращаеться и прекрасно при помощи (vlax-get-property (vlax-get-property (vlax-get-property <recordset_obj> "fields") "item" 0) "name") показывает значения таблиц. Просто по чему-то ни в какую не хочет делать это больше 1 раза без предварительного:
(vlax-invoke-method connect "execute" "use test" T T) - тоже кстати sql запрос.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 25.02.2009 в 12:57.
Дима_ вне форума  
 
Непрочитано 25.02.2009, 12:57
#4
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Ну если это SQL запрос то добавь ";" в конце запроса
Holon вне форума  
 
Автор темы   Непрочитано 25.02.2009, 13:03
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


А зачем она там нужна - я ж не с клавиатуры в mysql ввожу - где конец запроса он (компьютер) и так прекрасно видит - в 1 случае-то работает, да и во 2 recordset на первый запрос возращает - причем читабельный.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.02.2009, 16:28
#6
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Хорошо убедил, что работает без ";" есть еще одна вещь если я правильно понял то первый раз работает, а повторно
неполучается, нужно модель перезагружать. Тогда наводит на мысль,что после запросов надо каким-то образом делать disconnect, так это работает с использованием библиотеки ADOLisp, посмотри у них, что они там делают для закрытия соединения.

Код:
[Выделить все]
      (ADOLISP_DisconnectFromDB ConnectionObject)
      (setq ConnectionObject nil)
Holon вне форума  
 
Автор темы   Непрочитано 25.02.2009, 16:39
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Вот и хочеться понять почему его надо делать? Ведь при установленной "use test", дальше делай что хочешь, можешь даже соединение закрыть (vlax-invoke-method connect "close"), а потом открыть заново и БЕЗ УСТАНОВКИ БД ПО УМОЛЧАНИЮ все работает - любые select'ы вызывай сколько угодно - если будешь обращаться к таблицам - напишет что БД не выбрана, ну а тот-же "show databases" хоть милион раз. похоже на глюк или особенность хитрую то-ли odbc, то-ли mysql (надо проверить на других источниках данных).

А зачем смотреть как в AdoLisp это сделанно - в доке к ADODB все методы расписанны и close и disconnect - только не похоже что дело в них.

P.S. Вобщем если не понятно то распишу поподробней:
Если я соединяюсь с БД (все операции без adolisp, через vla), соединение проходит корректно, но в случае если не устанавливаеться БД по умолчанию "(vlax-invoke-method connect "execute" "use test" T T)", то выполняеться только один запрос, после чего обращение к БД завершаеться ошибкой синаксиса команды???, если же установить БД, то все работает корректно, причем будет работать и в другом сеансе и вообще пока ПОЛНОСТЬЮ не перезагрузить автокад, то есть для корректной работы видимо необходимо, чтоб висел recordset возращаемый (... execute "use XXX"), почему не знаю, о чем и спрашиваю.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 25.02.2009 в 16:52.
Дима_ вне форума  
 
Непрочитано 25.02.2009, 23:16
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Мне почему-то кажется, что проблема в строке соединения.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2009, 08:50
#9
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


У меня есть еще одна мысль, посмотрев различные коды на PHP я обратил внимание, что там тоже все время производится отключение от сервера, возможно это настройка сервера такая, что подключившись
и незакончив выполнение запроса в течении скольки-то милисекунд сервер выдает ошибку, возможно стоит задать этот вопрос на MySQL-ном форуме или PHP-истам, можешь сам конечно покрутить сервер, через
phpMyAdmin в закладке Server variables and settings, нехочу толкать тебя на неправильный путь, это только мои мысли.
Holon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему выполненяется только 1 sql запрос к ADODB без использования базы данных по умолчанию?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск