Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Баламут Посмотреть сообщение
Может я чего-то не понимаю, но на мой взгляд логичнее будет сначала сформировать строку запроса, а уж затем присваивать значения параметрам. Это я о случае, когда ItemIndex = 1. Ну и написать что-то типа Parameters.ParseSQL(st, true) тоже совсем не помешает.
согласен с Баламутом... что естественно.... Но мне не понятен такой лексикон: Params[0].Name := 'NameStr1';
Params[0].AsString := combAuthor.Text;

Зачем так все усложнять? по-моему, params[0].value:=значение , вполне работает....
Насчет первой ошибки, то такая ошибка встречается, когда паришься с инжексами.... Например , напишешь params[1], а у тебя их всего 1...
Может, намудрил с этим....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 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
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 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.
Pitbull вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при выполнении запроса в столбце "Дата сдачи" оставить даты, которые соответствуют введенному месяцу 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