Ir al contenido


Foto

[RESUELTO] ¿Cómo sacar informes mensuales , osea poder filtrar datos de solo 1 mes ?


  • Por favor identifícate para responder
23 respuestas en este tema

#1 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 31 diciembre 2010 - 09:10

Estaba probando un sistema pero no he encontrado la manera para poder sacar informes de 1 mes determinado por ejemplo , quiero sacar las ganancias de el mes de diciembre , ¿cómo puedo sacar solo los datos de diciembre o que consulta debería usar?, o por ejemplo si fuese semanal o quincenal , gracias de antemano.
  • 0

#2 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 31 diciembre 2010 - 09:26

Con una consulta sql.
Tienes la estructura de tu tabla?
Podrias tener en tu tabla un campo, para el año y tambien otro campo mes, para el mes.
Entonces filtras por esos campos.

Por ejemplo si tienes una tabla llamada:
"PERSONAS", con los campos,
ano
mes
nombre
apellido
cantidad

Y quieres solamente las los registros del año 2010 y del mes de julio.

select *
from personas
where ano = 2010  and mes = 7

obviamente si es para reportes los valores de año y mes tienes que pasarselos al sql con variables.
Espero te sirva, cualquier duda dices...
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 31 diciembre 2010 - 09:29

Hola

Así lo haría en Firebird.



sql
  1. SELECT SUM(ventas-gastos) FROM tutabla
  2. WHERE EXTRACT(YEAR FROM campofecha) = 2010 AND EXTRACT(MONTH FROM campofecha) = 12



Salud OS
  • 0

#4 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 31 diciembre 2010 - 10:02

Con una consulta sql.
Tienes la estructura de tu tabla?
Podrias tener en tu tabla un campo, para el año y tambien otro campo mes, para el mes.
Entonces filtras por esos campos.

Por ejemplo si tienes una tabla llamada:
"PERSONAS", con los campos,
ano
mes
nombre
apellido
cantidad

Y quieres solamente las los registros del año 2010 y del mes de julio.

select *
from personas
where ano = 2010  and mes = 7

obviamente si es para reportes los valores de año y mes tienes que pasarselos al sql con variables.
Espero te sirva, cualquier duda dices...

Muchas gracias , no lo pensé antes de esa manera está bien fácil solo basta con hacer las consultas correspondientes.
  • 0

#5 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 02 enero 2011 - 09:46



delphi
  1.   adoquery3.SQL.Clear;   
  2.   adoquery3.SQL.Text:='select sum(Costo) as total from Clientes where Mes = 12 and  Año='+combobox2.Text;   
  3.   adoquery3.Open;



Esta es la consulta que realizo luego, sin embargo la comenté y el problema sigue, anteriormente me ponía que el campo id not found y así sucesivamente,
(NOTA)el campo que sumo es numérico.



delphi
  1. edit3.Text:=adoquery3.FieldByName('total').AsString;


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 enero 2011 - 09:57

Hola Master23, no abras un hilo nuevo para un mismo tema, he combinado los hilos en uno solo.

En lugar de usar FieldbyName(nombrecampo) usa Fields[numcampo]




delphi
  1.   adoquery3.SQL.Clear;   
  2.   adoquery3.SQL.Text := 'select sum(Costo) from Clientes where Mes = 12 and  Año='+combobox2.Text;   
  3.   adoquery3.Open;



Y lo obtienes de esta forma



delphi
  1. edit3.Text := adoquery3.Fields[0].AsString;



Salud OS
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 enero 2011 - 09:59

Por otro lado, me parece que no debes de utilizar la ñ en un campo, puedes usar ANIO en lugar de AÑO

Salud OS
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 02 enero 2011 - 11:09

Pues no veo el porqué no pueda ser posible la lectura del campo mediante el nombre, o alias como en este caso, y se deba recurrir a Fields[] en lugar de FieldByName().

Lo que si noto es que el año se pasa como un string, a diferencia del més que es un dato numérico. Al menos eso da a entender la consulta que nos ha indicado Master23.

Lo de nombrar a campos con Ñ estoy de acuerdo, eso puede ser motivos de problemas en algunos motores de datos.

Por otro lado, y no es un detalle menor, sería de muchísima ayuda si nos pudieras comentar los errores textuales que te salen y la línea de código. En especial cuando uno dice "y así sucesivamente". Esto me da a entender de que te aparecieron otros errores más...

No se porqué Master23 te estás volviendo más escueto en comentar tus dudas... tu eras más expresivo y detallista al explicarte.

Algo me dice que el problema se debe a que utilizas el mismo ADOQuery para realizar más de una consulta. ¿Por casualidad no habrás creado los campos de manera persistente?
Ese sería un buen motivo para el que recibieses un error como "ID not found" cuando estás lanzando una consulta que no regresa un campo con dicho nombre... de hecho sólo deberías estar recibiendo un solo registro, de un sólo campo.

Si nos pudieras más información del caso quizá podríamos ver en donde está el problemilla.

Saludos,
  • 0

#9 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 03 enero 2011 - 11:35

Pues no veo el porqué no pueda ser posible la lectura del campo mediante el nombre, o alias como en este caso, y se deba recurrir a Fields[] en lugar de FieldByName().

Lo que si noto es que el año se pasa como un string, a diferencia del més que es un dato numérico. Al menos eso da a entender la consulta que nos ha indicado Master23.

Lo de nombrar a campos con Ñ estoy de acuerdo, eso puede ser motivos de problemas en algunos motores de datos.

Por otro lado, y no es un detalle menor, sería de muchísima ayuda si nos pudieras comentar los errores textuales que te salen y la línea de código. En especial cuando uno dice "y así sucesivamente". Esto me da a entender de que te aparecieron otros errores más...

No se porqué Master23 te estás volviendo más escueto en comentar tus dudas... tu eras más expresivo y detallista al explicarte.

Algo me dice que el problema se debe a que utilizas el mismo ADOQuery para realizar más de una consulta. ¿Por casualidad no habrás creado los campos de manera persistente?
Ese sería un buen motivo para el que recibieses un error como "ID not found" cuando estás lanzando una consulta que no regresa un campo con dicho nombre... de hecho sólo deberías estar recibiendo un solo registro, de un sólo campo.

Si nos pudieras más información del caso quizá podríamos ver en donde está el problemilla.

Saludos,


Delphius , el problema que me salía anteriormente era el de id not found estoy usando adoquery, eliminé del query el campo id porque no lo estaba utilizando, y luego pasó al siguiente campo nombre not found y así sucesivamente , luego por algún motivo dejo de mostrar ese error y mostrar el siguiente no coinciden los tipos de datos en la expresión de los tipos, sin embargo el campo que estoy sumando es numérico por lógica no creo que debería haber este tipo de error la consulta la veo correcta ,el tipo de dato digamos que es numérico y estoy realizando la suma de estos campos para mostrar un total en el Edit correspondiente el porqué del error aun me es una incógnita.
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 enero 2011 - 10:10

¿Cuál es el error textual que te sale ahora?
¿Cómo está diseñada tu tabla? ¿Que campos y tipos de datos son?
¿Podemos ver tu código?

¿Utilizas el mismo ADOQuery para otras consultas? ¿Tienes otros ADOQuerys que lancen consultas relacionadas y/o similares en las que intervenga la tabla Clientes?

¿Cierras el dataset antes de lanzar una nueva consulta? ¿Te aseguraste de haber eliminado todos los campos persistentes y sus definiciones?

La verdad es que nos las estás poniendo difícil ayudarte Marter23. Sin tener mayor información de lo que haces y tienes en tu código va a ser complicado guiarte.

