![]() |
Se puede acceder a un dbedit a través de su datasource o dataset?
Pues poco más que decir, el asunto lo dice prácticamente todo.
Código:
for datos := 0 to tabla.FieldCount-1 do |
prueba con
Código:
for datos := 0 to tabla.FieldCount-1 do |
Hola CORBATIN, entiendo de tu pregunta que tus campos están asociados a DBEdit y no a un dbgrid por lo que creo que debes utilizar el for para recorrer las componentes y pasar si dse cumple que la componente es un DBEdit entonces utilizar la propiedad Field de este objeto para saber si el campo es requerido y si esta vacío y entonces aplicar el método SetFocus al dbedit en cuestión antes de salir.
Espero te sirva esta solución cuando la implementes. Si no me supe explicar me lo dices a ver como me explico mejor. Saludos |
Deberé aprender a leer antes de contestar.
|
Gracias por tú ayuda, pero había elegido este método debido a que es menos pesado recorrer los fields de una tabla o query que todos los componentes de un form, date cuenta que mientras en este ejemplo solo recorro 6 campos, en el form en realidad tiene que recorrer pues unos 20 componentes. No sé si en realidad recorrer todos los componentes de un form es tan pesado para el programa como pienso, pero creo que sería más rápido hacerlo a través de los fields de la tabla.
De todas formas te invito a que sigas aportando alguna otra idea, gracias. |
Tienes razón debe demorarse más pero ¿cuanto mas? sobre esto existen criterios variados que andan por el histórico del foro.
Te sugerí esta solución porque no encuentro la manera de asociar el campo al dbedit, en cambio en sentido contrario sí. Revisaré un poco a ver si encuentro algo pero... no se donde. Veremos que pasa. Saludos |
Una solución mixta puede ser llenar una lista de componentes asociados a los campos del dataset
Código:
//Definimos las variables y las funciones |
Hola Julià T., CORBATIN está evitanto los bucles y ahora le propones dos. Creo que con uno solo se logra, por supuesto recorriendo las componentes.
Bueno en un final el que decide es CORBATIN ;) Saludos |
Muchisimas gracias Julia es una solución muy buena pero al final he octado por la opción de de Ruben, es casi la misma que la tuya pero a diferencia no hace falta crear esa lista para introducir los dbedits que encuentra sino que directamente hace referencia a ellos, al final el código ha quedado así:
Código:
procedure TForm1.aceptar; De nuevo gracias a los dos que habeis dado vuestras soluciones a este problemilla que había planteado, saludos. |
Que tal.
No he seguido todo el hilo... pero he visto que la respuesta mas óptima no esta dada... y es que el TField tiene un método llamado FocusControl que hace precisamente lo que preguntabas al inicio, de manera que podes hacer un Código:
for datos := 0 to tabla.FieldCount-1 do Por demás... creo que tu verificación no es necesaria, pues al intentar hacer un post, el mismo TDataSet hace algo similar para verificar los campos required. Hasta luego. ;) |
Esto es lo que yo buscaba, es la solución ideal pero que no había conseguido dar con ella.
Con respecto al último comentario que haces, decirte que tienes toda la razón, pero ese aviso que da el dataset por sí solo es en inglés y no deja el foco sobre el campo que esta sin rellenar, de estar forma el error es controlado por mí y le doy el foco al control que esta sin meter datos. Gracias de nuevo a todos por vuestra colaboración, mi duda ha quedado solucionada, saludos. |
Hola a todos, sin duda la solución de jachguate, es la ideal, ese es el método que no vimos. Por acá decimos que se puede mirar y mirar pero no ver.
Saludos |
La franja horaria es GMT +2. Ahora son las 04:21:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi