Есть обычная форма с ADQuery, в ней запрос, результаты в табличку выводятся. Работает прекрасно. D2007, MySQL5.1, WinXP, AnyDAC 1.12.2
Проблема возникает, когда приходится изменить структуру БД или тип одного из полей.
Допустим, удалили из таблицы zakaz_product поле kolvo.
Открываю дельфи, открываю форму - и тут вываливается ошибка
[AnyDAC][Phys][MySQL][LIBMYSQL] Unknown column 'zakaz_product.kolvo' in 'field list'
Error code: 01054 Error kind: Other Unknown column 'zakaz_product.kolvo' in 'field list'
Exception class name: EMySQLNativeException AnyDAC error code: 1100
Как бы всё правильно - AnyDAC ругается на то что поле было, а теперь его нет.
И если щелкнуть ОК на окошке с ошибкой, она закроется - НО! в дельфи откроется код моей формы, но закладки Design нет и не даёт переключится по F12.
И получается тупиковая ситуация - мне нужно в режиме Design щелкнуть по ADQuery и изменить SQL запрос на правильный, а режима Design нет Ну и соответсвенно в окошке Structure я тоже не могу добраться до ADQuery.
Что делать?
Ну конечно, как вариант, я обратно возвращаю поле kolvo в таблицу zakaz_product, заново открываю дельфи - и правлю SQL и потом снова удаляю поле kolvo, но как то не интересно так.
Да, где DFM почистил, где вернул поле, потом снова убрал, нормально.
Так же эта ошибка возникает еще и при смене типа поля. Ну например было SELECT id from xx и если заменить на SELECT 1 as id from xx то уже другой тип и тоже не открывается. Или в базе поле было int, а стало string - всё тоже капец, нужно в DFM лезть. Я думаю, если измените тип поля с инт на стринг, то сможете воспроизвести проблему.
И ещё одна непонятка:
SELECT * FROM zayavka_product WHERE zayavka_product.zayavka_id IN( :zayavka_id ) GROUP BY ...
Параметр zayavka_id - тип стринг ( приходить должно что то типа '2,5,8' ) Но именно как строковый параметр он никак не желает восприниматься, т.е. понимает как 2 и всё тут, то есть приводит к INT. Пробовал передавать 2,5,8 - воспринимает как 2, если передавать '2', '5', '8' - то воспринимает как пусто.
Так же эта ошибка возникает еще и при смене типа поля. В случае с персистентными полями - да будет возникать. Это стандартное поведение датасетов. Если вы часто меняете типы полей, то не используйте персистентные поля.
замечательно работает. Пытаюсь изменить запрос на :
(SELECT id, name FROM xx WHERE xx.sklad_id=:ID) UNION (SELECT 0, 'НЕ ВЫБРАНА') ORDER BY id DESC LIMIT 100
и как только добавляю UNION - сразу вываливается ошибка (имеено на UNION заметил)
[AnyDAC][Phys][MySQL][LIBMYSQL] Commands out of sync; you can't run this command now 02014 Other EMySQLNativeException 1100
причем уже только закрыть/открыть форму помогает, даже если вернуть старый запрос, то всё равно ошибка Commands out of sync; you can't run this command now Ну и соответственно перед открытием поправить SQL в DFM - иначе не откроется.
Соответственно оба запроса без ошибок выполняются в PHPMyAdmin
Upd: Точнее помогает закрытие-открытие всего Delphi, если форму открыть/закрыть не поможет (даже если не сохранялся новый запрос)