En algún lado está el problema, pero con la escasa información que nos das lo único que podemos hacer es adivinar. Con todo respeto Master23, debes dejar de ser tan escueto y secote al explicarte.

No nos dejemos llevar por un "por lógica no creo". Vayamos a por lo seguro.

Saludos,
  • 0

#11 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 04 enero 2011 - 04:10

¿Cuál es el error textual que te sale ahora?
¿Cómo está diseñada tu tabla? ¿Que campos y tipos de datos son?
¿Podemos ver tu código?

¿Utilizas el mismo ADOQuery para otras consultas? ¿Tienes otros ADOQuerys que lancen consultas relacionadas y/o similares en las que intervenga la tabla Clientes?

¿Cierras el dataset antes de lanzar una nueva consulta? ¿Te aseguraste de haber eliminado todos los campos persistentes y sus definiciones?

La verdad es que nos las estás poniendo difícil ayudarte Marter23. Sin tener mayor información de lo que haces y tienes en tu código va a ser complicado guiarte.

En algún lado está el problema, pero con la escasa información que nos das lo único que podemos hacer es adivinar. Con todo respeto Master23, debes dejar de ser tan escueto y secote al explicarte.

No nos dejemos llevar por un "por lógica no creo". Vayamos a por lo seguro.

Saludos,

project aplicacion.exe raised exception class EDatabaseError adoquery3: field id not found, esta es la excepción que produce el programa al presionar el botón que ejecuta la consulta dependiendo del case.
aquí el código que llevo hasta ahora.

delphi
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. varConStr,bd:string;
  3. begin
  4. //Inicio de carga de imágenes para la aplicación.image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'imgs/background.png');
  5. image2.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'imgs/background.png');
  6. image3.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'imgs/background.png');
  7. image4.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'imgs/background.png');
  8. //***********************
  9. bd:=ExtractFilePath(Application.ExeName)+'bd/jjmobile.mdb';ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+          'Data Source='+bd+';'+          'Persist Security Info=False;'+          'Jet OLEDB:Database Password=Master23';
  10. Adoconnection1.ConnectionString:=ConStr;Adoconnection1.Open;//Activar querys y tablas de la bd. 
  11. adoquery1.Active:=true; 
  12. adoquery2.Active:=true; 
  13. adoquery3.Active:=true;
  14. end;
  15.  
  16. procedure TForm1.Button13Click(Sender: TObject);
  17. begin
  18. //Validaciones.
  19. if (combobox1.Text = '') and (combobox2.Text = '') then
  20. showmessage('Debe seleccionar mes y año para continuar')
  21. else
  22. if combobox1.Text = '' then
  23. showmessage('Debe seleccionar mes para poder obtener resultados')
  24. else
  25. if combobox2.Text = '' then
  26. showmessage('Debe seleccionar un año para poder obtener resultados')
  27. else
  28.   if (combobox1.Text <> '')and (combobox2.Text <> '') then
  29.     begin
  30.     //Consultas para sumatorias de campos de ganancias.
  31.     case combobox1.ItemIndex of
  32.  
  33.     0:begin
  34.     adoquery3.SQL.Clear;
  35.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "1" and Año='+'"'+combobox2.Text+'"';
  36.     adoquery3.Open;
  37.             end;
  38.  
  39.     1:begin
  40.     adoquery3.SQL.Clear;
  41.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "2" and Año='+'"'+combobox2.Text+'"';
  42.     adoquery3.Open;
  43.             end;
  44.  
  45.     2:begin
  46.     adoquery3.SQL.Clear;
  47.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "3" and Año='+'"'+combobox2.Text+'"';
  48.     adoquery3.Open;
  49.             end;
  50.  
  51.     3:begin
  52.     adoquery3.SQL.Clear;
  53.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "4" and Año='+'"'+combobox2.Text+'"';
  54.     adoquery3.Open;
  55.             end;
  56.  
  57.     4:begin
  58.     adoquery3.SQL.Clear;
  59.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "5" and Año='+'"'+combobox2.Text+'"';
  60.     adoquery3.Open;
  61.             end;
  62.  
  63.     5:begin
  64.     adoquery3.SQL.Clear;
  65.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "6" and Año='+'"'+combobox2.Text+'"';
  66.     adoquery3.Open;
  67.             end;
  68.  
  69.     6:begin
  70.     adoquery3.SQL.Clear;
  71.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "7" and Año='+'"'+combobox2.Text+'"';
  72.     adoquery3.Open;
  73.             end;
  74.  
  75.     7:begin
  76.     adoquery3.SQL.Clear;
  77.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "8" and Año='+'"'+combobox2.Text+'"';
  78.     adoquery3.Open;
  79.             end;
  80.  
  81.     8:begin
  82.     adoquery3.SQL.Clear;
  83.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "9" and Año='+'"'+combobox2.Text+'"';
  84.     adoquery3.Open;
  85.  
  86.             end;
  87.     9:begin
  88.     adoquery3.SQL.Clear;
  89.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "10" and Año='+'"'+combobox2.Text+'"';
  90.     adoquery3.Open;
  91.             end;
  92.  
  93.     10:begin
  94.     adoquery3.SQL.Clear;
  95.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = "11" and Año='+'"'+combobox2.Text+'"';
  96.     adoquery3.Open;
  97.             end;
  98.  
  99.     11:begin
  100.     adoquery3.SQL.Clear;
  101.     adoquery3.SQL.Text:='select sum(Costo) as F_COSTO from Clientes where Mes = 12 and Año='+'"'+combobox2.Text+'"';
  102.     adoquery3.Open;
  103.             end;
  104.  
  105.  
  106.     end;
  107.  
  108.     //Asignar resultado  de la consulta.
  109.     //edit3.Text:=adoquery3.FieldByName('F_COSTO').AsString;
  110.     end;
  111. end;



