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
if Key <> #13 then Exit;
Table1.Open;
Table2.Open;
Table3.Open;
Table4.Open;
sl :=TStringList.Create;
sl.Delimiter := #32;
sl.DelimitedText := Edit1.Text;
sl.Insert(0,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;
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.