Hola,
Tengo problemas con una consulta sql que lanzo desde delphi a una bd access (en si la consulta si la lanzo desde acces tambien da el mismo problema asi que no es problema de delphi)
Los datos en access estan importados de una hoja excell. La hoja excell, no tiene en todas las columnas datos, asi que podemos encontrar en alguna columna blancos - ahí el problema
La cosa, es que no se de que manera puedo tratar esos blancos ya que he probado de todo
En acces todos los campos estan definidos como texto: el campo tlf2 de algun registro contiene texto...
Supongamos que la hoja excell tiene:
Código:
NOMBRE DIRECCION TELEF1 TELEF2
jsc1 direccion1 tlf1 tlf2
jsc2 direccion2 tlf2
nombre3 direccion3 tlf3
...
en delphi, tengo una etiqueta por campo(nombre,direccion,tlf1,tlf2) de manera que la busqueda la pueda hacer concatenando parametros con los valores de
Código:
edit1.text, edit2.text,edit3.tex,edit4.text
la consulta que lanzo al escribir cualquier caracter en cualquiera de los edit es lo siguiente
Código:
procedure buscar(s:string);
begin
with form1 do
with form1.Query1 do
TRY
Close ;
SQL.clear ;
Params.Clear ;
sql.add ('SELECT * FROM TABLA') ;
if s<>'todos'
then
begin
sql.add (' where NOMBRE like :nomb AND DIRECCION like :direc AND TELEF1 like :tlf1 AND TELEF2 like :tlf2');
parambyname ('nomb').asstring := '%'+edit1.Text+'%' ;
parambyname ('direc').asstring := '%'+edit2.text+'%';
parambyname ('tlf1').asstring := '%'+edit3.text+'%';
parambyname ('tlf2').asstring := '%'+edit5.text+'%'
end;
IF not prepared
then
begin
close ;
prepare;
open;
end
else open ;
EXCEPT MessageDlg ('Errores en la consulta',mtWarning,[mbOK],0);
END;
end;
llamada:
Código:
procedure Tform1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
buscar ('param') ;
end;
llamada para cargar todos al cargar el Form1
Código:
procedure Tform1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
buscar ('todos') ;
end;
si escribimos en edit1 jsc de tal manera que
Código:
edit1.text:= 'jsc'
lo que espero me devuelva la consulta son todos esos nombres que contengan JSC; es decir
Código:
NOMBRE DIRECCION TLF1 TLF2
jsc1 direccion1 tlf1 tlf2
jsc2 direccion2 tlf2
en cambio el resultado es bien distinto ya que el tlf2 que estaria en blanco no lo devuelve
Código:
NOMBRE DIRECCION TLF1 TLF2
jsc1 direccion1 tlf1 tlf2
he cambiado el campo tlf2 de texto a numero en access por hacer la prueba pero el resultado es el mismo
pienso que el problema esta en la tabla excell y en esos campos en blanco. Tendria manera de saber esos blancos realmente que valor almacenan para poder tratarlos en una consulta?
o lamentablemente, a esos valores en blanco tendria que asignarles un valor en excell? por ejemplo "0"?
lo he probado asi y si que funciona la consulta; el problema es que son alrededor de 30.000 registros y es un problema si no se el valor que almacena como blanco para poder hacer un
sobre el campo en cuestion
Siento la chapa; he intentado detallar el problema lo maximo posible por si alguien pudiera ayudarme
gracias de antemano