Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2008, 16:12   #101
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Берем промежуток дат и делаем SQL запрос (between).
Начальная дата - EncodeDate(y,m,1)
Конечная - EncodeDate(y,m+1,1) - нужна проверка, чтобы m<=11
И накладываем 3-е условие - Distribbool.value=false.
Все.
mihali4 вне форума Ответить с цитированием
Старый 28.11.2008, 16:25   #102
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

mihali4, а могли бы вы сделать на примере моего приложения этот запрос?
Просто я неоднократно писал, что я не совсем понимаю как можно работать с функциями типа EncodeDate в запросе.


Например. Удалить записи за январь 2008 года.

Как я могу указать год и месяц в запросе такого типа:

DELETE * FROM Distrib WHERE (как тут указать декодированный месяц или год) AND Distribbool.value=false

Последний раз редактировалось Arkuz; 28.11.2008 в 16:32.
Arkuz вне форума Ответить с цитированием
Старый 28.11.2008, 16:43   #103
Mitriy08
Пользователь
 
Регистрация: 11.07.2008
Сообщений: 91
По умолчанию

Код:
....
var
DeleteQuery : TADOQuery;
DeleteSQL : String;
begin
//Формируем строку запроса на удаление
......
//MyDate - поле из таблицы

DeleteSQL := 'Delete from MyTable where Year(MyDate)=2008  AND MONTH(Mydate) = 1  and MyBit = False';
DeleteQuery := TADOQuery.Create(Self);
With DeleteQuery do
begin
     Close;
     Connection := MyADOConnection;
     SQL.Clear;
     SQL.ADD(DeleteSQL);
     ExecSQL;
     free;
end;
КакойтотамТable.refresh;
end;
Ну сформировать строку запроса я думаю вы сможете сами...
Mitriy08 вне форума Ответить с цитированием
Старый 28.11.2008, 16:52   #104
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как можно работать с функциями типа EncodeDate в запросе
???
Цитата:
Начальная дата - EncodeDate(y,m,1)
Конечная - EncodeDate(y,m+1,1) - нужна проверка, чтобы m<=11
Т.е. datebegin:=EncodeDate(y,m,1); dateend:=EncodeDate(y,m+1,1);
SQL:=...where DateOfBegin>='+DateToStr(datebegin) +' and DateOfBegin<'+DateToStr(dateend) and Distribbool=False...
mihali4 вне форума Ответить с цитированием
Старый 28.11.2008, 21:03   #105
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо з-а помощь...
Arkuz вне форума Ответить с цитированием
Старый 29.11.2008, 15:57   #106
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Это снова я....

Нужно сделать запрос для отчёта: Список должников (фио, адрес, место работы) группировка по месту работы.

Так вот... Сделал я такой запрос... Только без группировки...

Код:
SELECT  Readers.Name, Streets.Street, Works.Work
FROM Distribution, Readers, Streets, Works  WHERE Distribution.DateOfReal is null
AND Readers.AddressID=Streets.AddressID
AND Readers.WorkID=Works.WorkID
AND Readers.ReaderID=Distribution.ReaderID
Когда в конструкторе делфи ставлю свойство Active в true, в гриде отображается 2 должника - всё правильно. Но когда пытаюсь запустить происходит ошибка. Прикрепил имагу - Error1.

А при таком варианте:

Код:
SELECT  Readers.Name, Streets.Street, Works.Work
FROM Distribution, Readers, Streets, Works  WHERE Distribution.DateOfReal is null
AND Readers.AddressID=Streets.AddressID
AND Readers.WorkID=Works.WorkID
AND Readers.ReaderID=Distribution.ReaderID
GROUP BY Works.Work
Когда в конструкторе делфи ставлю свойство Active в true, сразу появляется вот эта ошибка - Error2.

