| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Базы данных > Проверка SQL запроса |
| Автор: RetroRe 1.2.2007, 11:23 |
| Добрый день. У меня такой вопрос. Как можно проверить в Builder или это запрос, результатом которого табличка (select...), или запрос который редактирует базу (update, insert...). Только не предлагайте проверять на вход ключевых слов. Использую TQuery,TADOQuery. |
| Автор: Rodman 1.2.2007, 11:29 | ||
впиши запрос в ТADOQuery и напиши в коде
если все нормально откроется, то запрос корректный (возможно)... но еще есть вариант сделать запросу Active=TRUE;, но с этим я не уверен... |
| Автор: RetroRe 1.2.2007, 11:47 | ||||
| Запрос: insert into city select 1,'aaaaaaaa'
Возникает ошибка EDatabaseError. Я пишу:
Тогда ошибка: List index out of bounds (0) И что делать? |
| Автор: Rodman 1.2.2007, 11:49 |
по подробнее, что ты хочешь сделать при помощи этого запроса??? то что ты написал - почти набор символов |
| Автор: RetroRe 1.2.2007, 11:54 | ||
| Есть таблица city. Есть два поля city_id, city_Name. И запрос нормальный. Пишу так:
|
| Автор: Anikmar 1.2.2007, 13:37 |
| insert into city select 1,'aaaaa' select - это имя поля? Тогда надо в кавычках - это зарезервированное слово По идее проверить какого типа запрос можно так: Если после команды Open свойство Active осталось true - значит запрос остался открытым и в нем есть записи. А если нет - значит он отработал. (Не проверял - чисто предположение) |
| Автор: RetroRe 1.2.2007, 14:05 | ||||||||
запрос может быть как 1 так и 2. У таблицы сity есть два поля 1) city_id - int 2)city_name - text. И потому такой запрос
вставляет одну запись. [1,'aaaaaa'] А на счет Active то сейчас проверю. |
| Автор: RetroRe 1.2.2007, 15:30 |
| Да Active то false, но речь не в етом. При вызове Open возникает ошибка EDatabaseError. И как мне знать, что ошибка возникла именно через то что там было написано insert или update. Может эта ошибка возникает в других ситуациях. И что ме тогда делать. Active тоже будет false. |
| Автор: Кнопа 1.2.2007, 15:37 |
| Насколько мне известно, есть форма: 1)Use a VALUES clause to specify the data values for one row: INSERT INTO MyTable (PriKey, Description) VALUES (123, 'A description of part 123.') 2)Use a SELECT subquery to specify the data values for one or more rows. INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView А у тебя select из пустоты... Может в этом проблема? |
| Автор: RetroRe 1.2.2007, 15:43 | ||
| Суть не в запросе. пусть будет запрос
Проблема не в этом. |
| Автор: Anikmar 1.2.2007, 19:33 |
| Так а какой тип исключения выскакивает? Просто ошибка базы данных или что-то вроде "Несовместимый тип запроса"? |
| Автор: RetroRe 2.2.2007, 10:18 | ||
Допустимо я напишу так:
Все будет хорошо, ошибка не выскакивает. Но если будет какая-то другая ошибка, при которой возникает EDatabaseError, результату то никакого. И я не буду знать шо такое. Вот в чем проблема. |
| Автор: Rodman 2.2.2007, 10:29 |
| RetroRe, если делаешь: INSERT, DELETE или UPDATE то лучше использовать ExecSQL, а не Open... |
| Автор: RetroRe 2.2.2007, 10:59 | ||
Ну в этот список можно добавить еще много чего. Например CREATE, EXEC ... Не провиряти мне запрос на вход таких слов. |
| Автор: Texas 2.2.2007, 22:42 |
| Первое: научись формулировать вопросы (только без обид). Второе: как я понял ты делаешь чтото типа SQLExplorer-а, тоесть тебе нужно чтобы при выполнении запроса который ктото будет писать, не ты, при его выполнении в случае исключительной ситуации выводилось системное сообщение с кодом и описанием ошибки, поэтому ты пишешь неправильный запрос чтобы проверить обработчик ошибок, так? |
| Автор: Anikmar 3.2.2007, 00:54 |
Да правильный там запрос - просто достаточно экзотическое использование select-а (я сначала тоже неправильно воспринял). Мне стало интересно, я наверное час убил на поиск подходящего свойства, но не нашел. Я искал свойство "возвращает ли запрос записи или нет"... Думаю надо в исходник компонента залезть и посмотреть где он это отсекает.... Парсить самому, я думаю, хоть и можно, но запарно и неинтересно - ведь внутри компонента это сделано! |