Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при выполнении динамического запроса [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо