Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2004
orion orion is offline
Registrado
 
Registrado: abr 2004
Ubicación: México
Posts: 3
Poder: 0
orion Va por buen camino
Question Problemas con consulta a Interbase

Hola Amigos!!!:

Espero que alguien me pueda ayudar con este problemilla que a continuacion describo.

Cuento con una BD's en Interbase 6.5 la cual ya he conectado a Delphi 7, y puedo manipular mis datos a través de una DBNavegator, y tambien escribiendo la cadena completa a buscar...

procedure TPeliculas.tituloKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then { si es la tecla <enter> }
begin
IBDATASET2.SelectSQL.Clear;
IBDATASET2.SelectSQL.ADD('SELECT TITULO,GENERO,FORMATO,CLASIFIC FROM PELICULAS WHERE PELICULAS.TITULO="'+titulo.Text +'"');
IBDATASET2.Active :=TRUE;
titulo.Text:='';
end;
end;

y si obtnego resultados......PERO lo que en realidad deseo es lo siguiente:

Escribir caracteres en un TEdit (escribo el titulo de una pelicula) y que mientras escribo (con el evento KeyPress) se ejecute una consulta que me permita desplagar por medio de un DBGrid aquellos registros que su campo Titulo coincida con lo que se va escribiendo.

He probado usando la clausula LIKE pero no arroja los registros correctos (como si lo hace por medio del IBConsole, ya lei que el LIKE tiene problemas), tambien he intentado usando STARTING WITH arametro pero tampoco he tenido exito.
Hice este procedimiento en Interbase 6.5 pero ni siquiera me lo crea porque me marca un error en :tit;

SET TERM !!;
create procedure busca_movie (tit char(30))
returns(tit_mov char(30),form_mov char(3),gen_mov char(20))
as
begin
select titulo,formato,genero
from peliculas
where titulo starting with :tit;
end!!
SET TERM ;!!

No se como resolver esta consulta, espero que me puedan apoyar.
De antemano muchas gracias y un saludo para todos.
Responder Con Cita
  #2  
Antiguo 14-12-2004
Aztaroth Aztaroth is offline
Miembro
 
Registrado: dic 2003
Ubicación: Matamoros
Posts: 52
Poder: 21
Aztaroth Va por buen camino
Consulta Interbase

ya intentaste ponerlo con el operador "like" no recuerdo exactamente cual es en interbase, si es el mismo de SQL Server podria servir a tus propositos debe de ser ese.


procedure TPeliculas.tituloKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then { si es la tecla <enter> }
begin
IBDATASET2.SelectSQL.Clear;
IBDATASET2.SelectSQL.ADD('SELECT TITULO,GENERO,FORMATO,CLASIFIC FROM PELICULAS WHERE PELICULAS.TITULO like "'+titulo.Text +'%"');
IBDATASET2.Active :=TRUE;
titulo.Text:='';
end;
end;
Responder Con Cita
  #3  
Antiguo 15-12-2004
orion orion is offline
Registrado
 
Registrado: abr 2004
Ubicación: México
Posts: 3
Poder: 0
orion Va por buen camino
Muchas gracias Aztaroth, de hecho si funciona el LIKE tal y como tu me hiciste la observación, escribo la cadena o subcadena en el TEdit, pulso enter, evalua la consulta sql y despliega los registros coincidentes en el TDBGrid, el detalle es que tengo que pulsar la TECLA ENTER para que se evalue la consulta, si borro el IF que prueba si la tecla es ENTER pasa lo siguiente:

Al pulsar la primer letra dentro del TEdit esto hace que el codigo se ejecute y el resultado en el Grid muestra todos los registros de la tabla, asi es que sigo sin obtener el resultado que espero.

Hay algo mas que sigo sin comprender, supongamos que mi cunsulta se ejecuta bien por medio del LIKE y usando el ENTER como tecla de ejecución, el problema es que si escribo una segunda cadena y pulso enter para que muestre los registros en el Grid esto trae como consecuencia el siguiente ERRROR:
Proyect movies.exe raised exception class EDatabaseError with message 'IBDataSet2:Field'' not found'.

Muchas gracias por sus comentarios, hasta pronto.
Responder Con Cita
  #4  
Antiguo 15-12-2004
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Thumbs up Consulta Interbase

Hola ORION!

Mi propuesta es la siguiente:

Escribe el siguiente código en el evento OnChange del Componente TEdit, de esta forma no te metes en líos con OnKeyPress

Código Delphi [-]
procedure TPeliculas.TituloChange(Sender: TObject);
begin
  // ocurre el evento cada vez que cambia el texto
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT TITULO,GENERO,FORMATO,CLASIFIC FROM PELICULAS');
    SQL.Add('WHERE PELICULAS.TITULO STARTING WITH :Tit');
    // Envías como parámetro el texto contenido en el TEdit
    ParamByName('Tit').AsString:=Titulo.Text;
    Open;
  end;
end;

De hecho no es necesario crear el SQL en tiempo de ejecución, puedes añadir las líneas en el SQL en tiempo de diseño y después solamente cambiar el parámetro :Tit en tiempo de ejecución de la siguiente manera:

Código Delphi [-]
procedure TPeliculas.TituloChange(Sender: TObject);
begin
  with IBQuery1 do
  begin
    Close;
    ParamByName('Tit').AsString:=Titulo.Text;
    Open;
  end;
end;

Decidí utilizar un componente TIBQuery porque la idea es solamente consultar, pero obtienes el mismo resultado si utilizas un TIBDataSet.

Espero que te sea útil.

Hasta pronto.

Última edición por Héctor Randolph fecha: 15-12-2004 a las 09:38:11.
Responder Con Cita
  #5  
Antiguo 16-12-2004
orion orion is offline
Registrado
 
Registrado: abr 2004
Ubicación: México
Posts: 3
Poder: 0
orion Va por buen camino
Talking

Hector Muchas gracias, la solución que me diste es la que yo buscaba, exactamente como queria que funcionara la consulta.

Gracias a todos por el apoyo y seguiremos esforzandonos por aprender.
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


La franja horaria es GMT +2. Ahora son las 10:26:30.


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