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 24-09-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 20
Abuelo7 Va por buen camino
Hola Caro.
Muchas gracias.

Probaré como me dices.

Como podrás observar en mi código, lo que hace es buscar frases exactas en la tabla1 y en la tabla3 y las respuestas están en tabla2 y tabla4, respectivamente.

Mi idea es si no encuentra la frase exacta, separar las palabras de la frase y buscar dichas palabras una por una, buscando la palabra clave.

Saludos
Responder Con Cita
  #2  
Antiguo 24-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Cita:
Empezado por Abuelo7 Ver Mensaje
Mi idea es si no encuentra la frase exacta, separar las palabras de la frase y buscar dichas palabras una por una, buscando la palabra clave.
Para esta parte podrías hacer algo así:

Código Delphi [-]
 .......................
 sl := TStringList.Create;
 sl.Delimiter := #32;
 sl.DelimitedText := Edit1.Text;
 //Añadimos el contenido completo del Edit en nuestra primera posición
 // del StringList para que sea el primero en compararse
 sl.Insert(0,Edit1.Text);

 try
  Memo1.Lines.Add(Edit1.Text);
  indice := -1;
  Recorremos hasta que encuentre
  Repeat
   Inc(Indice);   
  Until Not (Table1.Locate('palabra', sl[Indice], [loCaseInsensitive])) and (Indice//

   if Indice>=0 then //si fuera -1 es porque no ha encontrado
   begin
    if (Table2.Locate('NUMERO', Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then
     begin
      sl.Delete(Indice); //borramos la palabra clave de sl
      respuesta := Table2.fieldByName('RESPUESTA').AsString;
      
      Cadena := '';
      for i:=0 to sl.Count-1 do
       Cadena := Cadena+sl[i];
      respuesta := StringReplace(respuesta,'*',Cadena,[rfIgnorecase,rfReplaceAll]);
      showmessage(respuesta);
     end;
   end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 24-09-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 20
Abuelo7 Va por buen camino
Hola Caro.
Gracias, mañana lo pruebo y te digo como me vá.

Una cosa.

Si a tí o a alguien le interesa el programa que tengo hecho en Clipper, os lo puedo pasar para que veais. Es estupendo como funciona.

Como no sé si aquí se pueden pasar links, y lo tengo colgado en rapidshare, si interesa mandarme un privado y os paso el link.

Gracias una vez más

Saludos.

Manuel
Responder Con Cita
  #4  
Antiguo 25-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Cita:
Empezado por Abuelo7 Ver Mensaje
Si a tí o a alguien le interesa el programa que tengo hecho en Clipper, os lo puedo pasar para que veais. Es estupendo como funciona.

Como no sé si aquí se pueden pasar links, y lo tengo colgado en rapidshare, si interesa mandarme un privado y os paso el link.
Si quieres puedes poner el link para descargar en este mismo hilo Manuel .

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 25-09-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 20
Abuelo7 Va por buen camino
Hola Caro.

Te adjunto el link al programa Zebal.

Verás que están las tablas que utiliza. Tengo que depurarlas porque hay algunas frases y respuestas que son un poco bestias y fuera de lugar.

Ya me comentaras que te parece.

http://rapidshare.com/files/133851694/Zebal3.rar

Saludos

Manuel
Responder Con Cita
  #6  
Antiguo 25-09-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 20
Abuelo7 Va por buen camino
Hola amiga Caro.

Podrías revisarme este código. Me dá una respuesta que no concuerda y además me repite en el Memo el Edit1 al final de la respuesta.
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
        sl : TStringList;
        Cadena, respuesta, pregunta : String;
        i : Integer;
         Indice : Integer;
begin
        If Key <> #13 then Exit;
        Table1.Open;
        Table2.Open;
        sl := TStringList.Create;
        sl.Delimiter := #32;
        sl.DelimitedText := Edit1.Text;
        sl.Insert(0,Edit1.Text);
try
        Memo1.Lines.Add(Edit1.Text);
        Indice := -1;
        Repeat
                Inc(Indice);
        Until Not (Table1.Locate('PALABRA', sl[Indice],[loCaseInsensitive]));
        if Indice>=0 then
begin
        if (Table2.Locate('NUMERO', Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then
begin
        sl.Delete(Indice);
        respuesta := Table2.fieldByName('RESPUESTA').AsString;
        Cadena := '';
        for i:=0 to sl.Count-1 do
        Cadena := Cadena+sl[i];
        respuesta :=StringReplace(respuesta,'*',Cadena,[rfIgnorecase,rfReplaceAll]);
        Memo1.Lines.Add(respuesta);
        end;

        Table1.Close;
        Table2.Close;
        Edit1.Text := '';
        end;
        finally
        end;

end;


end.

Gracias.
Responder Con Cita
  #7  
Antiguo 25-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Hola de nuevo Manuel, ayer lo hice a la rapida el codigo y no me he dado cuenta que no funcionaba bien, mejor utiliza un for así si hubiera mas de una palabra clave despues lo vas acumulando.

Código Delphi [-]
try
   Memo1.Lines.Add(Edit1.Text);
   Indice := -1;
   For i := 0 to sl.Count-1 do
    begin
      if (Table1.Locate('PALABRA', sl[i],[loCaseInsensitive]) then
        begin
          Indice := i;
          break;
        end;
    end;//for

    if Indice>=0 then
     begin
        if (Table2.Locate('NUMERO', Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then
begin
        sl.Delete(Indice);
        if Indice<>0 then //Si no fuera el texto completo
         sl.Delete(0);

        respuesta := Table2.fieldByName('RESPUESTA').AsString;
        Cadena := '';
        for i:=0 to sl.Count-1 do
        Cadena := Cadena+sl[i];
        respuesta :=StringReplace(respuesta,'*',Cadena,[rfIgnorecase,rfReplaceAll]);
        Memo1.Lines.Add(respuesta);
        end;

        Table1.Close;
        Table2.Close;
        Edit1.Text := '';
        end;
        finally
        end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
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
Acceder al resumen de las propiedades de archivos turminator API de Windows 1 07-03-2008 18:12:02
Resumen de funcionalidad de Firebird DarKraZY Firebird e Interbase 0 13-11-2006 09:05:39
Resumen memo en dbgrid nachito_tuc OOP 4 27-09-2006 15:27:21
Resumen de la Conferencia ECO II con John Kaster. Epachsoft Noticias 5 30-06-2005 11:14:07
Consulta resumen con subconsulta(ayuda) cmena SQL 5 01-07-2004 00:18:21


La franja horaria es GMT +2. Ahora son las 19:09:53.


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