Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-02-2007
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Talking Como Empezar??

Hola, busco una sugerencia porque la verdad estoy un poco atascado, estoy creando un proyecto donde tengo que buscar dentro de una DB 58 reg. los cuales salen de un objeto memo, y luego mostrarlos en un dbGrid

Se me habia ocurrido leer una linea del MEMO comparar con toda la DB hasta encontrar el Reg, si esta lo agrego a otra tabla y asi hasta llegar al final del memo. Al finalizar muestro la tabla resultado

Mi duda es como hacer la busqueda de la manera mas rápida y eficiente.

Desde ya gracias x la ayuda
Responder Con Cita
  #2  
Antiguo 03-02-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Bueno, la parte de hacer la consulta es lo sencillo. Un TADOQuery, una consulta SQL, un DBGrid y listo.

Lo que no me queda claro es la parte de que los datos salen de un memo. ¿Que datos? ¿Cuantos? ¿Un memo?
__________________

Responder Con Cita
  #3  
Antiguo 03-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Bueno, la verdad es que particularmente no entiendo muy bien que es lo que tienes en la BD ni que es lo que tienes en el Memo y mucho menos lo que tienes que comparar, pero a juzgar por lo que pude captar podria decirte que para recorrer el Memo solo basta con hacer lo siguiente:


Código Delphi [-]
var
  i :integer;
begin
  for i := 0 to Memo1.Lines.Count -1 do
  begin
    ShowMessage(Memo1.Lines[i]);
  end;
end;


y luego haces un Query en tiempo de ejecución que consulte en tu BD lo que necesitas...

Si mis habilidades mentalistas, astrologicas, budistas y si toda mi experiencia como yogui me engaño al punto de que lo que te dije no te sirve pa un carajo te agradeceria que nos apliaras un poco mas tu duda.

P.D. Y si otra persona entendio la pregunta a la perfeccion por favor decidme el telefono del templo para poder asistir.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 03-02-2007 a las 19:04:41.
Responder Con Cita
  #4  
Antiguo 03-02-2007
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
JAJA Disculpen no me supe explicar muy bien, pero no estan tan lejos de lo que busco, el tema es asi:

Tengo un archivo de texto el cual cargo en TMEMO, contiene varios códigos de 8 digitos, los que tengo que buscar en la DB y mas tarde mostrarlos por un DBGRID. La idea del Querry me parece genial pero no se como usarlo muy bien, como uso la info del TMEMO en el Querry???

Gracias y prometo que la proxima ves les envio un curso de astrologia o algo por el estilo........ []

Última edición por MikyVato fecha: 03-02-2007 a las 22:35:11.
Responder Con Cita
  #5  
Antiguo 05-02-2007
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Bueno ya se como usar el TMEMO, creo también que se como utilizar el TQUERRY lo que no estoy seguro es si el TQUERRY mi filtra todos los registros, pues imaginate, la cosa es así:

Yo tengo un memo con por lo menos 58 Lineas de códigos diferentes los cuales tengo que buscar en la DB, me parece que para esta acción no me es útil el TQUERRY os si??. La dificultad esta (por lo menos para mi) en mostrar estos 58 Registros encontrados en un DBGRID. Tendría que crear una Tabla con los Registros Encontrados??


Desde ya Gracias disculpen la Ignorancia, soy un Novato tratando de superarse
Responder Con Cita
  #6  
Antiguo 05-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
En vista he perdido el dinerito...
Y ahora a lo que hemos venido...
...No he probado el siguiente código... pero quizá te sirva y porfa nos comentas como te fue...
En un Boton o al OnCreate o en el evento que abras tu Tquery (Lo llamare Query1 para el ejemplo) podrías hacer lo siguiente:
Código Delphi [-]
Query1.Close;
Query1.Open;
Query1.Filtered := False;
Query1.Filtered := True;
Con esas lineas se dispararía el evento OnFilterRecord del TQuery(Query1)
y en el evento FilterRecord deberías tener el siguiente código...
Código Delphi [-]
Accept := (Memo1.Lines.IndexOf(Quer1.FieldByName('codigo').AsString) <> -1);//Esta linea mostraría los 
               //códigos que hay en la 
              //BD que también estén incluidos en el TMemo.

Nota: Si no te funciona así prueba quitando lo que tengas en la propiedad Filter de el TQuery.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 05-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Otra forma, quizás algo bestia.... pero muy rápida de hacer
Código Delphi [-]

var filtro : string;
begin
filtro := EmptyStr;
for i:= 0 to memo1.lines.count -1 do
  filtro := filtro + ','+QuotedStr(memo1.lines[i]);
delete(filtro,1,1);

