Yo lo haría de otra forma, porque si tiene marcado el rb3 y no tiene nada escrito en el Edit1, el tema fallará. En estos casos hay que cuadrar todos las posibilidades.
Cuando estudies las funciones verás que es casi casi copy and paste, pero muy fácil de ampliar con más condiciones
Código Delphi
[-]
procedure TDist06.SpeedButton2Click(Sender: TObject);
var filtro :string;
begin
filtro := emptystr;
filtro := checkrb1(filtro);
filtro := checkrb2(filtro);
filtro := checkrb3(filtro);
datam6.MATRICULA.Filtered := false;
datam6.MATRICULA.Filter := filtro;
datam6.MATRICULA.Filtered := true;
end;
function checkrb1(filtroAnterior:string):string;
begin
result := filtroAnterior;
if rb1.Checked then
if (edit1.Text <>'')then
result := 'CENT_CODIGO ='''+Edit1.Text+'''';
end;
function checkrb2(filtroAnterior:string):string;
begin
result := filtroAnterior;
if rb2.Checked then
if (edit2.Text <>'') then
begin
if result <> EmptyStr then
result := result + ' and ';
result := result + 'CESE_CODIGO ='''+edit2.Text+'''';
end;
end;
function checkrb3(filtroAnterior:string):string;
begin
result := filtroAnterior;
if rb3.Checked then
if (edit3.Text <>'') then
begin
if Result <> EmptyStr then
result := result + ' and ';
result := result + 'STATUS ='''+edit3.Text +'''';
end;
end;
Queda un tema pendiente.... donde dice EditX.Text <> '' debería decir:
Trim(EditX.text) <> EmptyStr
que los usuarios son muy suyos y con introducir un espacio en blanco ya se fastidia la consulta.
Edito: Incluso podrías quitar los "rb" ya que no aportan nada nuevo, si el usuario escribe algo en una caja de texto, se añade la condición, si no escribe nada, se elimina del filtro.
Saludos