Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.03 c
14-1090369326
Soft
2004-07-21 04:22
2004.08.08
Интернет - необходимость или роскошь?


14-1089100382
Глеб
2004-07-06 11:53
2004.08.08
Изготовление справочной системы


3-1089392505
Piero
2004-07-09 21:01
2004.08.08
параметр процедуры - таблица


4-1087836255
Игорь
2004-06-21 20:44
2004.08.08
включение/отключение брандмауэра WinXp


4-1088159657
pavel_guzhanov
2004-06-25 14:34
2004.08.08
Как прочитать данные с PCI шины?