![]() |
|
|
#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
|
|||
|
|||
|
Огромное спасибо! Все заработало!!!!!!!!
![]() |