El campo que intento sumar es el de costos

cuenta con 11 campos
id  llave primaria
nombre texto
direccion  texto
Descripcion memo
Costo númerico
Fecha_de_entrega tipo fecha
Fecha_de_salida  tipo fecha
Mes tipo texto
año tipo texto.

todo esto estoy usando sin embargo al ejecutar el botón para las consultas resulta en el una excepción que les mencione arriba .
  • 0

#12 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 04 enero 2011 - 04:23

Solo una pregunta... ¿que campos hay en el query cuando los ves al dar doble click sobre el componente?


Saludos!
  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 enero 2011 - 04:36

Me robaste las palabras felipe. Intuyo que hay campos persistentes o definiciones de campo asociadas a éste.

Lo que veo del código puedo decir que en al momento de crear el form1 se está activando el ADOQuery3, que es equivalente a ejecutar la instrucción SQL que esté en él.

Y luego se lo reutiliza a este ADOQuery para generar otras consultas, dependiendo del valor.

Si no hubiera campos persistentes no debería haber problemas alguno con esto ya que al cerrar el dataset se liberarían los campos automáticos que ha creado el ADOQuery. No sucede lo mismo cuando hay campos persistentes... La solución debería ser cerrar borrar esos campos persistentes una vez cerrado.

Ya lo había dicho yo antes pero parece que no se me ha leído bien: hay un problema de campos persistentes. Un "ID not found" no aparece por arte de magia.

Por otro lado, ese código se puede mejorar. Lo más evidente: esos ADOQuery3.Clear y .Open puede ir fácilmente fuera del case.
En segundo lugar, lo recomendable sería que el campo Mes y Año fueran numéricos. Esto llevaría otra ventaja adicional... ya no sería necesario un case para genera la consulta. Si la opción es numérica y aprovechando el uso de parámetros se puede hacer una consulta SQL de esta forma:



sql
  1. SELECT ...
  2. FROM ...
  3. WHERE (Mes :MesElegido) AND (Anio = ...)



