Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 8 Horas
lugotrujillo lugotrujillo is offline
Registrado
 
Registrado: sep 2024
Posts: 5
Poder: 0
lugotrujillo Va por buen camino
ADOQuery y consulta con LIKE

buenos dias, estoy retocando un programa antiguo desarrollado en Delphi 6 y me sucede, ahora, antes no sucedia, que cuando le asigno la sentencia SQL a un ADOQuery y esta contiene una condicion LIKE para filtrar los campos que va a obtener de la base de datos, siempre devuelve vacio, es como si no funcionara el LIKE, la base de datos esta en microsoft Access version 2003, utilizo las comillas ' y el comodin de * ya que el campo a comprara es texto, por ejemplo, una consulta que me devuelve vacio es esta SELECT Inicial FROM PremisasAcc WHERE Codigo LIKE 'CPSV_2025*', sin embargo coloco su codigo en access y si devuelve correctamente los resultados

Código SQL [-]
SELECT Inicial FROM PremisasAcc WHERE Codigo LIKE 'CPSV_2025*'

Última edición por Casimiro Notevi fecha: Hace 7 Horas a las 16:52:38.
Responder Con Cita
  #2  
Antiguo Hace 6 Horas
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 293
Poder: 3
pgranados Va por buen camino
Nunca he usado MSAccess pero la sentencia LIKE utiliza '%' y no '*'

Puedes checar este articulo.
Responder Con Cita
  #3  
Antiguo Hace 6 Horas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.193
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que con msaccess es con asterisco en lugar de % y el guión subrayado en lugar de ?
Responder Con Cita
  #4  
Antiguo Hace 6 Horas
lugotrujillo lugotrujillo is offline
Registrado
 
Registrado: sep 2024
Posts: 5
Poder: 0
lugotrujillo Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que con msaccess es con asterisco en lugar de % y el guión subrayado en lugar de ?
quizas sea eso, en la codificacion de las tablas utilizo el guion bajo, y puede que access lo interprete diferente, verificare esas cosas
Responder Con Cita
  #5  
Antiguo Hace 5 Horas
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 82
Poder: 10
marco3k Va por buen camino
Muestra tu código para revisar lo que dices, quizas el error este en las comillas, en código debes usar "QuotedStr" para reemplazar las comillas.
Responder Con Cita
  #6  
Antiguo Hace 5 Horas
lugotrujillo lugotrujillo is offline
Registrado
 
Registrado: sep 2024
Posts: 5
Poder: 0
lugotrujillo Va por buen camino
Cita:
Empezado por marco3k Ver Mensaje
Muestra tu código para revisar lo que dices, quizas el error este en las comillas, en código debes usar "QuotedStr" para reemplazar las comillas.
es que da igual, todo lo que vayas a asignar al SQL.Text de un ADOQuery y contenga LIKE 'cualquiertexto*' devolvera 0 registros, uso QuotedStr y todo, y no devuelve ni un registro
Responder Con Cita
  #7  
Antiguo Hace 3 Horas
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 82
Poder: 10
marco3k Va por buen camino
Pues si no muestras un poco de código de esa búsqueda, bueno no hay como ayudarte.
Responder Con Cita
  #8  
Antiguo Hace 2 Horas
lugotrujillo lugotrujillo is offline
Registrado
 
Registrado: sep 2024
Posts: 5
Poder: 0
lugotrujillo Va por buen camino
Cita:
Empezado por marco3k Ver Mensaje
Pues si no muestras un poco de código de esa búsqueda, bueno no hay como ayudarte.
en un procedimiento cualquiera declaro una variable string
STemp: String;
begin
//le asigno su valor a una lista q usare posteriormente, mediante una funcion que abre un adoquery (aqui es donde no //devuelve ningun registro, y deberia devolver) y me devuelve esa lista
STemp:= DM.DevolverListaCodigos('SELECT Inicial FROM PremisasAcc WHERE Codigo LIKE '+QuotedStr('CPSV_2025*'),'Inicial');


