Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.10.2009, 13:42
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию Поиск по дате

Добрый день!
Имеется таблица отраженная в DBGrid с полями: номер п/п, Дата поступления, Организация и т.д., необходимо организовать поиск с такой-то по такую-то дату по такой-то организации. Поиск по организации работает, а вот как к нему еще и поиск в интервале дат добавить...........
Вот код поиска по организации:
Код:
DataModule4.FindQuery.Active:=false;
DataModule4.FindQuery.SQL.Clear;
DataModule4.FindQuery.SQL.Add('SELECT *');
DataModule4.FindQuery.SQL.Add('FROM Таблица');
DataModule4.FindQuery.SQL.Add('WHERE Кто LIKE '''+FindEdit.Text+'''' );
DataModule4.FindQuery.Active:=true;
Form12.ShowModal;
Подскажите, пожалуйста!

Последний раз редактировалось Admin, 13.10.2009 в 13:56.
Ответить с цитированием
  #2  
Старый 13.10.2009, 18:58
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Наверное так:
Код:
DataModule4.FindQuery.SQL.Add('WHERE Кто LIKE '''+FindEdit.Text+'''' );
DataModule4.FindQuery.SQL.Add('and MyDate between :StartDate and :FinishDate');
DataModule4.FindQuery.Parameters.ParamValue['StartDate'] := StartDate;
DataModule4.FindQuery.Parameters.ParamValue['FinishDate'] := FinishDate;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.10.2009, 14:15
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

Извините за глупые вопросы, но я еще новичок в этом деле. Можно подробней расписать что и как делать. При компиляции выдает ошибки:

[Error] Unit3.pas(98): Undeclared identifier: 'ParamValue'
[Error] Unit3.pas(98): Undeclared identifier: 'StartDate'
[Error] Unit3.pas(99): Undeclared identifier: 'ParamValue'
[Error] Unit3.pas(99): Undeclared identifier: 'FinishDate'
[Fatal Error] NalogProject.dpr(17): Could not compile used unit 'Unit3.pas'
Ответить с цитированием
  #4  
Старый 14.10.2009, 15:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Для подробного ответа нужен подробный вопрос.
Как подключаетесь к базе Ado,BDE или что-то третье?
Какая структура таблицы, перечень основных полей их типов и для чего они.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 14.10.2009, 17:01
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

БД в Access, подключена через ADO.
В ней 6 таблиц: ТаблицаГИБДД, ТаблицаИнспектор, ТаблицаКонторы, ТаблицаОрг, ТаблицаОрганизациижд, ТаблицаОрганизаций.
ТаблицаГИБДД:
Номер п/п – числовой
Дата поступления в ИФНС – Дата/время
Кто - текстовый
Кому - текстовый
Дата ТТН – Дата/время
Номер ТТН - текстовый
ФИО Водителя - текстовый
Наименование груза - текстовый
Количество груза - текстовый
Инспектор - текстовый
Примечание – текстовый.
В Delphi это отражено в таблице DBGrid, в эту таблицу пользователь заносит данные. На форме также имеется поле TEdit (FindEdit), в которое нужно занести наименование организации и кнопка Найти. Еще необходимо создать поля для дат (подскажите как лучше сделать, какой тип для поля ‘Дата поступления в ИФНС’ поставить в Access), чтоб пользователь мог сделать выборку за определенный период по определенной организации. По кнопке Найти результат выборки отражается в другой форме.
Ответить с цитированием
  #6  
Старый 15.10.2009, 10:48
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Переменные StartDate и FinishDate не объявил, вот и ругается. И последние 2 строчки так напиши:
Код:
DataModule4.FindQuery.Parameters.ParamByName('StartDate').Value := StartDate;
DataModule4.FindQuery.Parameters.ParamByName('FinishDate').Value := FinishDate;

Последний раз редактировалось TOJluK, 15.10.2009 в 15:37.
Ответить с цитированием
  #7  
Старый 15.10.2009, 15:00
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

Даты и наименование организации вводятся в поля TEdit.
Запускаю программу, пытаюсь сделать запрос, выдает такую ошибку:
Project NalogProject.exe raised exception class EOLEException with message ‘Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения’. Process stopped. Use Step or Run to continue.
Помогите, пожалуйста разобраться начинающему!
Ответить с цитированием
  #8  
Старый 15.10.2009, 15:38
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Проверь формат вводимой даты. Покажи че ты вводишь, как передаешь из TEdit параметры и финальный код (на всякий случай) выложи. Там и посмотрим.
Ответить с цитированием
  #9  
Старый 15.10.2009, 16:29
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

Выкладываю Unit и db2.mdb
Вложения
Тип файла: rar !.rar (19.6 Кбайт, 15 просмотров)
Ответить с цитированием
  #10  
Старый 15.10.2009, 17:15
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Тип переменных:
Код:
StartDate: TdateTime;
FinishDate: TdateTime;
В переменные StartDate и FinishDate надо передать значения:
Код:
// в таком случае надо в TEdit вводить "правильную дату"
// или использовать маску
// или заменить Edit на DateTimePicker
StartDate:=StrToDate(Edit1.Text);
FinishDate:=StrToDate(Edit2.Text);
После уже работайте с FindQuery
Ответить с цитированием
  #11  
Старый 16.10.2009, 09:29
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

Ни как не хочет искать!!!
Project NalogProject.exe raised exception class EOleException with message ‘Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘Кто LIKE’ООО ЛПК’ and Дата поступления в ИФНС between ? and ?”. Process stopped. Use Step or Run to continue.

В FindQuery в свойстве Parameters пусто, в свойстве SQL следующий запрос:
SELECT *
FROM ТаблицаГИБДД
А по кнопке Найти конкретизируем что надо найти:
Код:
procedure TForm3.SpeedButton5Click(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 Кто LIKE '''+FindEdit.Text+'''' );
DataModule4.FindQuery.SQL.Add('and Дата поступления в ИФНС between :StartDate and :FinishDate');
StartDate:=StrToDate(Edit1.Text);
FinishDate:=StrToDate(Edit2.Text);
DataModule4.FindQuery.Parameters.ParamByName('StartDate').Value := StartDate;
DataModule4.FindQuery.Parameters.ParamByName('FinishDate').Value := FinishDate;
DataModule4.FindQuery.Active:=true;
Form12.ShowModal;
end;
Admin: Не забываем про теги, иначе последуют санкции!
Вложения
Тип файла: rar Unit3.rar (1.5 Кбайт, 12 просмотров)

Последний раз редактировалось Admin, 16.10.2009 в 10:54.
Ответить с цитированием
  #12  
Старый 16.10.2009, 10:56
Babuca Babuca вне форума
Прохожий
 
Регистрация: 09.08.2009
Сообщения: 27
Репутация: 10
По умолчанию

ну пока попробуй такой код.
Код:
DataModule4.FindQuery.Close;
DataModule4.FindQuery.SQL.Clear;
DataModule4.FindQuery.SQL.Add('SELECT * FROM ТаблицаГИБДД');
DataModule4.FindQuery.SQL.Add('WHERE Кто LIKE :Findword );
DataModule4.FindQuery.SQL.Add('and Дата поступления в ИФНС between :StartDate and :FinishDate');

DataModule4.FindQuery.Parameters.ParamByName('Findword').Value := FindEdit.Text;
DataModule4.FindQuery.Parameters.ParamByName('Star tDate').Value := DateTimePicker1.Date;
DataModule4.FindQuery.Parameters.ParamByName('Fini shDate').Value := DateTimePicker2.Date;

DataModule4.FindQuery.Open;
//Form12.ShowModal;

Ответить с цитированием
  #13  
Старый 16.10.2009, 11:39
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

Объясните, пожалуйста, что значит:
DataModule4.FindQuery.SQL.Add('WHERE Кто LIKE :Findword );
Может у кого-нибудь есть рабочий примерчик?
Ответить с цитированием
  #14  
Старый 16.10.2009, 12:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Код:
'and Дата поступления в ИФНС between :
Вот это 100% будет ошибку вызывать. Поля разделенные пробелом надо заключать в скобки.
Код:
'and [Дата поступления в ИФНС] between :
Код:
DataModule4.FindQuery.Parameters.ParamByName('Star tDate').Value := DateTimePicker1.Date;
DataModule4.FindQuery.Parameters.ParamByName('Fini shDate').Value := DateTimePicker2.Date;
А это что еще за пробелы в параметре?

Цитата:
Объясните, пожалуйста, что значит:
DataModule4.FindQuery.SQL.Add('WHERE Кто LIKE :Findword );
Может у кого-нибудь есть рабочий примерчик?
Значит это, что надо выбрать данные в которых значение в поле [Кто] похоже на значение переданное в параметре Findword
Например если Findword будет равно '%ванов' то получим выборку всех [Кто] котрые заканчиваются на 'ванов'
Вообще, вы творите ошибки существенно быстрее чем успеваете исправить старые. Сначала заставьте правильно работать старый код, а уже потом что-то от себя добавляйте.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 16.10.2009 в 12:57.
Ответить с цитированием
  #15  
Старый 16.10.2009, 12:56
Len@09 Len@09 вне форума
Прохожий
 
Регистрация: 13.10.2009
Сообщения: 21
Репутация: 10
По умолчанию

Огромное спасибо! Все заработало!!!!!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter