|
#1
|
|||
|
|||
Поиск по дате
Добрый день!
Имеется таблица отраженная в 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
|
||||
|
||||
Наверное так:
Код:
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
|
|||
|
|||
Извините за глупые вопросы, но я еще новичок в этом деле. Можно подробней расписать что и как делать. При компиляции выдает ошибки:
[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
|
||||
|
||||
Для подробного ответа нужен подробный вопрос.
Как подключаетесь к базе Ado,BDE или что-то третье? Какая структура таблицы, перечень основных полей их типов и для чего они. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
БД в Access, подключена через ADO.
В ней 6 таблиц: ТаблицаГИБДД, ТаблицаИнспектор, ТаблицаКонторы, ТаблицаОрг, ТаблицаОрганизациижд, ТаблицаОрганизаций. ТаблицаГИБДД: Номер п/п – числовой Дата поступления в ИФНС – Дата/время Кто - текстовый Кому - текстовый Дата ТТН – Дата/время Номер ТТН - текстовый ФИО Водителя - текстовый Наименование груза - текстовый Количество груза - текстовый Инспектор - текстовый Примечание – текстовый. В Delphi это отражено в таблице DBGrid, в эту таблицу пользователь заносит данные. На форме также имеется поле TEdit (FindEdit), в которое нужно занести наименование организации и кнопка Найти. Еще необходимо создать поля для дат (подскажите как лучше сделать, какой тип для поля ‘Дата поступления в ИФНС’ поставить в Access), чтоб пользователь мог сделать выборку за определенный период по определенной организации. По кнопке Найти результат выборки отражается в другой форме. |
#6
|
||||
|
||||
Переменные StartDate и FinishDate не объявил, вот и ругается. И последние 2 строчки так напиши:
Код:
DataModule4.FindQuery.Parameters.ParamByName('StartDate').Value := StartDate; DataModule4.FindQuery.Parameters.ParamByName('FinishDate').Value := FinishDate; Последний раз редактировалось TOJluK, 15.10.2009 в 15:37. |
#7
|
|||
|
|||
Даты и наименование организации вводятся в поля TEdit.
Запускаю программу, пытаюсь сделать запрос, выдает такую ошибку: Project NalogProject.exe raised exception class EOLEException with message ‘Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения’. Process stopped. Use Step or Run to continue. Помогите, пожалуйста разобраться начинающему! |
#8
|
||||
|
||||
Проверь формат вводимой даты. Покажи че ты вводишь, как передаешь из TEdit параметры и финальный код (на всякий случай) выложи. Там и посмотрим.
|
#9
|
|||
|
|||
Выкладываю Unit и db2.mdb
|
#10
|
||||
|
||||
Тип переменных:
Код:
StartDate: TdateTime; FinishDate: TdateTime; Код:
// в таком случае надо в TEdit вводить "правильную дату" // или использовать маску // или заменить Edit на DateTimePicker StartDate:=StrToDate(Edit1.Text); FinishDate:=StrToDate(Edit2.Text); |
#11
|
|||
|
|||
Ни как не хочет искать!!!
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, 16.10.2009 в 10:54. |
#12
|
|||
|
|||
ну пока попробуй такой код.
Код:
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
|
|||
|
|||
Объясните, пожалуйста, что значит:
DataModule4.FindQuery.SQL.Add('WHERE Кто LIKE :Findword ); Может у кого-нибудь есть рабочий примерчик? |
#14
|
||||
|
||||
Код:
'and Дата поступления в ИФНС between : Код:
'and [Дата поступления в ИФНС] between : Код:
DataModule4.FindQuery.Parameters.ParamByName('Star tDate').Value := DateTimePicker1.Date; DataModule4.FindQuery.Parameters.ParamByName('Fini shDate').Value := DateTimePicker2.Date; Цитата:
Например если Findword будет равно '%ванов' то получим выборку всех [Кто] котрые заканчиваются на 'ванов' Вообще, вы творите ошибки существенно быстрее чем успеваете исправить старые. Сначала заставьте правильно работать старый код, а уже потом что-то от себя добавляйте. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 16.10.2009 в 12:57. |
#15
|
|||
|
|||
Огромное спасибо! Все заработало!!!!!!!!
|