Y luego pasar como dato para el parámetro el propio valor del ItemIndex.


Saludos,
  • 0

#14 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 04 enero 2011 - 04:41

Me robaste las palabras felipe. Intuyo que hay campos persistentes o definiciones de campo asociadas a éste.

Lo que veo del código puedo decir que en al momento de crear el form1 se está activando el ADOQuery3, que es equivalente a ejecutar la instrucción SQL que esté en él.

Y luego se lo reutiliza a este ADOQuery para generar otras consultas, dependiendo del valor.

Si no hubiera campos persistentes no debería haber problemas alguno con esto ya que al cerrar el dataset se liberarían los campos automáticos que ha creado el ADOQuery. No sucede lo mismo cuando hay campos persistentes... La solución debería ser cerrar borrar esos campos persistentes una vez cerrado.

Ya lo había dicho yo antes pero parece que no se me ha leído bien: hay un problema de campos persistentes. Un "ID not found" no aparece por arte de magia.

Por otro lado, ese código se puede mejorar. Lo más evidente: esos ADOQuery3.Clear y .Open puede ir fácilmente fuera del case.
En segundo lugar, lo recomendable sería que el campo Mes y Año fueran numéricos. Esto llevaría otra ventaja adicional... ya no sería necesario un case para genera la consulta. Si la opción es numérica y aprovechando el uso de parámetros se puede hacer una consulta SQL de esta forma:



sql
  1. SELECT ...
  2. FROM ...
  3. WHERE (Mes :MesElegido) AND (Anio = ...)



Y luego pasar como dato para el parámetro el propio valor del ItemIndex.


Saludos,

Disculpa mi ignorancia Delphius, pero es que no entiendo a que refieres con campos persistentes,por ejemplo si elimino el campo id del query automáticamente el error pasa al siguiente campo por ejemplo nombre not found y la excepción correspondiente.

(NOTA) al iniciar el form hago una consulta con el adoquery3 , seleccionar todos los campos de esa tabla, clientes.
  • 0

#15 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 04 enero 2011 - 04:49

Ahora otra duda, ¿el adoquery3 es el mismo componente con el que te conectas a la tabla Cliente?


Saludos!
  • 0

#16 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 04 enero 2011 - 04:50

Ahora otra duda, ¿el adoquery3 es el mismo componente con el que te conectas a la tabla Cliente?


Saludos!

Si felipe,conecto el dbgrid con este.
  • 0

#17 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 04 enero 2011 - 04:59


Ahora otra duda, ¿el adoquery3 es el mismo componente con el que te conectas a la tabla Cliente?


Saludos!

Si felipe,conecto el dbgrid con este.


Creo que ya podemos ir dando solución a esto.
Ya tienes conectado ese componente, pero estas alterando su consulta, este te intenta retornar el valor F_COSTO cuando en realidad debe hacerlo con todos los campos de la tabla, por eso te dice "field ID not found", porque efectivamente no halla ese valor entre la respuesta del query.
La solución es usar un query auxiliar para hacer esta consulta y te recomiendo la sugerencia de Delphius.
Por otra parte es hacer un filtro (no estoy seguro si en ADO sea igual), aunque esto no garantiza un buen rendimiento a esta consulta.


Saludos!
  • 0

#18 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 04 enero 2011 - 05:05



Ahora otra duda, ¿el adoquery3 es el mismo componente con el que te conectas a la tabla Cliente?


Saludos!

Si felipe,conecto el dbgrid con este.


Creo que ya podemos ir dando solución a esto.
Ya tienes conectado ese componente, pero estas alterando su consulta, este te intenta retornar el valor F_COSTO cuando en realidad debe hacerlo con todos los campos de la tabla, por eso te dice "field ID not found", porque efectivamente no halla ese valor entre la respuesta del query.
La solución es usar un query auxiliar para hacer esta consulta y te recomiendo la sugerencia de Delphius.
Por otra parte es hacer un filtro (no estoy seguro si en ADO sea igual), aunque esto no garantiza un buen rendimiento a esta consulta.