function TDM.DevolverListaCodigos(Consulta, Codigo: String): String;
var
QLista: TADOQuery;
begin
QLista:= TADOQuery.Create(Self);
QLista.Connection:= DM.ADOConn;
ActivarQuery(QLista,Consulta,True,False);
Result:= '';
if not QLista.IsEmpty
then
begin
QLista.First;
Consulta:= TipoCampo(QLista.FieldList.Find(Codigo));
while not QLista.Eof do
begin
if (Consulta='String') OR (Consulta='WideString')
then
if Result=''
then Result:= QuotedStr(QLista.FieldByName(Codigo).AsString)
else Result:= Result+','+QuotedStr(QLista.FieldByName(Codigo).AsString)
else
if Result=''
then Result:= QLista.FieldByName(Codigo).AsString
else Result:= Result+','+QLista.FieldByName(Codigo).AsString;
QLista.Next;
end;
Result:= '('+Result+')';
end;
QLista.Free;
end;
Responder Con Cita
  #9  
Antiguo Hace 2 Horas
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 82
Poder: 10
marco3k Va por buen camino
Ya vi tu problema, es el query que lo liberas y al hacerlo se pierden los registros, trata de hacerlo como una variable de formulario.
Responder Con Cita
  #10  
Antiguo Hace 2 Horas
lugotrujillo lugotrujillo is offline
Registrado
 
Registrado: sep 2024
Posts: 5
Poder: 0
lugotrujillo Va por buen camino
Cita:
Empezado por marco3k Ver Mensaje
Ya vi tu problema, es el query que lo liberas y al hacerlo se pierden los registros, trata de hacerlo como una variable de formulario.
no que va, traceo el programa para ir evaluando el comportamiento y en esta comprobacion es que me doy cuenta

if not QLista.IsEmpty //=>la lista esta vacia, no se obtuvieron registros, cambio la consulta de seleccion eliminando el LIKE y me devuelve registros, verifico la consulta con el LIKE en access y esta bien, devuelve los registros que son segun sea la condicion LIKE

antes el LIKE funcionaba, ahora no, algo mas paso y no me di cuenta
Responder Con Cita
  #11  
Antiguo Hace 1 Hora
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 82
Poder: 10
marco3k Va por buen camino
Hice un pequeño ejemplo con una bd de access y el problema es el * y debes usar %
Código Delphi [-]
procedure TForm1.btnBuscaClick(Sender: TObject);
var busca :string;
begin
  try
    try
      busca:= '%'+trim(self.edtBusca.Text)+'%';
      self.Conexion.Connected:= true;
      self.DataSetPrueba.CommandText :='select * from prueba where nombre like :busca';
      self.DataSetPrueba.Parameters.ParamByName('busca').Value := busca;
      self.DataSetPrueba.Active:= true;
      if self.DataSetPrueba.RecordCount>0 then
      begin
        showmessage('Se encontró ' + inttostr(self.DataSetPrueba.RecordCount) + ' registro(s)');
      end;
    except
      abort;
    end;
  finally
    self.Conexion.Connected:= false;
  end;
end;


Use access 2013 proveedor "Provider=Microsoft.ACE.OLEDB.12.0" y una tabla con campo texto nombre. Funciona lo de arriba.

Última edición por marco3k fecha: Hace 1 Hora a las 23:15:51.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consulta en un ADOQUERY the walrus Tablas planas 21 17-09-2018 12:02:02
Consulta ADOQuery barakuda SQL 7 10-04-2014 03:35:48
Consulta SQL en ADOQuery epenor Conexión con bases de datos 7 29-09-2008 04:16:27
consulta adoquery Yensis22 SQL 1 15-06-2008 21:09:03
consulta con un adoQuery manu Conexión con bases de datos 4 29-09-2006 00:17:48


La franja horaria es GMT +2. Ahora son las 00:40:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi