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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 11:42   #1
Len@09
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 28
По умолчанию Поиск по дате

Добрый день!
БД в Access подключенная через ADO в Delphi. На форме есть таблица DBGrid, в которую пользователь заносит данные таким образом: нажимает кнопку Добавить запись, появляется форма для воода данных. Поля для заполнения: Дата поступления в ИФНС, Грузоотправитель, Грузополучатель, Дата ТТН, Номер ТТН и т.д. После заполнения всех полей формы, данные переносятся в таблицу DBGrid. Мне необходимо организовать поиск по полю Дата поступления в ИФНС. Для поиска я создала отдельную форму, на которой расположены: MonthCalendar, DBEdit1 (вводим начальную дату через календарь), DBEdit2 (вводим конечеую дату), SpeedButton1. Код на кнопку SpeedButton1 такой:
Код:
procedureTForm15.SpeedButton1Click(Sender:TObject);
var
StartDate:TdateTime;
FinishDate:TdateTime
begin
DataModule4.FindQuery.Active:=false;
DataModule4.FindQuery.SQL.Clear;
DataModule4.FindQuery.SQL.Add('SELECT*');
DataModule4.FindQuery.SQL.Add('FROM Таблица ГИБДД');
DataModule4.FindQuery.SQL.Add('Where [Дата поступления в ИФНС] between :StartDate and: FinishDate');
StartDate:=StrToDate(DBEdit1.Text);
FinishDate:=StrToDate(DBEdit2.Text);
DataModule4.FindQuery.Parameters.ParamByName ('StartDate').Value:= StartDate;
DataModule4.FindQuery.Parameters.ParamByName ('FinishDate').Value:= FinishDate;
DataModule4.FindQuery.Activ:=true;
Form12.ShowModal;
end;
Для DBEdit1 в свойстве DataSourse я указала DataModule4.DataSource1, в свойстве DataField указала поле Дата поступления в ИФНС.
Для DBEdit2 я указала все тоже самое что и для DBEdit1. Правильно ли это?
Пытаюсь осуществить поиск мне выдает ошибку: ProjectNalogProject.exe raised exception class EAccessViolation with message Access Violation at adress 004AF0A8 in module NalogProject.exe. Read off adress 00000240. Process stopped. Use step or Run to continue.
Len@09 вне форума Ответить с цитированием
Старый 12.02.2010, 12:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не согласен...
DBEdit'ы могут начать тебе редактировать базу.
Избавься от них и поставь обыные Эдиты, ты же все равно их свойства в запрос подставляешь, зато проблем с БД быть не должно.
Используй простые Эдиты. Или еще лучше - MaskEdit. в которых настрой формат ввода, чтоб пользователь лишнего ченить не ввел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2010, 13:17   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Я обычно для ввода даты использую компонент TDateTimePicture
Код:
DataModule4.FindQuery.Parameters.ParamByName ('StartDate').AsDate:= DateTimePicker1;
DataModule4.FindQuery.Parameters.ParamByName ('FinishDate').AsDate:= DateTimePicker2;

Последний раз редактировалось SERG1980; 12.02.2010 в 13:19.
SERG1980 вне форума Ответить с цитированием
Старый 12.02.2010, 14:20   #4
Len@09
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 28
По умолчанию

Stilet, я поставила эдиты. Загвоздка теперь с этим:
Код:
procedure TForm15.MonthCalendar1DblClick (Sender:TObject);
begin
if MonthCalendar1.Tag=0 then exit;
(self.FindComponent ('Edit' + IntToStr (MonthCalendar1.Tag)) as Edit).DataSourse.DataSet.Edit;
(self.FindComponent ('Edit' + InttoStr (MonthCalendar1.Tag)) as TEdit).Text:=DatetoStr (MonthCalendar1.Date);
(self.FindComponent ('Edit' + InttoStr (MonthCalendar1.Tag)) as TEdit).DataSourse.DataSet.Post;
MonthCalendar1.Visible:=falshe;
end;
.
А у Editов нет свойства DataSourse. Подскажите, как написать правильно
Len@09 вне форума Ответить с цитированием
Старый 12.02.2010, 14:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пуф....
Я чет не понял твоей стратегии...
Тебе нужно чтоб в Эдиты вбивалась дата выбранная в календаре? Тогда
Код:
procedure TForm15.MonthCalendar1DblClick (Sender:TObject);
var e:tedit;
begin
 e:=FindComponent ('Edit' + IntToStr (TMonthCalendar(sender).Tag);
 if e<>nil then e.text:=DateToStr(TMonthCalendar(sender).Date);
end;
Это кстати один обработчик на все календари, он сам будет определять какой календарь редактируется.
Или ты что хочешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2010, 14:48   #6
Len@09
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 28
По умолчанию

именно так. Только что то на эту строку ругается: e:=FindComponent ('Edit' + IntToStr (TMonthCalendar(sender).Tag);
Len@09 вне форума Ответить с цитированием
Старый 12.02.2010, 15:01   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а там я ев конце скобку одну пропустил похоже )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по дате-? Evgenii БД в Delphi 15 12.11.2009 16:46
Поиск по пустой дате yulia БД в Delphi 3 27.08.2009 16:53
Поиск по дате. в чем ошибка?? missy БД в Delphi 6 20.06.2008 13:06
Поиск по дате создания файла kayman БД в Delphi 1 14.09.2007 14:54
как организовать поиск по дате... Pitbull БД в Delphi 18 24.06.2007 22:28