Уважаемые дамы и господа эксперты)
Проблема в следующем. Существует несколько форм. На одной из них находится таблицы. Подключаю БД 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.
Прошу помощи. ХЭЛП! Что делать?