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 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.

Has bajado el programa Zebal ?

Que Tal?

Saludos

Manuel
Responder Con Cita
  #2  
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 otra vez Caro.

He estado probando el último código pero hay algo que no marcha.No localizo donde está el fallo.

Cuando me dá la respuesta, me aparece la respuesta+elEdit1+la última palabra.

Frase ejemplo:

estoy mal respuesta: cuanto hace que estas estoymalmal.

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(1,Edit1.Text);
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;
        if Indice>=0 then
begin
        if (Table2.Locate('NUMERO',Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then
begin
        sl.Delete(Indice);
        if Indice<>0 then
        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,[rfReplaceAll,rfIgnoreCase]);
        Memo1.Lines.Add(respuesta);
        end;

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

end;


end.

Saludos
Responder Con Cita
  #3  
Antiguo 26-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
Has bajado el programa Zebal ?

Que Tal?
Hola Manuel si lo he bajado gracias, pero no lo he podido ver, yo creo el fin de semana tratare de verlo.

Sobre la parte que no te funciona, en el primer codigo recorriendo las palabras para hacer la búsqueda, no se estaba controlando de eliminar la frase completa ya que con el sl.Insert(0, Edit1.Text) lo insertabamos al principio para que haga la busqueda primero por la frase completa y luego por las palabras separadas, al encontrar en un indice que no sea el 0 osea que no sea la frase completa teníamos que eliminar lo que se tenía en el indice 0 para luego pasar recien lo que quedaba a la respuesta, es por eso que he aumentado

Código Delphi [-]
    .....................
    //Eliminamos la palabra que se encuentra en Indice osea la que ha encontrado en la busqueda
    sl.Delete(Indice); 
 
   //Si el Indice no fuera el 0 osea la frase completa,
   // eliminamos esa frase completa, para que no nos repita en la respuesta
    if Indice<>0 then
      sl.Delete(0);
 
    respuesta := Table2.fieldByName('RESPUESTA').AsString;
   ....................


En tu codigo en la parte del Insert le has puesto que se inserte en la posicion 1, cambialo por 0, ya que estamos preguntando por esa posición 0 si fuera frase completa.

Código Delphi [-]
  //Con esto insertamos en la primera posición de nuestra lista
 sl.Insert(0,Edit1.Text);

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
  #4  
Antiguo 28-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.

Después de las últimas modificaciones he intentado ampliarlo a 4 Tablas.
Esto es la 1 con respuestas en la 2 y la 3 con respuestas en la 4.
En principio no me funciona, debe haber algo que se me escapa.
Asimismo he encontrado un fallo en la búsqueda de frases completas.
el ejemplo que me ha salio es el siguiente:
Hay una frase que es 'quien eres' que tiene una respuesta.
Hay otra frase que es 'quien eres tu' que tiene una respuesta.
Cuando introduces esta última frase te dá la respuesta de la primera.
Parece ser que no busca las 3 palabras de la frase, lo que hace es que cuando las 2 primeras palabras tienen una respuesta, no busca mas.

Te paso el código con las 4 Tablas para que le des un vistazo.

No sé como agradecerte lo que estás haciendo por mi proyecto.
Ten por seguro que cuando esté finalizado, si vivo para contarlo, voy a hacer una mención especial a tí y lógicamente a todos los que habéis tenido la paciencia de atenderme y ayudarme.

Código Delphi [-]

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  var
        sl : TStringList;
        Cadena, respuesta, pregunta : String;
         i : Integer;
         Indice : 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;
  sl.Insert(0,Edit1.Text);


  // 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);
      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;
        If Indice>=0 then
begin
       if (Table2.Locate('NUMERO', Table1.fieldByName('NUMERO').AsString, [loCaseInsensitive])) then
begin
        sl.Delete(Indice);
        if Indice<>0 then
        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,[rfReplaceAll,rfIgnoreCase]);
        Memo1.Lines.Add(respuesta);
        end;
 begin

    If (Table3.Locate('palabra',sl[i],[loCaseInsensitive])) then
        begin
        Indice := i;
        break;
        end;
        end;
        If Indice>=0 then
    begin
       if (Table4.Locate('NUMERO',Table3.fieldByName('NUMERO').AsString,[loCaseInsensitive])) then
       begin
        sl.Delete(Indice);
        if Indice<>0 then
        sl.Delete(0);
        respuesta :=Table4.fieldByName('RESPUESTA').AsString;
        Cadena :='';
        for i := 0 to sl.Count-1 do
        Cadena := Cadena+sl[i];
        respuesta :=StringReplace(respuesta,'*',Cadena,[rfReplaceAll,rfIgnoreCase]);
        Memo1.Lines.Add(respuesta);
        end
       Memo1.Lines.Add(Table4.fieldByName('RESPUESTA').AsString)
    end
    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?');
  end;

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

 end;
end.
Responder Con Cita
  #5  
Antiguo 30-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
Después de las últimas modificaciones he intentado ampliarlo a 4 Tablas.
Esto es la 1 con respuestas en la 2 y la 3 con respuestas en la 4.
No te endiendo muy bien, porque buscas en las demas tablas no sería mejor que guardaras todas las respuestas en una sola tabla y todas las preguntas en otra tabla, si es necesario mas tablas, ¿cual es la estructura de tus tablas y como deseas hacer la búsqueda?

Cita:
Empezado por Abuelo7 Ver Mensaje
Asimismo he encontrado un fallo en la búsqueda de frases completas.
el ejemplo que me ha salio es el siguiente:
Hay una frase que es 'quien eres' que tiene una respuesta.
Hay otra frase que es 'quien eres tu' que tiene una respuesta.
Cuando introduces esta última frase te dá la respuesta de la primera.
Parece ser que no busca las 3 palabras de la frase, lo que hace es que cuando las 2 primeras palabras tienen una respuesta, no busca mas.
De la forma en que te he puesto debería hacer la busqueda primero por "quien eres tu" y luego por "quien" despues por eres "eres" y despues por "tu", ese fallo te sale desde lo ultimo que te pase o con tus cambios.

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.

Última edición por Caro fecha: 30-09-2008 a las 16:23:17.
Responder Con Cita
  #6  
Antiguo 30-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.
El motivo de utilizar 4 tablas es que he aprovechado las que lleva el Zebal.
Los fallos se me producen después de los cambios que he hecho para utilizar las 4 Tablas.
Respecto al fallo hay lo siguiente:
En la tabla 1 está la pregunta 'quien eres' y la respuesta en la 2.
En la tabla 3 está la pregunta 'quien eres tu' y la respuesta en la 4.

Yo creía que primero buscaba la frase completa 'quien eres tu' y después 'quien eres' y después 'quien'.

No obstante creo que yo, al intentar adaptar las 4 tablas ha sido cuando lo he estropeado.

Perdona y gracias

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 15:47:47.


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