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: 19
Abuelo7 Va por buen camino
Hola amiga Caro.
He probado el código que me has pasado y funciona perfectamente.

Ahora bien, tengo dudas de como insertarlo en el código que tengo.

Te lo paso.

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  var
        sl : TStringList;
        Cadena, respuesta, pregunta : String;
         i : Integer;

begin
  // si no es la tecla que buscamos, salimos y listo ;-)
  if Key <> #13 then Exit;


  // abrimos tablas
  Table1.Open;
  Table2.Open;
  Table3.Open;
  Table4.Open;


  // ponemos el código en un bloque try..finally para asegurarnos de que pase lo que pase éstas se cierren
  try
    // si localizamos lo buscado en Tabla1 y su resultado en Tabla2, lo añadimos al Memo1
    // Este if funciona debido a que SOLO se evaluará la segunda condición si la primera
    // se cumple (por eso de ser un AND) y si la primera se cumple, ya estamos posicionados
    // en el registro buscado (o al menos eso dice la teoría, no lo he probado xD)
      Memo1.Lines.Add(Edit1.Text);

    if (Table1.Locate('palabra', Edit1.Text, [loCaseInsensitive])) and
       (Table2.Locate('NUMERO', Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then

        Memo1.Lines.Add(Table2.fieldByName('RESPUESTA').AsString)
    else
    If (Table3.Locate('palabra',Edit1.Text,[loCaseInsensitive])) and
       (Table4.Locate('NUMERO',Table3.fieldByName('NUMERO').AsString,[loCaseInsensitive])) then
       Memo1.Lines.Add(Table4.fieldByName('RESPUESTA').AsString)
    else
    if Edit1.Text='adios' then
    Memo1.Lines.Add('Hasta la próxima')
    else
        Memo1.Lines.Add('No entiendo la frase.Podría explicármelo de otra forma?');
  finally
    Table1.Close;
    Table2.Close;
    Table3.Close;
    Table4.Close;
    Edit1.Text :='';
  end;
end;


end.

Gracias
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: 22
Caro Va por buen camino
Hola de nuevo Manuel, en tu codigo quedaría mas o menos así.

Código Delphi [-]
var
 sl : TStringList;
 Cadena, respuesta, pregunta : String;
 i : Integer;
begin
 // si no es la tecla que buscamos, salimos y listo ;-)
 if Key <> #13 then Exit;
 // abrimos tablas
 Table1.Open;
 Table2.Open;
 Table3.Open;
 Table4.Open;
 
 sl := TStringList.Create;
 sl.Delimiter := #32;
 sl.DelimitedText := Edit1.Text;
 pregunta := sl[0];
 
 try
  Memo1.Lines.Add(Edit1.Text);
  if (Table1.Locate('palabra', pregunta, [loCaseInsensitive])) and
     (Table2.Locate('NUMERO', Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then
   begin
    sl.Delete(0);
    //Suponiendo que tu campo de la tabla2 se llma respuesta
    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
  else
   If (Table3.Locate('palabra',Edit1.Text,[loCaseInsensitive])) and
    Memo1.Lines.Add('Hasta la próxima')
   else
    Memo1.Lines.Add('No entiendo la frase.Podría explicármelo de otra forma?');
 finally
  Table1.Close;
  Table2.Close;
  Table3.Close;
  Table4.Close;
 end;
end;

Conste que solo es si la primera palabra es la que se esta buscando en la tabla de preguntas, debes analizar para todos los casos que dije, pero como ejemplo y para que veas como funciona te servira.

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: 19
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
  #4  
Antiguo 24-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
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
  #5  
Antiguo 24-09-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 19
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
  #6  
Antiguo 25-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
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
  #7  
Antiguo 25-09-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 19
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
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 00:54:17.


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