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 26-10-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 19
Abuelo7 Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 26-10-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Abuelo7 Ver Mensaje
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
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 26-10-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 19
Abuelo7 Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 26-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 26-10-2008
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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.
Responder Con Cita
  #6  
Antiguo 26-10-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 19
Abuelo7 Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 26-10-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
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?
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #8  
Antiguo 26-10-2008
Abuelo7 Abuelo7 is offline
Miembro
 
Registrado: ene 2006
Ubicación: Igualada(Barcelona) Spain
Posts: 51
Poder: 19
Abuelo7 Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 26-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
__________________
Siempre Novato

Última edición por Caral fecha: 27-10-2008 a las 17:41:46.
Responder Con Cita
  #10  
Antiguo 27-10-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Abuelo7 Ver Mensaje
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Locate mauqu Varios 9 06-08-2007 17:27:20
Cambiar año mediante una consulta Luana Tablas planas 2 26-01-2006 21:20:02
Consulta SQL con Locate Ivan_25 C++ Builder 5 17-11-2005 08:45:37
Consulta SQL para cambiar el orden natural de los campos de una tabla txemag Firebird e Interbase 4 23-07-2004 19:15:08
cambiar tipo de dato en consulta osvrom Tablas planas 2 27-05-2003 17:49:52


La franja horaria es GMT +2. Ahora son las 13:41:36.


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