|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.07.2007, 21:00 | #1 |
Пользователь
Регистрация: 25.07.2007
Сообщений: 12
|
Ошибка при выполнении запроса
Помогите, пожалуйста, решить такую проблему: сделала я базу данных на Paradox'е в Database Desktop'e, состоящую из нескольких справочников(Authors, Publishers, Genres, Branches) и главной таблицы(Library). И к ней надо несколько запросов, причем некоторые - с параметрами. Данные заносятся в DBGrid. Сначала у меня в датамодуле(помимо таблиц и датасурсов) лежал один TQuery и датасурс к нему. В зависимости от выбора пользователя, менялось свойство SQL.Text. Однако в этом случае первый запрос(неважно какого вида) выполнялся, а при попытке выполнить остальные выпадала ошибка вроде "List index out of bounds(0)". Когда я сделала для каждого запроса свой TQuery(понимаю, что не лучший выход), эта ошибка пропала, зато появилась другая. Теперь, скажем, выполнился запрос на вывод всех записей таблицы, а потом был выбран запрос на вывод всех записей по указанному автору, то все нормально. Но если после этого попытаться выполнить запрос уже по другому автору,
то вываливается такая ошибка: "MyLibrary: Field 'NameStr1' not found". MyLibrary - TTable с главной таблицей, NameStr1 - параметр у TQuery. Собственно вопрос: почему возникают ошибки №1 и №2 и как с ними бороться? Вот кусок кода: Case RadioGroup1.ItemIndex Of 0: With DataModule2.Query1 Do Begin Active := False; SQL.Clear; st := 'SELECT * FROM Library, Authors, Publishers, Genres, Branches'+ ' WHERE Library.AuthorID = Authors.ID'+ ' AND Library.PublisherID = Publishers.ID'+ ' AND Library.GenreID = Genres.ID'+ ' AND Library.BranchID = Branches.ID'; SQL.Add(st); Active := True; DBGrid1.DataSource := DataModule2.Query1Source; End; 1: With DataModule2.Query2 Do Begin Params[0].Name := 'NameStr1'; Params[0].AsString := combAuthor.Text; Active := False; SQL.Clear; st := 'SELECT * FROM Library, Authors, Publishers, Genres, Branches'+ ' WHERE Library.AuthorID = Authors.ID'+ ' AND Library.PublisherID = Publishers.ID'+ ' AND Library.GenreID = Genres.ID'+ ' AND Library.BranchID = Branches.ID'+ ' AND Authors.Author = :NameStr1'; SQL.Add(st); Active := True; DBGrid1.DataSource := DataModule2.Query2Source; End; End; Заранее спасибо. |
26.07.2007, 01:24 | #2 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
Может я чего-то не понимаю, но на мой взгляд логичнее будет сначала сформировать строку запроса, а уж затем присваивать значения параметрам. Это я о случае, когда ItemIndex = 1. Ну и написать что-то типа Parameters.ParseSQL(st, true) тоже совсем не помешает.
|
26.07.2007, 09:19 | #3 | |
детский тренер
Форумчанин
Регистрация: 08.06.2007
Сообщений: 532
|
Цитата:
Params[0].AsString := combAuthor.Text; Зачем так все усложнять? по-моему, params[0].value:=значение , вполне работает.... Насчет первой ошибки, то такая ошибка встречается, когда паришься с инжексами.... Например , напишешь params[1], а у тебя их всего 1... Может, намудрил с этим....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
|
|
27.07.2007, 10:49 | #4 |
Пользователь
Регистрация: 25.07.2007
Сообщений: 12
|
2 Баламут:
Поменяла местами присвоение с формированием - заработало. Ммда, все, теперь не верю конспектам и учебникам. Но заработало только при наличии отдельных TQuery для каждого запроса. В первом же случае все та же ошибка с индексами. Параметров у меня 4, проверила обращения к ним - все нормально... Params[0].AsString := combAuthor.Text; ..... Params[1].AsString := combGenre.Text; Ну и т.д. 2 Pitbull: Value почему-то не работает... То есть ошибок не выдает, но и в таблицу ничего не выводит. И, прошу прощения за наглость, но можно поподроднее про Parameters.ParseSQL(st, true)? |
27.07.2007, 13:04 | #5 |
детский тренер
Форумчанин
Регистрация: 08.06.2007
Сообщений: 532
|
2 Pitbull:
Value почему-то не работает... То есть ошибок не выдает, но и в таблицу ничего не выводит. И, прошу прощения за наглость, но можно поподроднее про Parameters.ParseSQL(st, true)?[/QUOTE] Все работает...Вот код.... begin Query1.Active:=false; Query1.SQL .Clear ; Query1 .SQL .Add('select * from table1'); Query1 .SQL .Add('where field2= ar1'); Query1 .Params[0]. Value :=4; // Query1.ExecSQL ; Query1.Active :=true; end; Насчет Parameters.ParseSQL(st, true) - это типа подготовки к выполнению.....где st - это Query1.SQL.text А вообще это аналогично коду: Query1.Prepared:=true; Если я не прав , Баламут исправит... Это ж как-бы к нему вопрос
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Последний раз редактировалось Pitbull; 27.07.2007 в 13:19. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
при выполнении запроса в столбце "Дата сдачи" оставить даты, которые соответствуют введенному месяцу | klukva666 | Microsoft Office Access | 5 | 10.03.2008 17:52 |
При выполнении запроса из проекта пропадает связь с сервером | D-mon | БД в Delphi | 4 | 19.11.2007 12:24 |
Странная ошибка при выполнении | okolobaxa | Общие вопросы Delphi | 2 | 03.07.2007 00:47 |
Ошибка при выполнении запроса | Elena | БД в Delphi | 3 | 14.06.2007 15:13 |
Ошибка при выполнении запроса | Elena | БД в Delphi | 2 | 25.05.2007 16:19 |