Hola a tod@s
Delphi7, Interbase, Zeos. Controles externos a Delphi AlphaControls.
Estoy intentando hacer una consulta para que se muestre en un DBGrid el resultado a medida que se teclea en un Edit. Cuando lo que se busca tiene que estar contenido en el campo, todo va bien, pero si lo que se requiere es que sólo seleccione los registros que comienzan con lo tecleado en el Edit, la cosa no sale.
Tengo esto en el OnChange del Edit:
Código Delphi
[-]procedure TF_Main.sEdit_BuscarTitChange(Sender: TObject);
var cCadena: String;
nChar: Integer;
begin
cCadena := Trim(F_Main.sEdit_BuscarTit.Text);
nChar := Length(cCadena);
if (F_Main.sRG_BuscarTit.ItemIndex = 0) then begin
end;
if (F_Main.sRG_BuscarTit.ItemIndex = 1) then begin
if (F_Main.sEdit_BuscarTit.Text <> '') then begin
DM_Libros.Q_TITULOS.Close;
DM_Libros.Q_TITULOS.SQL.Clear;
DM_Libros.Q_TITULOS.SQL.Add('Select * From TITULOS');
if (F_Main.sCheckB_MayMinBuscarTit.Checked) then begin
cCadena := '%' + cCadena + '%';
DM_Libros.Q_TITULOS.SQL.Add('Where (NomTit like :cCadena)');
DM_Libros.Q_TITULOS.Parambyname('cCadena').AsString := cCadena;
end
else
DM_Libros.Q_TITULOS.SQL.Add('where UPPER(NomTit) like ''%' + AnsiUpperCase(cCadena) + '%''');
DM_Libros.Q_TITULOS.Open;
end
else end;
if (F_Main.sRG_BuscarTit.ItemIndex = 2) then begin
if (F_Main.sEdit_BuscarTit.Text <> '') then begin
DM_Libros.Q_TITULOS.Close;
DM_Libros.Q_TITULOS.SQL.Clear;
DM_Libros.Q_TITULOS.SQL.Add('select * from TITULOS where SUBSTR(NomTit, 1, :nChar) = :cCadena');
DM_Libros.Q_TITULOS.Parambyname('nChar').AsInteger := nChar;
DM_Libros.Q_TITULOS.Parambyname('cCadena').AsString := cCadena;
DM_Libros.Q_TITULOS.Open;
end
else
DM_Libros.Q_TITULOS.SQL.Add('Select * From TITULOS SUBSTRING(NomTit,1,nChar) = :cCadena');
DM_Libros.Q_TITULOS.SQL.Add('Select * SUBSTRING(NomTit,1,nChar) = cCadena From TITULOS');
DM_Libros.Q_TITULOS.SQL.Add('select * from TITULOS (where NomTit = substring(cCadena FROM 1 FOR strlen(cCadena)))');
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(80) CHARACTER SET ISO8859_1,
SMALLINT,
SMALLINT
RETURNS CSTRING(80) CHARACTER SET ISO8859_1 FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';
end;
end;
Yo de SQL algo menos de lo justito y lo que he encontrado en el foro no me funciona, así que no soy capaz de solucionar el asunto.
Muchas gracias de antemano y un saludo.