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

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

Запрос SQL в Делфи [D5, MSSQL]


Drozdov A ©   (2004-08-30 09:36:00) 

Уважаемые Мастера, помогите плиз составить запрос !
Есть таблица с данными.
Есть два поля квартал и год (kvar, god).
Мне нужно выбрать все те записи, которые удовлетворяют следующему условию: К примеру сегодня 30.08.04.
08 месяц - это 3 квартал. Так вот мне нужно выбрать все записи, которые в поле квартал равны 3 и соотвественно поле год = 04.
Также нужно выбирать записи 3-го квартала, если ещё 3 квартал не наступил за 15 дней. Т.е. если сегодня не 30 августа, а 16 июня.


Drozdov A   (2004-08-31 13:54:00) [1]

вроде разобрался...
Сделал отдельный на форме ДБГРИД и новый ДАТАСОУРС с КВЕРИ и потом всё пошло.
Видать, шо-то у меня было не в порядке ранее с Датасоурсом, Квери или Дбгридом, но вот что это для меня непостижимо.
Всё-равно всем спасибо.


KSergey   (2004-08-31 12:35:00) [2]

Короче, кинь Memo и Memo.Lines.Text := Query2.SQL.Text;

Вот и cкопируешь потом из Memo


sniknik   (2004-08-31 11:59:00) [3]

Drozdov A   (31.08.04 11:55) [14]
переменную s (и всю операцию s:=Form1.Query2.Sql.Text) скорее всего выкинул оптимизатор, ты ее нигде больше не используеш, вот оно и не ставится.
отключи ее (оптимизацию), либо после гденибудь используй в полезном действии Label1.Caption:= s например.


Drozdov A   (2004-08-31 11:55:00) [4]

...нажимаю Ctrl+F7 пишет там
s:=Form1.Query2.Sql.Text (process not accessible)


Ega23   (2004-08-31 11:48:00) [5]

До опена поставь s:=Form1.Query2.Sql.Text;, на ней же - точку останова, дальше либо через Ctrl+F7, либо через WatchList->AddWatch


Drozdov A   (2004-08-31 11:39:00) [6]

((sled_god < YEAR(GETDATE())) and (sled_kvar <> 0))
не прокатило, тоже самое...

а как скопировать значение точки останова
я после опена поставил  
s:=Form1.Query2.Sql.Text;
ну и гляжу его...
там много писать надо...
а как скопировать ? Не подскажете ?


Ega23   (2004-08-31 11:27:00) [7]

Попробуй
((sled_god < YEAR(GETDATE())) and (sled_kvar <> 0))


Drozdov A   (2004-08-31 11:24:00) [8]

WITH нет
Сократил свой запрос, но всё-равно ругаеца также...
Если убираю  WHERE     (sled_god < YEAR(GETDATE()) and sled_kvar <> 0) , то запрос выполняеца без проблем

procedure TForm1.Button2Click(Sender: TObject);
begin
 Query2.close;
 Query2.SQL.clear;
 Query2.SQL.Add('        SELECT     * ');
 Query2.SQL.Add('        FROM         Baza_Metro ');
 Query2.SQL.Add('        WHERE     (sled_god < YEAR(GETDATE()) and sled_kvar <> 0) ');
 Query2.open;
 Query2.First;
end;

Пробовал Form1.Query2.Sql.Text ставить
терь не понимает шо такое FORM1 ....


KSergey   (2004-08-31 11:24:00) [9]

Да проще переменную определи s:string и ей присвой Sql.Text перед Open - тогда не будет проблем и ошибок (в прочтении). Ну а как текст получишь - так сам его смотри. Ну или сюда...


Ega23   (2004-08-31 11:15:00) [10]

Почему сразу Form1? Может DataModule?


roottim   (2004-08-31 11:13:00) [11]

а если Form1.Query2.Sql.Text


Ega23   (2004-08-31 11:11:00) [12]

Может у тебя With какой-нибудь выше стоит?


Drozdov A   (2004-08-31 10:39:00) [13]

> Query2.SQL.Add('   end ');
я убрал... ошибся

1. query2.Active:=True; - это лишнее, ты уже сделал Open.
- убрал
2. По-моему ты скобку где-то пропустил.
- проверял, вроде всё пучком...лишних нет

3. Поставь breakpoint на Query2.Open и через Ctrl+F7 посмотри значение Query2.Sql.Text. Значение выложи сюда.
- тут чуток загруз
поставил точку основа на Квери2.Опен, нажал Ctrl+F7 выдало мне окошко с заглавием Evaluate/Modify там в Expression я ввёл  Query2.Sql.Text в Rezult мне выдало
Undeclared identifier: 'Query2'


KSergey   (2004-08-31 09:32:00) [14]

> Query2.SQL.Add('   end ');

Это что такое и зачем??


Ega23   (2004-08-31 09:23:00) [15]

1. query2.Active:=True; - это лишнее, ты уже сделал Open.
2. По-моему ты скобку где-то пропустил.
3. Поставь breakpoint на Query2.Open и через Ctrl+F7 посмотри значение Query2.Sql.Text. Значение выложи сюда.


Drozdov A   (2004-08-31 09:16:00) [16]

В Квери Анализере у меня всё получилось...
Спасибо !
Но переношу этот код в ДЕЛФИ
 Query2.close;
 Query2.SQL.clear;
 Query2.SQL.Add('        SELECT     * ');
 Query2.SQL.Add('        FROM         Baza_Metro ');
 Query2.SQL.Add('        WHERE     (sled_god < YEAR(GETDATE()) ');
 Query2.SQL.Add('                  and sled_kvar <> 0) ');
 Query2.SQL.Add('                  or (sled_god = YEAR(GETDATE()) ');
 Query2.SQL.Add('                  and sled_kvar <= (MONTH(GETDATE()) - 1) / 3 + 1) ');
 Query2.SQL.Add('        order by uchas, zav_nom ');
 Query2.SQL.Add('   end ');
 Query2.open;
 query2.Active:=True;
 Query2.First

и мне выдаёт ошибку..
'invalid use of keyword.
Token: YEAR(GETDATE())
Line Number: 3' Process stopped......


Ega23   (2004-08-30 09:48:00) [17]


Select * from Table1
where god=Year(getdate()) and
kvar=((Month(gatdate())-1)/3)+1


Наверх

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