![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при выполнении динамического запроса [D7, Access]
Pipl © (2004-07-16 10:00:00)Запрос:
Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
выдаёт ошибку: List index out of bounds (1)
Значение DBGrid1.Fields[0].Text при трассировке целое число.
Курдль (2004-07-16 11:01:00) [1]А вы можете работать с человеческими именами параметров, как в [6], или так и будете гадать на кофейной гуще?
Соловьев (2004-07-16 11:01:00) [2]
>
> StrToInt(DBGrid1.Fields[0].Text)-> это параметр из уже ранее
> сформированной таблы.
смысл? все равно никакой роли не играет, а только траблы
Pipl (2004-07-16 10:53:00) [3]DBGrid1.DataSource := Form1.DataSource10;
...
while...
StrToInt(DBGrid1.Fields[0].Text)-> это параметр из уже ранее сформированной таблы.
ошибка выходит только при третьем проходе цикла
Курдль (2004-07-16 10:49:00) [4]Так у Вас опять параметры заполняются позже, чем появляются:
Form1.ClientDataSet13.Params[2].AsInteger := StrToInt(DBGrid1.Fields[0].Text);
Form1.ClientDataSet13.CommandText:='Select * from TblVozvrat Where DataS = :DataV And Kod =:KodR';
Pipl (2004-07-16 10:46:00) [5]Частично переписал код, топерча стал таким:
Form1.ClientDataSet13.Params[0].Value :=DateTostr(DateTimePicker4.Date);
Form1.DBGrid1.DataSource := Form1.DataSource13;
DBGrid1.DataSource.DataSet.First;
While not DBGrid1.DataSource.DataSet.Eof do
Begin
Form1.ClientDataSet13.Close;
Form1.ClientDataSet13.Params[2].AsInteger := StrToInt(DBGrid1.Fields[0].Text);
Form1.ClientDataSet13.CommandText:='Select * from TblVozvrat Where DataS = :DataV And Kod =:KodR';
Form1.ClientDataSet13.Aggregates[0].Expression:='Sum(Kol)';
Form1.ClientDataSet13.Aggregates[0].Active := True;
Form1.ClientDataSet13.AggregatesActive:= True;
Form1.ClientDataSet13.Open;
DBGrid1.DataSource.DataSet.Edit;
DBGrid1.Fields[4].Text :=VarToStr(Form1.ClientDataSet12.Aggregates[0].Value) ;
DBGrid1.DataSource.DataSet.Post;
DBGrid1.DataSource.DataSet.Next;
End;
при первом и втором проходе в цикле While работает, при третьем проходе, выдаёт List index out of bounds (2)
на трассировке DBGrid1.Fields[0].Text - нормальное целое число и при третьем проходе в цикле.
Pipl (2004-07-16 10:38:00) [6]>Johnmen © (16.07.04 10:22) [10]
>ClientDataSet2 <> ClientDataSet12
косячёк, виноват каюсь, старая добрая не внематочность.
СПАСИБО!!!
Johnmen (2004-07-16 10:22:00) [7]ClientDataSet 2<> ClientDataSet 12
Соловьев (2004-07-16 10:20:00) [8]
> Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
> Form1.ClientDataSet12.CommandText:='Select * from TblVozvrat
> Where DataS = :DataVozvrat And Kod =:KodS';
поменять местами и учти что нумерация идет с 0 параметров
Pipl (2004-07-16 10:19:00) [9]в ClientDataSet2 -> Params-> создано 2 параметра:
0 - DataVozvrat
1 - KodS
неужели ещчё где-то создают параметры??? (с индексом 1)
stone (2004-07-16 10:19:00) [10]И вдогонку, раз уж ты CommandText присваиваешь в ран-тайм, то и присваивай его вместе со значением, типа Kod = StrToInt(...)
Курдль (2004-07-16 10:18:00) [11]
> Запрос:
> Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
1. Это не запрос, а предложение Delphi. Где сам запрос?
2. Это худший вид работы с параметрами и полями - всё обезличено.
Я бы написал:
Form1.ClientDataSet2.ParamByName(имя_параметра').AsInteger := DBGrid1.DataSourse.DataSet.FieldByName('имя_поля').AsInteger;
И то при условии, что имя DataSet от меня кто-то специально скрывает :)
stone (2004-07-16 10:17:00) [12]
> Pipl (16.07.04 10:13) [3]
я подозреваю, что на этом этапе вообще параметров нет, т.к. у тебя CommandText присваивается уже после
Reindeer Moss Eater (2004-07-16 10:15:00) [13]тебе же сказали, что нет у тебя параметра с индексом 1
Pipl (2004-07-16 10:13:00) [14]мужики, можно тут по подробнее ПЛЗ
вот начало кода,
DBGrid1.DataSource := Form1.DataSource10;
Form1.ClientDataSet10.Close;
Form1.ClientDataSet10.CommandText:='Select * from TblVozvratAllTemp';
Form1.ClientDataSet10.Open;
DBGrid1.DataSource.DataSet.First;
...
Form1.DBGrid1.DataSource := Form1.DataSource12;
DBGrid1.DataSource.DataSet.First;
While not DBGrid1.DataSource.DataSet.Eof do
Begin
Form1.ClientDataSet12.Close;
Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
Form1.ClientDataSet12.CommandText:='Select * from TblVozvrat Where DataS = :DataVozvrat And Kod =:KodS';
...
Reindeer Moss Eater (2004-07-16 10:04:00) [15]Ошибка при выполнении динамического запроса
До выполнения запроса дело вообще не доходит.
Так что это не ошибка при выполнении запроса.
Курдль (2004-07-16 10:03:00) [16]Нет параметра №1.