PDA

Ver la Versión Completa : Campo Automático


tcp_ip_es
14-10-2008, 11:56:14
Mi duda creo que es muy sencilla... quiero que un campo se complete automáticamente, es decir teniendo esta tabla

Id_producto nombre descripcion id_doc
1 cartera bla bla PRO1

Id_Producto es autonumerico, y quiero que cuando se inserte un producto con su nombre y descripcion el campo id_doc se rellene automáticamente de la siguiente manera : Literal + Id_Producto
en este caso el literal es PRO.

Se que se debería hacer con un trigger en la BD pero no se hacerlo (Trabajo con MySQL) asi que me gustaría saber hacerlo con Delphi. ¿en que evento de la tabla o tfield iría el seteo del campo???

--- como veis sigo siendo novato----

Lepe
14-10-2008, 13:47:40
En delphi en el evento before Post, pero teniendo en cuenta que esté en modo inserción (para que solo se asigne una vez al crearse el registro, en las posteriores ediciones, que no se modifique)


if tabla.state = dsInsert then
tablaId_doc.asstring := 'PROC'+ inttostr(idproducto);


Como bien dices, lo correcto sería en un trigger, el idproducto sería un generador y en el trigger sería before_Insert.

Saludos

tcp_ip_es
14-10-2008, 16:40:01
eso ya lo había hecho y no funciona, el problema esta en que el idproducto es autoincremental, y no se le asigna número hasta después del post. Tambien lo he probado en el afterpost pero tengo que hacer un edit para meter el dato y después un post y esto generaría un bucle infinito :D Si mi dices como hacer un triger en MySQL lo intento :p de momento lo tengo solucionado lanzando un query con update del campo.... pero me gustaría dejarlo más fino....

Lepe
14-10-2008, 22:29:49
No sé los componentes que usas ¿zeos? pero todos suelen tener una propiedad que dice cuando generarr el autoincremento, las opciones suelen ser usServer, usPost,usNewRecord, poniendolo en usnewRecord ya tienes disponible el autoincremento antes de guardar.

A ver si alguien puesto en MySql te echa un cable.

Saludos

tcp_ip_es
16-10-2008, 07:49:35
Perdón por no haber contestado antes, he estado liado con otros temas ;). No utilizo componentes Zeos, utilizo ADO->MyODBC->MySQL. Y en los componentes ADO no tienen la propiedad que me comentas, lo único que he visto que se parezca es una propiedad en los Tfield que genero a partir del TADOtable que se llama AutoGenerateValue con tres posibles valores: arNone, arDefault, arAutoInc pero con eso no le dices que te genere el autoincremento antes o en el momento o posterior a la inserción de un registro... no se pensaba que esto era más fácil ....:D