query1.sql.text := 'select * from tabla where campo in ('+ filtro+')';
query1.Open;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 05-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Lepe
Otra forma, quizás algo bestia
Bueno, aun no he probado el codigo que puse en mi post anterior pero el metodo de Lepe seguro que funcionara. Al punto que siento que el codigo realmente bestia es el mio
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 06-02-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Tambien podrías utilizar un TstringList, utilizas su propiedad LoadFromFile para leer el archivo de texto y luego utilizas su propiedad "CommanText" para utilizarlo en tu query.
__________________

Responder Con Cita
  #10  
Antiguo 07-02-2007
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Chasco

Hola yo de nuevo, no logro hacer que funcione ninguno de los 2 códigos ofrecidos ............
El Primero logra correr pero detiene el programa y larga un men de Error "raised exception class EDatabaseError with Message 'ADOQuerry.Missing SQL property"

El Segundo no corre, me aparece un error de compilacion en la línea que dice:


Código Delphi [-]
 ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo = ('+ filtro')';



Marca el concatenado de la cadena con la variable filtro, el men que larga el compilador dice lo siguiente: "Missing operator orsemicolon".. La verdad no entendi mucho este código, lo que me dejo desconcertado el le línea que dice:

Código Delphi [-]
 filtro := EmptyStr;


No entiendo bien para que sirve lo que estas haciendo, no pude encontrar en la ayuda lo que quiciste hacer, al parecer asignas un estilo de String puede ser??


Tendre que crear una Tabla y agregar en ella los registros que voy encontrando???
Responder Con Cita
  #11  
Antiguo 07-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
El código de Lepe lo que hace es concatenar en una sola variable los datos del memo separados por coma (,) y luego asignar a la propiedad Text del Query dichos valores para que los filtre; ahora bien, vos tenes lo siguiente:

Código Delphi [-]
 
ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo = ('+ filtro')';

y debe ser

Código Delphi [-]
 
ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo in ('+ filtro')';

Fijate en que estas usando el "=" mientras que en el ejemplo de Lepe esta muy claro que debes usar el "in" para buscar en el conjunto de datos alimentado desde la variable de texto llamada "filtro".

En cuanto a la linea que tienes duda:

Código Delphi [-]
 
filtro := EmptyStr;

Esa es una manera de inicializar la variable.

Espero te sirva de algo la explicacion.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #12  
Antiguo 08-02-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
a ver... aquí necesitan ponerse las pilas y abrir bien los ojos. No se me desesperen que esto es lo sencillo, mantenga la cabeza fria y ponga antención a lo que estan escribiendo.
Código Delphi [-]
ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo in ('+ filtro+')';

En la segunda, según tu excepción, el problam esta en el ADOQuerry... será porque es ADOQuery con una "r", no con dos.
__________________

Responder Con Cita
  #13  
Antiguo 08-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Claro ContraVeneno debe tener razon , despues de todo aqui si hay un verdadero mentalista
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #14  
Antiguo 08-02-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A ver si me entrometo un poquito, por favor corrijanme.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
   ADOQuery1.Close;
   ADOQuery1.SQL.Text:= 'Select * From TuTabla';
   ADOQuery1.Open;
end;
En un boton:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Filter := 'TuCampo = '+QuotedStr(memo1.lines[0]);
  ADOQuery1.Filtered := True;
end;
Filtra el contenido de la primera linea del memo?
Ahora lo que no me explico es para que se necesita colocar la informacion primero en un memo y luego en el dbgrid y no de una vez?
Sera para darle un vistazo previo?
Saludos
Responder Con Cita
  #15  
Antiguo 08-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Caral
Ahora lo que no me explico es para que se necesita colocar la información primero en un memo y luego en el dbgrid y no de una vez?

Al principio me pregunte lo mismo pero me respondí solito... Quizá sea porque alguna persona exporta los códigos desde otra aplicación a txt y es ese txt el que el programa de nuestro compañero MikyVato debe leer y compararlo con la base de datos para guardar algún tipo de trazabilidad en los datos de manera pues que queden coherentes.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #16  
Antiguo 08-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El commaText del memo o un stringlist no sirve.

Queremos (según mi código) que la consulta quede así:
Código SQL [-]
select * from tabla where codigo in ('codigo1', 'codigo2', 'codigo3');

Si usamos commatext, quedaría así:
Código SQL [-]
select * from tabla where codigo in (codigo1, codigo2, codigo3);
es decir, falta encerrar cada elemento entre comillas simples. Además commaText tiene el horroroso fallo (creo recordar) de usar tambien el espacio como separador de cadenas, así que al tiempo de recuperar los datos destrozaría el invento con un campo que se llame [Nombre Cliente] y si, uso corchetes ya que Access lo permite así.

