Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Cambiar Locate por Consulta (https://www.clubdelphi.com/foros/showthread.php?t=61111)

Abuelo7 26-10-2008 13:54:49

Cambiar Locate por Consulta
 
Hola a todos.

Tengo una aplicación conectada a una BD, con 2 tablas.
Utilizo Locate en el desarrollo de la misma y quisiera cambiarlo por consultas con SQL.

Lo he intentado de varias formas, pero no he sido capaz de conseguirlo.

Este es el trozo de código por si pueden ayudarme.
Código Delphi [-]
Try
    Memo1.Lines.Add(User + ' : '+Edit1.Text);
    Indice := -1;
    for i := 0 to sl.Count-1 do
     begin
      If (ADOQueryPreguntas.Locate('PALABRA', sl[i],[loCaseInsensitive]))then
       begin
         Indice := i;
         break;
       end;//if
     end;//for



     if Indice>=0 then
      begin
        if 

(ADOQueryrRespuestas.Locate('NUMERO',ADOQueryPreguntas.fieldByName('NUMERO').AsString, 

[loCaseInsensitive])) then
          begin
            //ShowMessage(sl[1]);
            sl.Delete(Indice);
            if Indice<>0 then
              sl.Delete(0);
            respuesta := ADOQueryrRespuestas.fieldByName('RESPUESTA').AsString;

Muchas gracias y saludos.

Manuel

Neftali [Germán.Estévez] 26-10-2008 17:45:56

Cita:

Empezado por Abuelo7 (Mensaje 322405)
Lo he intentado de varias formas, pero no he sido capaz de conseguirlo.

¿Y exactamente qué problema tienes? ¿Error? ¿No sale nada?

En principio sería algo así:

Código Delphi [-]
SQL := 'SELECT top 1 * FROM TABLA WHERE NUMERO=' + 
  ADOQueryPreguntas.fieldByName('NUMERO').AsString;
Basta con que utilices esta SQL en un TQuery/TADOQuery/TIBQuery/... y deberías poder encontrar el registro

Abuelo7 26-10-2008 19:05:49

Hola Neftali.

Gracias por contestar.
He intentado hacer lo que me has indicado, pero creo que no lo hago bien, o mejor dicho que lo hago todo mal. Disculpa.

He intentado sustituir la linea de If por esto:
Código Delphi [-]
Try
    Memo1.Lines.Add(User + ' : '+Edit1.Text);
    Indice := -1;
    for i := 0 to sl.Count-1 do
     begin
     //AdoQuery1.Active := False;
     If SQL:= 'SELECT top 1 * FROM TABLA WHERE NUMERO='+ ADOQueryPreguntas.fieldByName('NUMERO').AsString then
      //If (ADOQueryPreguntas.Locate('PALABRA', sl[i],[loCaseInsensitive]))then
       begin
         Indice := i;
         break;
       end;//if
     end;//for

El error que me da es:
Type of expression must be BOOLEAN

Gracias por tu atención.

Manuel

Delphius 26-10-2008 20:11:03

Hola Abuelo7,
¿Podrías describirnos lo que deseas hacer?

El uso de TQuerys es un tanto diferente al de TTable. Los pasos en general son:

1. Cerrar el TQuery: Query1.Close;
2. Si es necesario, limpiar la SQL que tiene: Query1.SQL.Clear;
2. Asignarle la nueva SQL a ejecutar: Query1.SQL.Add('');
3. Abrir la consulta o ejecutarla: Query1.Open; ó Query1.Execsql;

Se emplea Open únicamente cuando la instrucción SQL corresponde a un SELECT, en otro caso es Execsql.

Luego, para tener acceso a los datos regresados por la consulta (en caso de ser un SELECT) se procede de igual manera que con TTable:
Código Delphi [-]
Query1.FieldByName('NombreCampo').AsXXXX
Query1.Fields[Numero]
Etc...

Sugiero que leas un poco la ayuda que proporciona Delphi al respecto sobre este componente. Si usas buscas en el foro con la palabra clave TQuery encontrarás muchos hilos en donde hay mucho código con el que puedes ilustrarte y comprender el uso del componente.

Si nos describes que deseas hacer te podremos ser de mayor ayuda.

Saludos,

olbeup 26-10-2008 20:18:36

Si lo que quiere es localizar un numero que empiece a partir de en adelante:
SELECT TOP 1 * FROM Tabla WHERE NUMERO LIKE '12%'

Si lo que quiere es localizar un numero que contenga el 12 en cualquier parte:
SELECT TOP 1 * FROM Tabla WHERE NUMERO LIKE '%12%'

Un saludo.

Abuelo7 26-10-2008 20:25:47

Hola Delphius.

Lo quiero hacer es lo siguiente:

El código insertado al principio del hilo, lo que hace el locate es que busca una palabra ingresada en el Edit, en la tabla preguntas. En dicha tabla esa palabra lleva asociado un número.
En el siguiente If busca ese número en la tabla respuestas y ese número lleva asociada la frase de respuesta.

Lo que quiero hacer es cambiar esas instrucciones Locate por consultas y obtener el mismo resultado.

Gracias amigo.

Saludos.

TOPX 26-10-2008 22:35:16

Hola,

Entonces, tal vez la info adicional que 'necesitamos' para comprender el cambio de Locates a SQLs, parte desde:

http://www.clubdelphi.com/foros/show...475#post316815

¿Verdad?

Abuelo7 26-10-2008 23:07:17

Ok. Topx.

La app funciona ya perfectamente, pero para poder elegir entre las varias respuestas para una misma pregunta es mejor trabajar con consultas que con locate.

Saludos.

Caral 26-10-2008 23:24:02

Hola
Un ejemplo sencillo, no se si esto es lo que buscas.
Se escribe una palabra en un edit y encuentra y muestra la respuesta relacionada a un numero en otro edit.
Saludos

Neftali [Germán.Estévez] 27-10-2008 08:20:43

Cita:

Empezado por Abuelo7 (Mensaje 322450)
He intentado hacer lo que me has indicado, pero creo que no lo hago bien, o mejor dicho que lo hago todo mal. Disculpa.

He intentado sustituir la linea de If por esto:


Bueno, aparte de lo que ya te han contestado, voy a intentar ampliar lo que te dije. Para conseguir algo similar al LOCATE, se trata de lanzar la consulta SQL que te comenté y luego comprobar si ha devuelto algun registro.

Código Delphi [-]
// MOntar la SQL para buscar
SQL:= 'SELECT top 1 * FROM TABLA WHERE NUMERO='+ ADOQueryPreguntas.fieldByName('NUMERO').AsString;
// Asignarla a una Query y lanzarla
Query2.SQL.add(SQL);  // hay que asirnarle la conexion
// Buscar
Query2.Open;
// encontrado?
if not ((Query2.eof) and (Query2.Bof)) then begin
  // si entras aquí estás posicionado en el registro buscado
  ...
end;
No se si ahora ha quedado más claro.

Un saludo.


La franja horaria es GMT +2. Ahora son las 21:07:29.

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