Saludos!

Efectivamente ese era el problema que no me permitía avanzar en este proyecto, ya está solucionado, gracias Felipe y Delphius por su gran ayuda, ya me funciona correctamente el utilizar la consulta.
  • 0

#19 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 enero 2011 - 05:16

Hola Master,

Los campos persistentes, son campos creados explícitamente por un dataset. Estos quedan alojados en el query de forma permanente (de allí el nombre persistentes) y la ventaja que estos ofrecen es que no se necesita de trabajar de forma intermedia con el query, table o cualquier dataset a los que pertenezca.

Cuando uno crea la consulta en tiempo de ejecución, por medio de código, con algo como:

ADOQuery1.SQL := 'select ... ';

El ADOQuery1 internamente crea los campos necesarios para trabar con ellos. ¿Que campos? Los campos que regrese el select. Si tu select regresa los campos ID, Nombre y Fecha por ejemeplo... el query creará 3 campos con idénticos nombres.

Como estos campos quedan en memoria, es necesario hacer esto:



delphi
  1. ADOQuery1.FieldByName().As.... := ....;



En tiempo de edición también podemos crear SQL, aprovechando el editor SQL. Y como extra, crear explícitamente los campos. Si haces doble clic sobre tu ADOQuery deberías ver el editor de campos persistentes. Observarás la lista de campos disponibles y los tu tengas creado (si es que hay un consulta válida en la propiedad SQL).

Cuando creas esos campos deberías ver algo como esto en tu unidad:



delphi
  1.   IBTransaction1: TIBTransaction;
  2.     IBTable1ID: TIntegerField;
  3.     IBTable1NOMBRE: TIBStringField;
  4.     IBTable1FECHA: TDateTimeField;
  5.     IBTable1CANTIDAD: TIBBCDField;
  6.     IBTable1MONEDA: TIBBCDField;
  7.     IBTable1FECHA1: TDateField;
  8.     IBTable1INTPEQUE: TSmallintField;
  9.     IBTable1HORA: TTimeField;



En mi ejemplo trabajo con los componentes IBX. Es lo de menos, puedes identificar los campos persistentes porque de forma automática se nombran siguiendo la siguiente regla: NombreDataSet + NombreCampo.

En mi caso, se aprecia que se trata de un IBTable1 que tiene los campos NOMBRE, FECHA, CANTIDAD entre otros.

Tu deberías tener algo como eso:



delphi
  1. ADOQuery3ID: ....
  2. ADOQuery3....



La ventaja de contar con estos campos persistentes es que te evitas estar haciendo FieldByName() o Fields[].... Ahora puedes trabajar de forma directa, como por ejemplo basado en mi muestra:



delphi
  1. IBTable1CANTIDAD.Value := 123456;



Naturalmente, para permitir eso mi Table1 debe estar en modo de edición. Por ello antes de hacer cualquier operación sobre los campos deberé hacer algo como:



delphi
  1. IBTable1.Insert; // voy a insertar registro
  2. // aqui trabajo con los campos
  3. IBTable1.Post; // confirmo


El problema es que si borras esos campos haces la mitad del trabajo.... además de esos campos persistente el Query almacena definiciones de éstos. Estas definiciones las puedes ver si haces clic en FieldDefs en el Object Tree View.

Ahora necesitarás eliminar sus definiciones.

En vista a que es complicado explicar esto en simples palabras, una imagen quizá sirva de ayuda para representar lo que estoy diciendo.

Archivos adjuntos


  • 0

#20 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 04 enero 2011 - 05:35

Mejor explicación no pudiste dar Delphius (y)


Saludos!
  • 0




IP.Board spam blocked by CleanTalk.