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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2011, 14:32   #1
virtiler
Новичок
Джуниор
 
Регистрация: 14.05.2011
Сообщений: 2
По умолчанию Расширенный поиск по БД (Delphi)




Помогите написать код для расширенного поиска по БД (Для курсовой). Нужно сделать так, что бы когда вводишь один параметр, то оно ищет по одному параметру, если вводишь ещё один параметр, то уже по двум и так далее...
Вот та часть кода которую я написал, но с этого ничего толкового не выходит... оно Работает, но это громоздко и можно запутаться.. Не прошу писать весь код, просто помогите разобраться!

Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, ExtCtrls, Menus, DBCtrls, StdCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
DBNavigator1: TDBNavigator;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
Query1: TQuery;
GroupBox1: TGroupBox;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Label7: TLabel;
Edit6: TEdit;
Label8: TLabel;
Edit7: TEdit;
Label9: TLabel;
Edit8: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
fam:string;
kyrs:string;
imja:string;
otchestvo:string;
pol:string;
budjet:string;
god:string;
grupa:string;
begin
fam:=Edit2.Text;
kyrs:=Edit4.Text;
imja:=Edit1.Text;
otchestvo:=Edit3.Text;
pol:=Edit5.Text;
budjet:=Edit6.Text;
god:=Edit7.Text;
grupa:=Edit8.Text;
if (fam='') and (kyrs='') and (name='') and (otchestvo='') and (pol='') and (budjet='') and (god='') and (grupa='')
then ShowMessage('Ââåäèòå õîòÿ áû îäèí ïàðàìåòð äëÿ ïîèñêà.') else
begin
///////////////////ÅÑËÈ ÔÀÌÈËÈß//////////////////////////
if Fam <> '' then
begin

with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Kod,Name,Fam,Otchestvo,Kyrs,Pol,Bud jetnik,Data,Grupa');
SQL.Add('FROM ":mksumdu:mksumdu.db"');
SQL.Add('WHERE');
SQL.Add('(Fam = "'+ fam +'")');
SQL.Add('ORDER BY Fam');
Open;
end;
if Query1.RecordCount <> 0
then DataSource1.DataSet:=Query1
else
begin
ShowMessage('Íåò äàííûõ.');
DataSource1.DataSet:=Table1;
end;
end
/////////////////////ÅÑËÈ ÔÀÌÈËÈß\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\
else
/////////////////////ÅÑËÈ ÔÀÌÈËÈß È ÊÓÐÑ//////////////////////////
if (kyrs <> '') and (fam <> '') then
begin

with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Kod,Name,Fam,Otchestvo,Kyrs,Pol,Bud jetnik,Data,Grupa');
SQL.Add('FROM ":mksumdu:mksumdu.db"');
SQL.Add('WHERE');
SQL.Add('(Fam = "'+ fam +'" and Kyrs = "'+ kyrs +'")');
SQL.Add('ORDER BY Fam,Kyrs');
Open;
end;
if Query1.RecordCount <> 0
then DataSource1.DataSet:=Query1
else
begin
ShowMessage('Íåò äàííûõ.');
DataSource1.DataSet:=Table1;
end;
end
/////////////////////ÅÑËÈ ÔÀÌÈËÈß È ÊÓÐÑ\\\\\\\\\\\\\\\\\\\\\\\
/////////////////////ÅÑËÈ ÊÓÐÑ//////////////////////////
else
begin
if kyrs <> '' then
begin
with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Kod,Name,Fam,Otchestvo,Kyrs,Pol,Bud jetnik,Data,Grupa');
SQL.Add('FROM ":mksumdu:mksumdu.db"');
SQL.Add('WHERE');
SQL.Add('(Kyrs = "'+ kyrs +'")');
SQL.Add('ORDER BY Kyrs');
Open;
end;
if Query1.RecordCount <> 0
then DataSource1.DataSet:=Query1
else
begin
ShowMessage('Íåò äàííûõ.');
DataSource1.DataSet:=Table1;
end;
end
/////////////////////ÅÑËÈ ÔÀÌÈËÈß È ÊÓÐÑ\\\\\\\\\\\\\\\\\\\\\\\
/////////////////////ÅÑËÈ ÈÌß//////////////////////////
else
begin
if (fam='') and (kyrs='') then
begin
if imja <> '' then
begin

with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Kod,Name,Fam,Otchestvo,Kyrs,Pol,Bud jetnik,Data,Grupa');
SQL.Add('FROM ":mksumdu:mksumdu.db"');
SQL.Add('WHERE');
SQL.Add('(Name = "'+ imja +'")');
SQL.Add('ORDER BY Name');
Open;
end;
if Query1.RecordCount <> 0
then DataSource1.DataSet:=Query1
else
begin
ShowMessage('Íåò äàííûõ.');
DataSource1.DataSet:=Table1;
end;
end;
end;
end;
end;
end;
end;
end.
virtiler вне форума Ответить с цитированием
Старый 14.05.2011, 17:32   #2
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Да этот вопрос многих интересует... Универсального способа такой выборки нет, но я бы в таком случае поступил бы не так как вы... Можно после проверки Едитов на пустоту просто дописывать нужную строку в запрос )
В следующем посте я выложу мою идею в виде исходников

Как и обещал выкладываю исходники
Скачать

Последний раз редактировалось artemavd; 14.05.2011 в 17:45.
Gulik вне форума Ответить с цитированием
Старый 14.05.2011, 17:57   #3
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Предлагаю через параметры, изменив запрос, в части условий, по аналогии с приложенным
Цитата:
WHERE (:Fam='' OR Fam=:Fam)
ReportCube вне форума Ответить с цитированием
Старый 15.05.2011, 12:19   #4
virtiler
Новичок
Джуниор
 
Регистрация: 14.05.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Gulik Посмотреть сообщение
Да этот вопрос многих интересует... Универсального способа такой выборки нет, но я бы в таком случае поступил бы не так как вы... Можно после проверки Едитов на пустоту просто дописывать нужную строку в запрос )
В следующем посте я выложу мою идею в виде исходников

Как и обещал выкладываю исходники
Скачать
Спасибо Вам большое))
virtiler вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширенный фильтр Пользователь1 Microsoft Office Excel 7 04.05.2011 19:08
расширенный фильтр Михаил2261 Microsoft Office Excel 1 03.05.2010 20:04
Расширенный фильтр (VBA) Flame811 Microsoft Office Excel 0 10.12.2009 15:46
Расширенный TCalendar Wildangel0990 Помощь студентам 0 29.06.2009 16:21