Código Delphi [-]
var filtro : string;
begin
filtro := EmptyStr;
for i:= 0 to memo1.lines.count -1 do
  filtro := filtro + ','+QuotedStr(memo1.lines[i]);
delete(filtro,1,1);

query1.sql.text := 'select * from tabla where campo in ('+ filtro+')';
query1.Open;

EmptyStr es una constante, es idéntico a la asignación:
Código Delphi [-]
 filtro := '';
Pero el caso es que me gusta mucho el nombre de esa constante jejeje.

Cita:
El Segundo no corre, me aparece un error de compilacion en la línea que dice:
En el código de jhonny el error es que falta un signo de "+" después de la palabra "filtro" (además del comentado adoquerrrrrry jeje).

Debe decir:
Código Delphi [-]
ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo = ('+ filtro+')';
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
Antiguo 08-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Es gracioso como un codigo sencillo nos haga cometer tantos errorsillos de sintaxis

Cita:
Empezado por Lepe
Debe decir:

Código Delphi [-]
ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo = ('+ filtro+')';
Si te fijas bien en el codigo sql que acabas de colocar haz cometido tambien un errorsillo de sintaxis y es que en lugar de "=" debe ir "in" , y debe ser asi:
Código Delphi [-]
ADOQuerry.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo in ('+ filtro+')';

Y bueno aun asi podria seguir un error, en caso de que el ADQuerry en realidad si este mal escrito
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 08-02-2007 a las 16:00:03.
Responder Con Cita
  #18  
Antiguo 08-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
jhonny es que nuestro[modo EGO=on] nivel de abstracción es muy elevado... eso son nimiedades[/modo EGO=off]

En serio, este tipo de errores son los que nos vuelven locos, siempre pensamos que son otras cosas de más envergadura.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #19  
Antiguo 08-02-2007
MikyVato MikyVato is offline
Miembro
 
Registrado: mar 2005
Posts: 39
Poder: 0
MikyVato Va por buen camino
Vaya, el Error del principio es tipografico pero esta solo en el Foro, tanto el "=" como el Querry, voy a colocar el código tal cual lo tengo en mi Soft (Nada como Copiar y Pegar)

Código Delphi [-]
var
 filtro:string;
 i:integer;
begin
   filtro := EmptyStr;

   if OpenArch.Execute then
     begin
       MArch.Lines.LoadFromFile(OpenArch.FileName);
       MArch.Enabled := False;
     End;
   
   for i:=0 to MArch.Lines.count -1 do
      filtro := filtro +', '+QuotedStr(MArch.lines[i]);
   delete(filtro,1,1);

   DMRomaneo.ADOQArticulos.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo in ('+ filtro+')';
   DMRomaneo.ADOQArticulos.Open;
end;

Tiene que ir en el MEMO por una cuestion de Control, es como dice jhonny, el TXT es generado por otro porg y debe ser comparado con la DB.

Esto es solo a modo aclarativo ya que los primeros errores mensionados ya estan solucionados, faltaba el signo "+" al final, una vez solucionado mi prog corre pero larga un error de ODBC

"no coinciden los tipos de datos en la Expresion de criterio"

Creo que se refiere a que los campos de la Tabla no coinciden, pero lo he verificado y la verdad coinciden hasta con las letras mayusculas, o es por que los tipos no coinciden integer y otro tipo string??

Prometo prender belas y colgar mi proyecto en este hilo solo tiene que funcionar............

Gracias Totales x la buena Onda
Responder Con Cita
  #20  
Antiguo 08-02-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por MikyVato
o es por que los tipos no coinciden integer y otro tipo string??
Tu lo haz dicho , en ese caso debes quitar las comillas sencillas del codigo otorgado por Lepe osea que la cosa quedaria asi (Y espero no equivocarme de nuevo en la sintaxis ):

Código Delphi [-]
for i:=0 to MArch.Lines.count -1 do
      filtro := filtro +', '+MArch.lines[i];
   delete(filtro,1,1);
   DMRomaneo.ADOQArticulos.SQL.Text := 'select Codigo,Descripcion from Articulo where Codigo in ('+ filtro+')';
   DMRomaneo.ADOQArticulos.Open;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 08-02-2007 a las 22:07:27.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como puedo empezar a desarrollar Neiro Internet 2 10-10-2006 17:14:24
¿Como empezar bien? MakinaX Varios 1 03-06-2006 13:30:13
Como empezar con Delphi??? @padawan@ Varios 3 11-01-2006 19:02:47
Comó empezar con Quick Report lucasarts_18 Impresión 2 16-04-2005 20:20:09
Como empezar una aplicación web rfernandez Internet 2 10-01-2004 02:38:05


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


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