Текущий архив: 2004.08.08;
Скачать: CL | DM;
ВнизОшибка при выполнении динамического запроса Найти похожие ветки
← →
Pipl (2004-07-16 10:00) [0]Запрос:
Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
выдаёт ошибку: List index out of bounds (1)
Значение DBGrid1.Fields[0].Text при трассировке целое число.
← →
Курдль © (2004-07-16 10:03) [1]Нет параметра №1.
← →
Reindeer Moss Eater © (2004-07-16 10:04) [2]Ошибка при выполнении динамического запроса
До выполнения запроса дело вообще не доходит.
Так что это не ошибка при выполнении запроса.
← →
Pipl (2004-07-16 10:13) [3]мужики, можно тут по подробнее ПЛЗ
вот начало кода,
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:15) [4]тебе же сказали, что нет у тебя параметра с индексом 1
← →
stone © (2004-07-16 10:17) [5]
> Pipl (16.07.04 10:13) [3]
я подозреваю, что на этом этапе вообще параметров нет, т.к. у тебя CommandText присваивается уже после
← →
Курдль © (2004-07-16 10:18) [6]
> Запрос:
> Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
1. Это не запрос, а предложение Delphi. Где сам запрос?
2. Это худший вид работы с параметрами и полями - всё обезличено.
Я бы написал:
Form1.ClientDataSet2.ParamByName(имя_параметра").AsInteger := DBGrid1.DataSourse.DataSet.FieldByName("имя_поля").AsInteger;
И то при условии, что имя DataSet от меня кто-то специально скрывает :)
← →
Pipl (2004-07-16 10:19) [7]в ClientDataSet2 -> Params-> создано 2 параметра:
0 - DataVozvrat
1 - KodS
неужели ещчё где-то создают параметры??? (с индексом 1)
← →
stone © (2004-07-16 10:19) [8]И вдогонку, раз уж ты CommandText присваиваешь в ран-тайм, то и присваивай его вместе со значением, типа Kod = StrToInt(...)
← →
Соловьев © (2004-07-16 10:20) [9]
> Form1.ClientDataSet2.Params[1].Value := StrToInt(DBGrid1.Fields[0].Text);
> Form1.ClientDataSet12.CommandText:="Select * from TblVozvrat
> Where DataS = :DataVozvrat And Kod =:KodS";
поменять местами и учти что нумерация идет с 0 параметров
← →
Johnmen © (2004-07-16 10:22) [10]ClientDataSet2 <> ClientDataSet12
← →
Pipl (2004-07-16 10:38) [11]>Johnmen © (16.07.04 10:22) [10]
>ClientDataSet2 <> ClientDataSet12
косячёк, виноват каюсь, старая добрая не внематочность.
СПАСИБО!!!
← →
Pipl (2004-07-16 10:46) [12]Частично переписал код, топерча стал таким:
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 - нормальное целое число и при третьем проходе в цикле.
← →
Курдль © (2004-07-16 10:49) [13]Так у Вас опять параметры заполняются позже, чем появляются:
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:53) [14]DBGrid1.DataSource := Form1.DataSource10;
...
while...
StrToInt(DBGrid1.Fields[0].Text)-> это параметр из уже ранее сформированной таблы.
ошибка выходит только при третьем проходе цикла
← →
Курдль © (2004-07-16 11:01) [15]А вы можете работать с человеческими именами параметров, как в [6], или так и будете гадать на кофейной гуще?
← →
Соловьев © (2004-07-16 11:01) [16]
>
> StrToInt(DBGrid1.Fields[0].Text)-> это параметр из уже ранее
> сформированной таблы.
смысл? все равно никакой роли не играет, а только траблы
Страницы: 1 вся ветка
Текущий архив: 2004.08.08;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.037 c