Подскажите что делать... Файл проекта прикрепляю...
Изображения
Тип файла: jpg Error1.jpg (23.7 Кб, 149 просмотров)
Тип файла: jpg Error2.jpg (16.4 Кб, 122 просмотров)
Вложения
Тип файла: rar db.rar (705.8 Кб, 27 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 29.11.2008, 17:56   #107
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Когда в конструкторе делфи ставлю свойство Active в true
У кого "ставлю свойство Active в true"? Или мне сидеть и гадать, какой такой квэрик у вас неизвестно когда неизвестно чем запускается?
mihali4 вне форума Ответить с цитированием
Старый 29.11.2008, 18:58   #108
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Извините совсем забыл... ReportDolgQuery...
Arkuz вне форума Ответить с цитированием
Старый 30.11.2008, 02:31   #109
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Нужно сделать запрос для отчёта: Список должников (фио, адрес, место работы) группировка по месту работы.
Так вот. Сделал я такой запрос. Только без группировки.
...
Когда в конструкторе делфи ставлю свойство Active в true, в гриде отображается 2 должника - всё правильно. Но когда пытаюсь запустить происходит ошибка. Прикрепил имагу - Error1.
Во-первых, репорт вы формируете по нажатию:
Код:
procedure TMainForm.BitBtn3Click(Sender: TObject);
begin
 DataModule2.DolgQuery.Active:=true;
...
Почему DataModule2.DolgQuery.Active:=true; ???
По логике-то - DataModule2.ReportDolgQuery.Active:=true;
Во-вторых - почему у ReportDolgQuery на событии AfterScroll висит DolgQueryAfterScroll?
Именно тут у вас и возникает AccessViolation.

Цитата:
А при таком варианте:
SELECT Readers.Name, Streets.Street, Works.Work
FROM Distribution, Readers, Streets, Works WHERE Distribution.DateOfReal is null
AND Readers.AddressID=Streets.AddressID
AND Readers.WorkID=Works.WorkID
AND Readers.ReaderID=Distribution.Reade rID
GROUP BY Works.Work
Когда в конструкторе делфи ставлю свойство Active в true, сразу появляется вот эта ошибка - Error2.
Потому что запрос не может группировать записи из таблицы Readers по полю Work - в ней нет такого поля...
Нужно ... GROUP BY Works.Work, Readers.Name, Streets.Street

И еще. Будьте аккуратнее при назначении очередности открывания таблиц базы. Зачастую возникает ситуация, когда, например, любимое ваше AfterScroll будет ссылаться на поля еще не открытой таблицы - получите AccessViolation...

З.Ы. Совсем забыл... Первое, что я сделал, открыв ваш проект - поменял местами строки, сделав:
Код:
  Application.CreateForm(TDataModule2, DataModule2);
  Application.CreateForm(TMainForm, MainForm);
Я уже упоминал об этом, вы забыли.
Представьте себе, что по событию формы OnCreate вы захотите, ну, например, открыть какую-то таблицу. Что будет? Верно - AccessViolation, поскольку таблицы еще не существует - датамодуль не создан...

Последний раз редактировалось mihali4; 30.11.2008 в 12:10.
mihali4 вне форума Ответить с цитированием
Старый 30.11.2008, 18:17   #110
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Когда в конструкторе делфи ставлю свойство Active в true
Это я делаю для проверки корректности запроса, чтобы проект не компилировать...

Цитата:
Почему DataModule2.DolgQuery.Active:=true; ???
По логике-то - DataModule2.ReportDolgQuery.Active: =true;
Это очепятка...

Цитата:
Во-вторых - почему у ReportDolgQuery на событии AfterScroll висит DolgQueryAfterScroll?
Это тоже мой косяк... Я просто скопировал DolgSource и DolgQuery...

Цитата:
И еще. Будьте аккуратнее при назначении очередности открывания таблиц базы. Зачастую возникает ситуация, когда, например, любимое ваше AfterScroll будет ссылаться на поля еще не открытой таблицы - получите AccessViolation...
Ну это я учту... Просто вы сами мне говорили, что в моём примере Таблица Distribution и так тянет за собой остальные таблицы...

Цитата:
З.Ы. Совсем забыл... Первое, что я сделал, открыв ваш проект - поменял местами строки, сделав:
Application.CreateForm(TDataModule2 , DataModule2);
Application.CreateForm(TMainForm, MainForm);
Я уже упоминал об этом, вы забыли.
Представьте себе, что по событию формы OnCreate вы захотите, ну, например, открыть какую-то таблицу. Что будет? Верно - AccessViolation, поскольку таблицы еще не существует - датамодуль не создан...
Спсибо... Я об этом даже не подумал как-то....

Спасибо за помощь... И последний вопрос...

А что же здесь происходит:
GROUP BY Works.Work, Readers.Name, Streets.Street

По какому полю группировка идёт? Я что-то не совсем понимаю...
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
библиотека Free Internet Titan123 Свободное общение 7 20.08.2008 15:19
Библиотека для Delphi Irat Помощь студентам 2 12.02.2008 20:13
Моя библиотека mochaliviy Свободное общение 3 11.01.2008 13:23
библиотека TK и Ruby kpp2 Ruby 5 22.12.2007 02:02
Стандартная библиотека... Sota Общие вопросы C/C++ 3 17.07.2007 19:18