Bueno a ver, advierto que yo no manejo C. Sólo sé que cambiando
. por
-> se ve muy semejante a Pascal
Un Query es un DataSet. Un DataSet es una representación de datos tabulares (filas y columnas), normalmente provenientes de una base de datos.
Pero para acceder a los datos no podemos hacerlo como si de una matriz o arreglo bidimensional se tratase. Un DataSet sólo muestra una fila a la vez.
Para acceder a las distintas filas de un DataSet utilizamos su método Next que pasa a la siguiente fila. Sabemos que hemos llegado al final cuando su propiedad EOF es
true.
Para acceder a las distintas celdas (campos) de la fila actual usamos el método FieldByName del DataSet. El método recibe el nombre del campo y devuelve un objeto TField. Un TField es la representación genérica de un campo. Como un campo puede ser de muchos tipos de datos, debemos indicar cuál es el que esperamos. Esto lo hacemos usando una de sus propiedades As
Tipo: AsInteger, AsString, AsBoolean, AsFloat, etc.
En resumen, para acceder, por ejemplo, a un campo entero de la fila actual usamos:
Código:
DataSet.FieldByName('campo').AsInteger
Esto podemos asignárselo a cualquier variable de tipo Integer.
Si la consulta SQL que está haciendo sólo te devuelve un registro entonces apenas actives el Query, el renglón activo será ese y podrás usar FieldByName para acceder a su valor. Pero recuerda, ¿cuál valor? Tu consulta pide todos los campos así que en realidad son varios valores. En FieldByName especificas cuál quieres.
Por otra parte, construcciones como:
Código:
"SELECT * from Tab where Codigo =" + Edit1->Text;
son realmente muy malas. ¿Por qué? Por que condenas eternamente tu aplicación a la interfaz de usuario. Trata de
nunca usar sentencias SQL mezcladas con código de la interfaz. En su lugar utiliza parámetros en tus consultas:
Código SQL
[-]
SELECT * from Tab where Codigo = :COD
Los dos puntos antes de COD indican al Query que COD es un parámetro que debe llenarse
antes de activar la consulta. Para llenarlo usas:
Código:
Query.ParamByName('COD').AsInteger = Edit1->Text;
La ventaja es que así tu Query ya no depende en lo absoluto de Edit1, es simplemente un objeto que espera un parámetro y luego se activa.
Si el parámetro lo tomas de un Edit u otro control o de una variable, es indistinto, permitiéndote así, manipular el código de la interfaz de usuario sin alterar para nada los objetos encargados de las consultas.
// Saludos