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)
-   -   una pregunta sobre ztable (https://www.clubdelphi.com/foros/showthread.php?t=57318)

aleja 11-06-2008 16:49:09

una pregunta sobre ztable
 
Hola, queria preguntar cual es la forma correcta de obtener el valor de un campo de una tabla usando ztable. Por ejemplo si quiero obtener el valor del ultimo registro pongo:

Código Delphi [-]
md.ztinformes.last;
ultimoinforme:=md.zinformes.fields[1].asinteger;

o se pone

Código Delphi [-]
md.ztinformes.last;
ultimoinforme:=md.zinformes.fieldsvalues[idinformes];

desde ya muchas gracias!! ;)

enecumene 11-06-2008 17:45:58

Hola,

Código Delphi [-]
ultimoinforme:=md.zinformes.fields[1].asinteger;
md.ztinformes.last;

Código Delphi [-]
ultimoinforme:=md.zinformes.fieldsvalues('idinformes');
md.ztinformes.last;

Saludos. ;)

aleja 11-06-2008 19:13:28

Hola enecumene, gracias por la respuesta, podrias explicarme porque el md.ztinformes.last, va despues? :confused:

enecumene 11-06-2008 19:52:18

Cita:

Empezado por aleja (Mensaje 292872)
Hola enecumene, gracias por la respuesta, podrias explicarme porque el md.ztinformes.last, va despues? :confused:

Sólo por seguridad, para asegurarnos de que primero seleccionas el campo y luego vaya al último registro. A mí en particular me ha sucedido unos cuantos problemitas al hacerlo de primero.

Saludos.

aleja 11-06-2008 20:43:29

Muchas Gracias!!!

Besos:p

Delphius 11-06-2008 20:46:46

Hola aleja,
Si tu duda pasa por la diferencia entre acceder en forma directa y la indirecta pues hay que ver el código fuente de ZTable.

Yo no uso Zeos, pero intuyo que el comportamiento es análogo a cualquier otro.

No existe demasiada diferencia entre uno y otro, pero si las particularidades de como llevar la programación pueden conducirte a optar un método por sobre el otro.

Cuando uno invoca al campo en forma directa, con el índice. Lo que hace es leer indistintamente el concepto al que representa. Se lee el campo que ocupa dicha posición. Es decir que no interesa si se llama IDCliente, o Descripción. Si el indice corresponde a una posición válida haces referencia al campo que ocupa dicha posición.

Con el segundo método, lo que hacemos es buscar al campo según su nombre, o el concepto al que representa. Esto es útil cuando estamos tratando con los campos en forma independientemente del lugar que ocupa el campo. Es así que si optamos por buscar el campo según el nombre no nos interesa saber si se trata del tercero, el segundo, el centésimo...

Internamente, el uso del segundo método hace uso del primero. Puesto que al suministrar el valor, debe chechear contra el arrays de campos para encontrar dicha referencia. A ver... no sono bien... El segundo método necesariamente debe chequear con todos los campos hasta encontrar el que se desea.

¿Cual es la ventaja de uno sobre el otro? Pues, el primero es directo. El segundo es más "lento" ya que debe buscarlo.

¿Cuando conviene usar uno y cuando el otro?
Y pues... depende. Pero unos buenos motivos para usar el segundo pueden ser:
1. Cuando la estructura de la base de datos es muy volátil. Es decir, existe el riesgo de que los campos cambien de lugar, que desaparezcan algunos... en fin... cuando no podemos garantizar de que en la posición estará disponible el campo que realmente necesitamos.
2. En ocaiones, el implementar un índice no nos ayuda a la comprensión del código (y del problema mismo). En ocasiones el ver un 1, u 50, o 100 nos lleva a preguntarnos ¿De donde sale ese número? ¿qué representa? En pocas, puede reducir la capacidad de comprensión, adaptación, y mantenimiento del código.

De igual manera podemos formular puntos a favor del primero por sobre el segundo:
1. El acceso es directo, nada de ciclos, nos vamos al grano.
2. Podremos afirmar con total certeza de que el campo al que hago alusión corresponde al campo IDCliente (por ejemplo). Se que nunca va a sufrir cambios la base de datos.

Espero que quede más claro.

Sino se entiende, avisa.
Saludos,

aleja 11-06-2008 21:03:07

Si, me quedo muy claro la diferencia, agradesco mucho que me expliques el concepto, que es exactamente lo que necesitaba. De a poco voy terminando mi programita!!!

Muchas gracias Delphius!

Saludos;)


La franja horaria es GMT +2. Ahora son las 15:40:03.

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