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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2014, 18:27   #1
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
Лампочка Фильтрация БД firebird в Delphi

Суть такова, не получается сделать фильтрацию по полю ULICI через sql запрос и очистку после фильтрации
Вбиваю данные для фильтрации и dbgrid становится пустым(

вот кусок с фильтрацией база в firebird называется base_south данные беруться из нее

procedure TForm1.Edit6Change(Sender: TObject);
begin
IBQuery1.SQL.Clear;
IBQuery1.SQL.ADD('SELECT ULICI FROM base_south');
IF Edit6.Text <> '' then
IBQuery1.SQL.ADD('WHERE ULICI LIKE "%'+Edit6.Text + '%"');
end;

Последний раз редактировалось Spiritas; 21.07.2014 в 18:32.
Spiritas вне форума Ответить с цитированием
Старый 21.07.2014, 18:28   #2
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

Код:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, DB, IBDatabase, IBCustomDataSet, IBQuery, Grids, DBGrids,
  StdCtrls, IBUpdateSQL;

type
  TForm1 = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBQuery1: TIBQuery;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Button1: TButton;
    IBTransaction2: TIBTransaction;
    IBQuery2: TIBQuery;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit5: TEdit;
    Label5: TLabel;
    Edit6: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Edit6Change(Sender: TObject);
  private
    FNew: Boolean;
    procedure EnabledEdit(const AValue: Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FNew := true;
  Edit1.Text := '';
  Edit2.Text := '';
  Edit3.Text := '';
  Edit4.Text := '';
  Edit5.Text := '';
  EnabledEdit(true);
  Edit1.SetFocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  try
    with IBQuery2 do
    begin
      if FNew then
        SQL.Text :=
          'execute procedure AUTOUPDATE(-1, ''' + Edit1.Text + ''',''' +
          Edit2.Text + ''', ''' + Edit3.Text + ''',''' + Edit4.Text + ''', ''' + Edit5.Text + ''')'
      else
        SQL.Text := 'execute procedure AUTOUPDATE(' + IBQuery1.FieldByName
          ('ID').AsString + ', ''' + Edit1.Text + ''',''' + Edit2.Text +
          ''', ''' + Edit3.Text + ''',''' + Edit4.Text + ''', ''' + Edit5.Text + ''')';
      Transaction.StartTransaction;
      ExecSQL;
      Transaction.Commit;
      Transaction.Active := false;
    end;
    IBQuery1.Close;
    IBQuery1.Open;
  except
    on E: Exception do
    begin
      if IBQuery2.Active then
        IBQuery2.Transaction.Rollback;
      Application.MessageBox(PChar(E.Message), 'Ошибка', MB_ICONERROR);
    end;
  end;
  EnabledEdit(false);
end;
Spiritas вне форума Ответить с цитированием
Старый 21.07.2014, 18:28   #3
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
  EnabledEdit(false);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  FNew := false;
  with IBQuery1 do
  begin
    Edit1.Text := FieldByName('UCHASTOK').AsString;
    Edit2.Text := FieldByName('ULICI').AsString;
    Edit3.Text := FieldByName('DOMA').AsString;
    Edit4.Text := FieldByName('KVARTIRI').AsString;
    Edit5.Text := FieldByName('VODOSHETCHIKI').AsString;
  end;
  EnabledEdit(true);
  Edit1.SetFocus;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if Application.MessageBox('Продолжить удаление?', 'Удаление',
    MB_ICONQUESTION + MB_YESNO) = IDNO then
    Exit;
  try
    with IBQuery2 do
    begin
      SQL.Text := 'delete from base_south where id = ' + IBQuery1.FieldByName
        ('ID').AsString;
      Transaction.StartTransaction;
      ExecSQL;
      Transaction.Commit;
      Transaction.Active := false;
    end;
    IBQuery1.Close;
    IBQuery1.Open;
  except
    on E: Exception do
    begin
      if IBQuery2.Active then
        IBQuery2.Transaction.Rollback;
      Application.MessageBox(PChar(E.Message), 'Ошибка', MB_ICONERROR);
    end;
  end;
end;

procedure TForm1.Edit6Change(Sender: TObject);
begin
IBQuery1.SQL.Clear;
IBQuery1.SQL.ADD('SELECT ULICI FROM base_south');
IF Edit6.Text <> '' then
IBQuery1.SQL.ADD('WHERE ULICI LIKE "%'+Edit6.Text + '%"');
end;

procedure TForm1.EnabledEdit(const AValue: Boolean);
begin
  Edit1.Enabled := AValue;
  Edit2.Enabled := AValue;
  Edit3.Enabled := AValue;
  Edit4.Enabled := AValue;
  Edit5.Enabled := AValue;
  Button1.Enabled := not AValue;
  Button2.Enabled := AValue;
  Button3.Enabled := AValue;
  Button4.Enabled := not AValue;
  Button5.Enabled := not AValue;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  IBQuery1.Close;
  IBDatabase1.Connected := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  fIniFile: TIniFile;
begin
  try
    fIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)
        + 'Config.ini');
    try
      IBDatabase1.DatabaseName := fIniFile.ReadString('Base', 'Path', '');
    finally
      fIniFile.Free;
    end;
    IBDatabase1.Connected := true;
    with IBQuery1 do
    begin
      SQL.Text :=
        'select * from base_south order by UCHASTOK, ULICI, VODOSHETCHIKI';
      Open;
    end;
    with DBGrid1 do
    begin
      Options := [dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs,
        dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit,
        dgTitleHotTrack];
      ReadOnly := true;
      Columns.Add;
      with Columns[0] do
      begin
        FieldName := 'UCHASTOK';
        Title.Caption := 'Участок';
        Width := 100;
      end;
      Columns.Add;
      with Columns[1] do
      begin
        FieldName := 'ULICI';
        Title.Caption := 'Улица';
        Width := 100;
      end;
      Columns.Add;
      with Columns[2] do
      begin
        FieldName := 'DOMA';
        Title.Caption := 'Дом';
        Width := 100;
      end;
      Columns.Add;
      with Columns[3] do
      begin
        FieldName := 'KVARTIRI';
        Title.Caption := 'Квартира';
        Width := 100;
      end;
       Columns.Add;
      with Columns[4] do
      begin
        FieldName := 'VODOSHETCHIKI';
        Title.Caption := 'Показания водосчетчиков';
        Width := 150;
    end;
    end;
  except
    on E: Exception do
    begin
      Application.MessageBox(PChar(E.Message), 'Form.Create',
        MB_ICONERROR + MB_TOPMOST);
      Halt;
    end;
  end;
end;

end.

Последний раз редактировалось Spiritas; 21.07.2014 в 18:32.
Spiritas вне форума Ответить с цитированием
Старый 21.07.2014, 18:31   #4
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

в sql запросы и firebird окунулся не давно/ поэтому без понятия как сделать фильтирацию через ibquery. База *FDB.

Последний раз редактировалось Spiritas; 21.07.2014 в 19:06.
Spiritas вне форума Ответить с цитированием
Старый 21.07.2014, 20:54   #5
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

чет чувствую не дождусь я ничего) ладно если в течении часа никто не откликнется считайте тему бесполезной и закрывайте.
Spiritas вне форума Ответить с цитированием
Старый 21.07.2014, 21:22   #6
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

забыли
Код:
IBQuery1.Open;
и это не совсем фильтр, а лишь выборка. По поводу фильтров можете почитать тут (кликабельно)
+ для Firebird есть специальные компоненты FIBPlus клик
удачи.
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 21.07.2014 в 21:33.
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация в firebird Liones БД в Delphi 9 28.11.2010 15:53
Вопрос с Firebird Interbase (фильтрация) bablzz БД в Delphi 10 30.04.2010 22:42
Фильтрация Delphi VadEr БД в Delphi 6 14.10.2009 11:09
Фильтрация (delphi) VadEr БД в Delphi 5 10.10.2009 15:40