Главная страница
    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.48 MB
Время: 0.037 c
6-1086354999
Viland
2004-06-04 17:16
2004.08.08
Глюк с TClientSocket


14-1090311478
Moses Fender
2004-07-20 12:17
2004.08.08
DNS


3-1089558405
Nurali
2004-07-11 19:06
2004.08.08
Запрос


1-1090421004
курсор
2004-07-21 18:43
2004.08.08
Про мышку


8-1084714750
killer
2004-05-16 17:39
2004.08.08
как mod перевести в mp3 ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский