A ver, apoyandome en la idea de GluGlu resolvi el problema, aqui esta el codigo para el que le interese, basicamente lo que hace es qe toma la ultima aparicion del WHERE y divide el string en dos, luego inserta el filtro y lo vuelve a unir. Pronto lo subire a mi subdominio para el que lo necesite
Código Delphi
[-] sq.DisableControls;
sq.Active := False;
sq.SQL.Text := cSqlOriginal;
Aux_SelectSQL1 := '';
Aux_SelectSQL2 := UpperCase(sq.SQL.Text);
for j := 1 to Length(Aux_SelectSQL2) do begin
if Aux_SelectSQL2[j] = #13 then
Aux_SelectSQL1 := Aux_SelectSQL1 + ' '
else
if Aux_SelectSQL2[j] <> #10 then
Aux_SelectSQL1 := Aux_SelectSQL1 + Aux_SelectSQL2[j];
end;
Aux_Pos := 1;
while PosEx(' WHERE ', Aux_SelectSQL1, Aux_Pos) <> 0 do begin
Aux_Pos := PosEx(' WHERE ', Aux_SelectSQL1, Aux_Pos) + 1;
end;
Dec(Aux_Pos);
if Aux_Pos = 0 then
begin
Aux_Pos := Length(Aux_SelectSQL1);
Aux_SelectSQL1 := Aux_SelectSQL1 + ' WHERE ';
lAgregar := False;
end
else
lAgregar := True;
cInicio := Copy(Aux_SelectSQL1, 1, Aux_Pos + 7);
cFinal := Copy(Aux_SelectSQL1, Aux_Pos + 7, Length(Aux_SelectSQL1));
if rgTipo.ItemIndex = 0 then cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' like ' + QuotedStr(txBuscar.Text + '%') + ')'
else if rgTipo.ItemIndex = 1 then cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' like ' + QuotedStr('%' + txBuscar.Text + '%') + ')'
else if rgTipo.ItemIndex = 2 then cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' like ' + QuotedStr('%' + txBuscar.Text) + ')'
else if rgTipo.ItemIndex = 3 then cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' = ' + QuotedStr(txBuscar.Text) + ')';
if lAgregar then
cFiltro := cFiltro + ' AND ';
sq.SQL.Text := cInicio + cFiltro + cFinal;
sq.Active := True;
sq.EnableControls;