![]() |
|
![]() ![]() ![]() |
|
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Хочу сделать простейший редактор запросов, TMemo с текстом, TreeView со структурой базы и кнопочка Execute.
Запрос может быть произвольным, как возвращающим данные, так и не возвращающим, TADOQuery.ExecSQL набора не возвращает, а TADOQuery.Open не дружит с разными Update. TADOCommand всегда возвращает _Recordset, но к его свойствам я обратиться не могу, хотя отладчик и показывает, что у пустого _Recordset'а RecordCount=-1. Что делать? Вариант с парсингом запроса и проверкой, что он начинается с Select мне как-то не очень нравится. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 4 Всего: 146 |
правильнее всего имхо заюзать
а при пустом ответе должно равнятся нулю это в каких случаях? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Ну, например,
Update МояСуперПуперТаблица Set ОдноПоле=Чего-то Where Что-то=чему-то Этот запрос прекрасно отработает, если я буду юзать не Open, который пригоден только для запросов возвращающих данные, а ExecSQL, который данные не возвращает но, повторяю, я не знаю какой именно запрос будет выполняться. RecordCount=0 не означает пустого запроса, в нем есть хотя бы структура таблицы. Изначально я тоже думал, что сделаю Open и буду счастлив, при первом же апдейте получил ошибку, типа набор данных закрыт. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 4 Всего: 146 |
делай тогда типа
.Active := true;
т.е. есть возможность вообще не правильного запроса? тогда ошибка вылетит , в чем собстно вопрос то ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Beltar |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Был вот такой код:
Этот код прекрасно работает, если запрос имеет вид Select * From МояТаблица, запрос с апдейтом же вызывает Exception с сообщением "Q: Command Text does not return a result set". Замена Q.Active=true на Q.ExecSQL ошибок не вызывает, но и набор данных даже при примитивном селекте получается пустой. Есть идея использовать TADOCommand т. к. он возвращает набор данных, который можно подсунуть какому-нибудь наследнику TADODataSet.
Это работает, если набор не пустой получается, если набор пустой, то при попытке обращения к его свойствам вываливается ошибка: "Операция не допускается, если объект закрыт". Т. е. нужно как-то проверить Recordset на пустоту. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||
|
|||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Я парсил первое слово первой строки, если select то open, иначе Execute.
А собсно вопрос, а если пользователь процедуру набьет в твоем Мемо, как выполнять ее думаешь? -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Пока тоже написал парсер, точнее по лености взял его из DRKB, помню парсер строки в TStrings был вроде где-то готовый, но в хелпе ничего не нашел.
Ну а потом вот так:
Насчет хранимок. В принципе у меня софтина работает только с одной базой и хранимка там сейчас всего одна, возвращает некоторые права залогиневшегося юзера. Зачем мне возиться с хранимками, если проще генерировать запросы на клиенте. Система в общем-то достаточно простая чтобы особо не заморачиваться. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |