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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2018
Copernico Copernico is offline
Miembro
 
Registrado: Feb 2017
Posts: 10
Poder: 0
Copernico Va por buen camino
Elegir registro con un AdoQuery

Buenos días.

Ante todo disculpad si no me explico bien o si lo que pregunto es algo muy básico pero no se como poder hacerlo.

El caso es que tengo una tabla, "Categorías", con dos campos, "Código" y "Nombre", en la que contengo 4 registros.
Pongamos que cada uno de ellos tiene la siguiente estructura: Código = 1, Nombre = 'A'; Código = 2, Nombre = 'B'... así hasta cuatro.

Tengo mi AdoQuery en la que agrego una consulta sencilla para ver los datos: qyCategorias.SQL.Add('Select * from Categorias');

Mi pregunta es: ¿Cómo puedo ver los datos de un registro en concreto? sin saber ni el código, ni el nombre, ni nada.

Por ej: Quiero almacenar en un TEdit el nombre de la segunda categoría ('B'), sin poder acceder por parámetros a ese valor ya que desconozco su código y su nombre.

Desconozco si hay algo como "Edit1.Text := qyCategoriasNombre[1].Value" (Ya se que esto es erróneo, es para que captéis la idea).

Gracias de antemano.
Saludos.
Responder Con Cita
  #2  
Antiguo 14-06-2018
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: Jul 2005
Ubicación: Murcia (España)
Posts: 909
Poder: 14
ElDioni Va por buen camino
Hola, si te he entendido bien lo que buscas es lo siguiente:


Código Delphi [-]
Edit1.Text := qyCategoriasNombre.Fields[1].AsString;


Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #3  
Antiguo 14-06-2018
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: 15.657
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Si sabes los nombres de los campos también puedes acceder de esta manera a los valores del registro actual, sea cual sea:


Código Delphi [-]
 sCod := qyCategorias.FieldByName('Codigo').AsString;
 sNombre := qyCategorias.FieldByName('Nombre').AsString;
__________________
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
  #4  
Antiguo 14-06-2018
Copernico Copernico is offline
Miembro
 
Registrado: Feb 2017
Posts: 10
Poder: 0
Copernico Va por buen camino
Cita:
Empezado por ElDioni Ver Mensaje
Hola, si te he entendido bien lo que buscas es lo siguiente:


Código Delphi [-]
Edit1.Text := qyCategoriasNombre.Fields[1].AsString;


Saludos.
Hola y gracias por contestar.

Claro, de esta manera accedería a la información del segundo campo, ¿pero para acceder al segundo campo de la segunda línea?

La idea es que tengo cuatro TEdits, y en cada uno de ellos quiero poner el nombre de cada categoría ejecutando únicamente la query que antes he mencionado. Si pongo algo como me has aconsejado:

Código Delphi [-]
Edit1.Text := qyCategoriasNombre.Fields[0].AsString;
Edit2.Text := qyCategoriasNombre.Fields[1].AsString;
Edit3.Text := qyCategoriasNombre.Fields[2].AsString;
Edit4.Text := qyCategoriasNombre.Fields[3].AsString;

No podría ser, acabaría dando error, ya que intento acceder a registros que no existen. Lo que quiero es meter el nombre de cada categoría.
Responder Con Cita
  #5  
Antiguo 14-06-2018
Copernico Copernico is offline
Miembro
 
Registrado: Feb 2017
Posts: 10
Poder: 0
Copernico Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si sabes los nombres de los campos también puedes acceder de esta manera a los valores del registro actual, sea cual sea:


Código Delphi [-]
 sCod := qyCategorias.FieldByName('Codigo').AsString;
 sNombre := qyCategorias.FieldByName('Nombre').AsString;
Hola, gracias por contestar.

Si, pero quiero acceder a uno en concreto para dejarlo en un sitio en concreto. Sin saber ni el código ni el nombre.
Responder Con Cita
  #6  
Antiguo 14-06-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.394
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Copernico Ver Mensaje
Si, pero quiero acceder a uno en concreto para dejarlo en un sitio en concreto. Sin saber ni el código ni el nombre.
A uno en concreto, ok, ¿de forma aleatoria? ¿el que ocupa una posición en la lista? ¿el que tenga nombre más largo? ¿alfabéticamente? ... Algo tendrás que saber para decidir qué buscar.
O eso, o no te hemos entendido.
Responder Con Cita
  #7  
Antiguo 14-06-2018
Copernico Copernico is offline
Miembro
 
Registrado: Feb 2017
Posts: 10
Poder: 0
Copernico Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
A uno en concreto, ok, ¿de forma aleatoria? ¿el que ocupa una posición en la lista? ¿el que tenga nombre más largo? ¿alfabéticamente? ... Algo tendrás que saber para decidir qué buscar.
O eso, o no te hemos entendido.
Hola gracias por contestar.

Perdona si no he sido claro. Quiero acceder siempre a la información del segundo campo "Nombre".

Tengo cuatro Filas:

Código Nombre

| 1 | | A |
| 2 | | B |
| 3 | | C |
| 4 | | D |

Por ejemplo, quiero sacar la información del campo "Nombre" del Código cuyo valor es 2. Luego quiero obtener 'B'.
El problema es que desconozco el Código (no siempre es númerico incremental, esto lo he puesto para el ejemplo) y desconozco el valor del Nombre. Solo se que es el segundo campo de la segunda fila.

Pero no tiene porque ser de la segunda en concreto, puede ser de la cuarta, o de la tercera, o de la decimoquinta si hubiera, es decir que quiero hallar esa información según el numero de una fila aleatoria.

Gracias y lamento no explicarme mejor.
Responder Con Cita
  #8  
Antiguo 14-06-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.394
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
O sea, que te devuelva el valor del campo "nombre" de un registro... cualquiera
Piensa un poco en lo que estás diciendo
Responder Con Cita
  #9  
Antiguo 14-06-2018
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: 15.657
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por Copernico Ver Mensaje
Claro, de esta manera accedería a la información del segundo campo, ¿pero para acceder al segundo campo de la segunda línea?
De esta forma accedes al segundo campo del regitro activo.
Si piensas en los registros de un ADOQuery (los que has obtenido utilizando una SELECT), NO puedes acceder a todos a la vez,
sino que puedes acceder al que está activo.
Si quieres moverte por los registros debes mover ese puntero que apunta à la línea activa.
Cita:
Empezado por Copernico Ver Mensaje

La idea es que tengo cuatro TEdits, y en cada uno de ellos quiero poner el nombre de cada categoría ejecutando únicamente la query
que antes he mencionado. Si pongo algo como me has aconsejado
Código Delphi [-]
Edit1.Text := qyCategoriasNombre.Fields[0].AsString; 
Edit2.Text := qyCategoriasNombre.Fields[1].AsString; 
Edit3.Text := qyCategoriasNombre.Fields[2].AsString; 
Edit4.Text := qyCategoriasNombre.Fields[3].AsString;

Con esto accedería a los diferentes cam,pos de la línea o el registro activo.
Si quieres el campo nombre de todos los registros de la query, debes hacer el recorrido que te he comentado. Algo así (de memoria):


Código Delphi [-]
  // Colocarte en el primer registro
  qyCategorias.First;   
  // Mientra hay regisrros en la query...
  while (not qyCategorias.eof) do begin
    // para el activo me quedo con el nombre y lo muestro
    ShowMessage('Nombre: ' + qyCategorias.FieldByName('Nombre').AsString);
    // siguiente registro
    qyCategorias.Next;
  end;
__________________
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
  #10  
Antiguo 15-06-2018
orodriguezca orodriguezca is offline
Miembro
 
Registrado: Jan 2009
Posts: 179
Poder: 10
orodriguezca Va por buen camino
Hola Copernico, Estoy de acuerdo con los compañeros que ya han hecho sus aportes que el planteamiento de tu problema es algo desquiciado; pero bueno, para seguirte la corriente, y suponiendo que entendí el problema, propongo el siguiente fragmento de código como ejemplo de una posible solución;

Código Delphi [-]
begin
  ADOQuery1.Close;
  AdoQuery1.CursorLocation := clUseClient; // para que el cursor, de los datos,
                                           // esté lado del cliente

  AdoQuery1.CursorType := ctKeyset; // hace un snapshot de los datos, de esta
                                    // manera los datos se puede recorrer en
                                    // cualquier dirección, es decir, podemos
                                    // avanzar o retroceder.

  ADOQuery1.SQL.Text := 'Select * from Categorias';
  ADOQuery1.Open;
  ADOQuery1.Last; // Forzamos a cargar todos los registros en memoria porque el
                  // cursor está del lado del cliente.  Casi siempre funciona!.
                  // Es la forma confiable de saber cuantos registros
                  // devolvió la consulta SQL usando el método AdoQuery1.RecordCount.


  AdoQuery1.RecNo := 2; // Nos posicionamos en la segunda fila recuperada,
                        // la segunda categoria, suponiendo que exista!.

  // Obtenemos el nombre de la categoría
  Edit1.Text := ADOQuery1.FieldByName('Nombre').AsString;
end;

Nota: Una sentencia SQL select sin un order by, en la mayoría de los motores de bases de datos, puede regresar información en un orden totalmente aleatorio y no coincidir con el orden en que suponemos esta grabada la información en la tabla, sobre todo cuando el motor de bases de datos está haciendo uso de multithreading y/o paralelismo y sobre todo si se está haciendo reuso de registros borrados.
Responder Con Cita
  #11  
Antiguo 19-06-2018
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: Jul 2005
Ubicación: Murcia (España)
Posts: 909
Poder: 14
ElDioni Va por buen camino
A ver así.

Código Delphi [-]
procedure ColocarNombres();
var
x:integer;
begin
QueryCategorias.First;
x:=1;
While QueryCategorias.Eof=false do
  begin
    TEdit(FindComponent('Edit'+inttostr(x))).Text:=QueryCategorias.Fields[1].AsString;
    inc(x);
    QueryCategorias.Next;
  end;


Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Elegir un registro de toda la tabla sin restricciones bulc Varios 2 11-06-2015 13:51:28
Seleccionar primer registro con ADOQuery radenf Varios 8 02-11-2013 12:50:42
Elegir Carpeta madiazg Varios 3 13-10-2008 19:36:32
¿Cómo refrescar un registro de una adoQuery que ataca SQL Server? socger Conexión con bases de datos 2 28-05-2008 12:59:15
¿Que elegir? sinopsis Varios 6 30-01-2005 20:11:51


La franja horaria es GMT +2. Ahora son las 03:58:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi