Показать сообщение отдельно
  #1  
Старый 20.11.2012, 14:02
de3epmup de3epmup вне форума
Прохожий
 
Регистрация: 20.11.2012
Сообщения: 4
Репутация: 10
По умолчанию Ошибка при выполнении фильтрации для базы данных Interbase

Уважаемые дамы и господа эксперты)
Проблема в следующем. Существует несколько форм. На одной из них находится таблицы. Подключаю БД interbase через:
IBDatabase, IBTransaction, IBTable, Datasource, DBGrid.
На других формах расположены фильтрации для каждой таблицы по отдельности.
При выполнение фильтрации для первой таблицы все работает, для оставшихся остальных выдает ошибку: access violation at address 00000000 read of address 00000000. НО все равно фильтрует.

Вот код первой рабочей фильтрации

Код:
	 	 
unit Unit_s1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, sBitBtn, sEdit, sComboBox, sGroupBox, db;
 
type
  Ts1 = class(TForm)
    sGroupBox1: TsGroupBox;
    sGroupBox2: TsGroupBox;
    sComboBox1: TsComboBox;
    sEdit1: TsEdit;
    sBitBtn1: TsBitBtn;
    sComboBox2: TsComboBox;
    sEdit2: TsEdit;
    sBitBtn2: TsBitBtn;
    sBitBtn3: TsBitBtn;
    procedure sBitBtn1Click(Sender: TObject);
    procedure sBitBtn2Click(Sender: TObject);
    procedure sBitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  s1: Ts1;
 
implementation
 
uses Unit1;
 
{$R *.dfm}
 
procedure Ts1.sBitBtn1Click(Sender: TObject);
var st:string;
begin
case sComboBox1.ItemIndex of
  1: begin st:='NOMER_SKLADA'; end;
  2: begin st:='ZAVHOZ'; end;
end;
 
if st<>'Выбирете поле для поиска'  then  begin
 
if not Glv.IBTable1.Locate(st, sEdit1.Text, [loCaseInsensitive,loPartialKey]) then
    ShowMessage('Запись не найдена');
end;
end;
 
procedure Ts1.sBitBtn2Click(Sender: TObject);
begin
case sComboBox2.ItemIndex of
    1:begin
         glv.IBTable1.Filtered := False;
         glv.IBTable1.Filter:='NOMER_SKLADA'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable1.Filtered := True;
     end;
    2:
     begin
         glv.IBTable1.Filtered := False;
         glv.IBTable1.Filter:='ZAVHOZ'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable1.Filtered := True;
     end;
end;
end;
 
procedure Ts1.sBitBtn3Click(Sender: TObject);
begin
sedit2.Text:='';
Glv.IBTable1.Filtered:=true; Glv.IBTable1.Filtered:=false;
end;
 
end.




Вот одна из форм на которой вылазиет ошибка:
Код:
	  
unit Unit_s2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, sBitBtn, sEdit, sComboBox, sGroupBox, db;
 
type
  Ts2 = class(TForm)
    sGroupBox1: TsGroupBox;
    sComboBox1: TsComboBox;
    sEdit1: TsEdit;
    sBitBtn1: TsBitBtn;
    sGroupBox2: TsGroupBox;
    sComboBox2: TsComboBox;
    sEdit2: TsEdit;
    sBitBtn2: TsBitBtn;
    sBitBtn3: TsBitBtn;
    procedure sBitBtn1Click(Sender: TObject);
    procedure sBitBtn2Click(Sender: TObject);
    procedure sBitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  s2: Ts2;
 
implementation
 
uses Unit1;
 
{$R *.dfm}
 
procedure Ts2.sBitBtn1Click(Sender: TObject);
var st:string;
begin
case sComboBox1.ItemIndex of
  1: begin st:='NOMEN_NOMER'; end;
  2: begin st:='NAIM'; end;
  3: begin st:='NOMER_PASPORTA'; end;
  4: begin st:='KOLLICHESTVO'; end;
  5: begin st:='CENA'; end;
  6: begin st:='SUMMA'; end;
  7: begin st:='NOMER_SKLADA'; end;
end;
 
if st<>'Выбирете поле для поиска'  then  begin
 
if not Glv.IBTable2.Locate(st, sEdit1.Text, [loCaseInsensitive,loPartialKey]) then
    ShowMessage('Запись не найдена');
end;
 
end;
 
procedure Ts2.sBitBtn2Click(Sender: TObject);
begin
case sComboBox2.ItemIndex of
   1:begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='NOMEN_NOMER'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
    2:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='NAIM'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
     3:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='NOMER_PASPORTA'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
     4:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='KOLLICHESTVO'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
     5:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='CENA'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
     6:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='SUMMA'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
     7:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='NOMER_SKLADA'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True;
     end;
end;
 
end;
 
procedure Ts2.sBitBtn3Click(Sender: TObject);
begin
sedit2.Text:='';
Glv.IBTable2.Filtered:=true; Glv.IBTable2.Filtered:=false;
end;
 
end.
 




При трассировке было выявлено что ошибка возникает вот на этом месте:
Код:
  7:
     begin
         glv.IBTable2.Filtered := False;
         glv.IBTable2.Filter:='NOMER_SKLADA'+' LIKE '+#39+'%'+sEdit2.Text+'%'+#39;
         glv.IBTable2.Filtered := True; {от тут эта зараза вылазиет}
     end;
end;
 


Также было замечено, что такая ошибка вылазит при добавление записи в таблицу, а именно при выборе значения из DBLookupComboBox1.

Прошу помощи. ХЭЛП! Что делать?
Ответить с цитированием