![]() |
|
|
![]()
|
|
| fess |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Есть много sql-комманд в текстовом файле, необходимо их все загрузить и выполнить одну за другой. Пытаюсь сделать через ADOQuery, загружаю текст запросов из файла, потом - выполнить - никак(( Оставляю только одни запрос - всё в порядке!
Как это можно обойти? Например, есть текстовый файл типа:
Надо в нём выполнить все команды. Если оставляю одну любую команду в файле и его пытаюсь выполнить через ADOQuery - то всё - она выполняется. А 2 и более команды - ошибка:
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
||||
|
|||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
А что мешает в цикле перебрать все запросы и выполнить.
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
В принципе, ничего)) Но они не всегда состоят из одной строчки (( Это в конкретном примере - каждый запрос в отдельной строке... а в общем случае - это не так...
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 22 Всего: 122 |
fess, реализуй поиск зарезервированных слов или вот так
Это сообщение отредактировал(а) Rodman - 7.1.2007, 20:36 |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Не катит... я пробовал... там в запросах могут быть ";" и как определить, внутри ли они запроса или на этом символе он заканчивается - я не догнал... По этой же причине не поможет поиск зарезервированных слов...
А как-нибудь по-другому, не через ADOQuery можно это сделать? Эти файлы с запросами спокойно выполняются просто - из базы данных (используется MySQL)... не понятно, почему никак не получается такую же фишку провернуть из программы.... Это сообщение отредактировал(а) fess - 7.1.2007, 21:44 --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 22 Всего: 122 |
fess, кто формирует этот файл с запросами??? ты можешь сделать его одной структуры?? а потом можно подумать как его распарсить!!!
Добавлено @ 21:50 вот еще в голову пришло...
|
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Сложно сказать))) эти файлы скачиваются откуда-то из инета... Скорее всего - просто экспорт из MySql.... Их несколько... Все их надо применить для базы... Структура-то у них нормальная... Запрос и должен заканчиваться точкой с запятой... Я говорил, что это не прокатит... по ключевым словам... Т.к. в запросе может быть строка, в которой есть это ключевое слово... И регистр неизвестен... Я думаю, что проблема даже не в парсинге... Как-то же можно передать много запросов в одном? Или никак? --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Не могут быть, только в конце запроса, иначе сами подумайте как бы MySQL понимал ";" в середине скрипта. В MySQL как я знаю ";" и есть признак окончания всего запроса. Вот по ним и орентируйтесь. Добавлено @ 10:40 Никак, токи парсить самому. Это сообщение отредактировал(а) Vas - 8.1.2007, 10:39 -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 2 Всего: 6 |
Попробуй использовать ZeosDBO. Он самостоятельно разбирает введенные SQL команды.
--------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 22 Всего: 122 |
||||
|
||||
| fess |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Пример запроса с ';' внутри:
Я примерно догнал, как парсить)) Спасибо,Vas и Rodman за идею! В общем, точка с запятой должна быть последним символом в строке - тогда это запрос)) Вроде, пока получается) Хотя, это тоже не совсем корректно (т.к. а если 2 запроса в строке будут?)
Попробую)) Просто хотелось обойтись стандартными компонентами... Это сообщение отредактировал(а) fess - 8.1.2007, 13:45 --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
||||
|
|||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
";" может еще встречаться в сердине запроса но как строковое значение то бишь ';' вот, так что дело за маленьким парсить строку посимвольно и учитывать открыт " ' " или нет, если открыт и встретили ";" то пропускаем это не окончание запроса и так далее
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
fess,
У тебя НИКОГДА не получится выполнить несколько запросов "за 1 раз", т.е. за 1 загрузку Query. Подробности - в статье на DelphiKingdom, которая как-то так и названа - "Выполнение нескольких SQL-запросов" (точно не помню - сам ищи). Суть: после выполнения возвращается число, для 1 запроса оно равно 1, и только оно считается правильным. Если запросов 2 в одном запуске Query, вернется 2 - это считается ошибкой. Так что ищи/делай парсер. Или иди другим путем. |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
fess,
Вот и разберись с этим - откуда и почему так. Сам попробуй скачивать в нужном тебе формате, выпытав у заказчика источник. А ежели заказчик признаваться не хочет - ну так и флаг ему в руки, пусть сам ручками парсит и вкачивает. Самый прямолинейный способ. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |