| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Узнать возвращает ли TADOCommand пустой _Recordset |
| Автор: Beltar 1.10.2009, 12:09 |
| Хочу сделать простейший редактор запросов, TMemo с текстом, TreeView со структурой базы и кнопочка Execute. Запрос может быть произвольным, как возвращающим данные, так и не возвращающим, TADOQuery.ExecSQL набора не возвращает, а TADOQuery.Open не дружит с разными Update. TADOCommand всегда возвращает _Recordset, но к его свойствам я обратиться не могу, хотя отладчик и показывает, что у пустого _Recordset'а RecordCount=-1. Что делать? Вариант с парсингом запроса и проверкой, что он начинается с Select мне как-то не очень нравится. |
| Автор: Romikgy 1.10.2009, 20:02 |
| правильнее всего имхо заюзать а при пустом ответе должно равнятся нулю это в каких случаях? |
| Автор: Beltar 1.10.2009, 20:46 |
| Ну, например, Update МояСуперПуперТаблица Set ОдноПоле=Чего-то Where Что-то=чему-то Этот запрос прекрасно отработает, если я буду юзать не Open, который пригоден только для запросов возвращающих данные, а ExecSQL, который данные не возвращает но, повторяю, я не знаю какой именно запрос будет выполняться. RecordCount=0 не означает пустого запроса, в нем есть хотя бы структура таблицы. Изначально я тоже думал, что сделаю Open и буду счастлив, при первом же апдейте получил ошибку, типа набор данных закрыт. |
| Автор: Beltar 2.10.2009, 07:27 | ||||
Был вот такой код:
Этот код прекрасно работает, если запрос имеет вид Select * From МояТаблица, запрос с апдейтом же вызывает Exception с сообщением "Q: Command Text does not return a result set". Замена Q.Active=true на Q.ExecSQL ошибок не вызывает, но и набор данных даже при примитивном селекте получается пустой. Есть идея использовать TADOCommand т. к. он возвращает набор данных, который можно подсунуть какому-нибудь наследнику TADODataSet.
Это работает, если набор не пустой получается, если набор пустой, то при попытке обращения к его свойствам вываливается ошибка: "Операция не допускается, если объект закрыт". Т. е. нужно как-то проверить Recordset на пустоту. |
| Автор: Vas 2.10.2009, 07:46 |
| Я парсил первое слово первой строки, если select то open, иначе Execute. А собсно вопрос, а если пользователь процедуру набьет в твоем Мемо, как выполнять ее думаешь? |
| Автор: Beltar 2.10.2009, 09:22 | ||
| Пока тоже написал парсер, точнее по лености взял его из DRKB, помню парсер строки в TStrings был вроде где-то готовый, но в хелпе ничего не нашел. Ну а потом вот так:
Насчет хранимок. В принципе у меня софтина работает только с одной базой и хранимка там сейчас всего одна, возвращает некоторые права залогиневшегося юзера. Зачем мне возиться с хранимками, если проще генерировать запросы на клиенте. Система в общем-то достаточно простая чтобы особо не заморачиваться. |