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

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

Ошибка в SQL запросе?! [D5, IB6.x, dBase, FoxPro]


Страницы:   1 2 3 4

Sava ©   (2002-02-28 10:52:00) 

Уважаемы мастера, помогите всю голову разбил уже!
В кратце описываю что у меня есть:
Есть база (dDase), я пишу запрос чтоб получить записи за определенный период, период задается с помощью компонентов RxLib, а именно DateEdit, происходит следующая вещь, когда в результате запроса есть хоть одна запись, все замечательно, но вот когда результат пустой, т.е. условию не удовлетворяет ни одна запись вылетает ошибка, примерно вот такая: Translate Error. Value out of bounds.
Запрос примерно такой:

Select data, sum(kolvo) from prihod
where data between "22.02.2002" and "25.02.2002"
group by data

у меня два подозрения но что делать незнаю. Первое передаю дату как текс, хотя поле Data имеет тип "дата", и второе подозрение связанное с group by. Подскажите что делать????
Я SQL недавно осваивать начал, может я что не знаю?
Заранее благодарен!


Sava   (2002-02-28 14:11:00) [41]

>Shirson
Это уже пройденный этап. Не помогает.....
Если у вас это все работает, то я даже незнаю на что и думать!!!!
>Val
Еслиб это помогдо я бы часа три назад перестал народ напрягать:(((


Val   (2002-02-28 14:09:00) [42]

>Shirson © (28.02.02 14:00)
вот взял все и рассказал :)


Shirson   (2002-02-28 14:00:00) [43]

>Sava


procedure TForm1.Button1Click(Sender: TObject);
begin
query1.close;
query1.sql.text:="select data, mest, postav, sum(kolvo) "+
"from prihod where data between :Sdate and :Fdate "+
"group by data, mest, kateg, postav";
query1.parambyname("Sdate").asdate:=strtodate(dateedit1.text);
query1.parambyname("Fdate").asdate:=strtodate(dateedit2.text);
query1.Open;
end;


Sava   (2002-02-28 13:56:00) [44]

> Val
Спасибо обрадовал, но у меня такое ощущенье, что это тут не причем, выборку я получаю, проблеммы начинаются когда записей в выборке ноль.


Val   (2002-02-28 13:48:00) [45]

а..DBase..помнится, что-то у них не так было с короткми и полными датами..обратите внимание.


Sava   (2002-02-28 13:43:00) [46]

>Val
Нормально работал:) Ну почти нормально, но и Close & Open не помогают!!!
>iva
Намылил
>Johnmen
Внимание обратил, отсутствие пробелов не обнаружил (если только не считать до и после знака "+", насколько я понимаю это не критично)! Я Почему так динамически делаю, мне все равнокак хоть через параметры, все равно одна байда!!! Это просто первый вариант который я как могу коверкаю и ничего не получается:((


iva   (2002-02-28 13:38:00) [47]

Val, я понял, что влез не вовремя. С кем не бывает. А сейчас стало самому интересно ПОЧЕМУ ?


Val   (2002-02-28 13:33:00) [48]

>iva © (28.02.02 13:06)
Извините, не точно выразился, я обращался Sava © :)
>Sava ©
Закройте сначала квери перед очисткой, потом после добавления текста в SQL сделайте Open и НИКАКИХ ExecSQL,Active:=True;
Я поражаюсь как он вообще работал с ExecSQL.


Sava   (2002-02-28 13:23:00) [49]

>Johnmen
Close & Open тоже не помогают:)))
> iva
Щас покурю и намылю


Johnmen   (2002-02-28 13:22:00) [50]

И если так хочется динамически формировать запрос, то :

sql.Append("select data, mest, kateg, postav, sum(kolvo) from prihod ");
sql.Append("where data between ""+dateedit1.text+"" and "" + dateedit2.text+"" ");
sql.Append("group by data, mest, kateg, postav");

обрати внимание на отсутствующий у тебя пробел во второй строке !
это - в-третьих...


iva   (2002-02-28 13:21:00) [51]

ExecSQL для выполнения запроса на изменение базы (update, insert, delete)


Sava   (2002-02-28 13:20:00) [52]

Open, ExecSQL.....
Эффек один и тот-же. А в чем вообще разница между Open & ExecSQL?


Johnmen   (2002-02-28 13:17:00) [53]

Ну причем здесь Active:=false; ... Active:=true; ???!!!
Сначала - Close; потом - см.выше ! это во-вторых...


iva   (2002-02-28 13:17:00) [54]

Давай попробуем. Шли весь проект. Адрес найдешь?


Johnmen   (2002-02-28 13:14:00) [55]

>Sava © : повнимательней ! Open, а не ExecSQL - это во-первых...


Sava   (2002-02-28 13:13:00) [56]

> iva
Странно, отличий немного а каке разные результаты! Так в чем проблемма?


Sava   (2002-02-28 13:10:00) [57]

Вот код выдернут:
Если надо пришлю вообще весь проект, ничего не работает!!!

procedure TForm1.Button1Click(Sender: TObject);
begin
with query1 do
begin
Active:=false;
sql.Clear;
sql.Append("select data, mest, kateg, postav, sum(kolvo) from prihod ");
sql.Append("where data between ""+dateedit1.text+"" and "" + dateedit2.text+""");
sql.Append("group by data, mest, kateg, postav");
ExecSQL;
Active:=true;
end;

end;


iva   (2002-02-28 13:06:00) [58]

да в общем-то и кода то никакого нет

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.SQL.Clear;
Query1.SQL.Add("select sum(km2-km1),datepl from plist122001 ");
Query1.SQL.Add("where datepl between "+QuotedStr(DateEdit1.Text) +" and "+QuotedStr(DateEdit2.Text));
Query1.SQL.Add(" group by datepl");
Query1.Open;
end;

если поставить даты так, чтобы Query был пустым, никаких ошибок не возникает.


Val   (2002-02-28 12:51:00) [59]

давайте код


iva   (2002-02-28 12:37:00) [60]

Только что написал все что по твоим словам сделано у тебя. Все работает без проблем. По-правде сказать никак не могу понять что у тебя не так.


Страницы:   1 2 3 4

Наверх

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