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)
-   -   no de control. ayuda (https://www.clubdelphi.com/foros/showthread.php?t=2294)

@-Soft 17-07-2003 07:11:44

no de control. ayuda
 
hola

necesito de sus experiencias, para que me ayuden a salir de un inconveniente que se me presento en el desarrollo de una aplicacion.

estoy realizando una aplicacion de control de reparacion de equipos electronicos. pero he tenido problemas para hacer un numero de control automatico que siga una secuencia sin romper el orden.

necesito hacer ya sea una funcion que al momento de presionar el boton entrada se ejecute una funcion que autoincremente el no de control sin descontrolarze y lleve una secuencia organizada.

P.D. utilizo BD mysql y componentes Zeos y la aplicacion trabaja en RED

gracias..

marcoszorrilla 17-07-2003 08:16:36

Puedes utilizar una tabla auxiliar en donde guardes el último número utilizado.

Y otra solución la tienes en esta respuesta de Andrés.

http://www.clubdelphi.com/foros/show...&threadid=2281

Un saludo.

roman 17-07-2003 08:20:20

Si entiendo bien puedes usar campos autoinc:

Código:

create table tu_tabla(
  num_control int not null auto_increment,
  ...
)

// Saludos

@-Soft 17-07-2003 15:02:36

hola

he tratado de utilizar una tabla auxiliar pero he tenido inconvenientes, ya que no me funciona debidamente.

lo hago de la siguiente manera, en el evento BeforeInsert creo una variable entera, hago un refresh a la tabla, me posiciono en el primer registro y luego en el ultimo, asigno el valor del ultimo campo a la variable que se creo, luego igualo un Label en la forma que se despliega el no de entrada. en el boton aceptar hago la insersion de los datos tanto en la tabla auxiliar como en la tabla principal, pero me da un error Overflow.

si es posible, creen un pequeño ejemplo de como lo hacen en sus aplicaciones para poder comprenderlo un poco mejor.

gracias...

hecjona 17-07-2003 18:11:01

Si usas el evento before insert
lo que puedes hacer es usar un componente query
y hacer la consulta:

Select max(nodecontrol)+1 from ordenes

despues de ejecutar esta orden

le asignas el valor a tu tabla:

tablanodecontrol.asinterger := query.fields[0].asinteger;

de esta manera cada que agreges un regiestro se consultara cual nodecontrol es el siguiente.

roman 17-07-2003 20:28:14

Disculpen la pregunta pero es que no entiendo.

¿Qué hay de malo en usar campos auto_increment y dejar que el motor de bases (en este caso mysql) se encargue de todo?

// Saludos

marcoszorrilla 17-07-2003 20:35:12

Hola Román:

El problema supongo que se deba, a que quiere numerar facturas o tickets o albaranes y los autoincrementados no sirven para esto, ya que pueden faltar números, pues la mayoría de los motores una vez inicias la adición de un registro dispara el autoincrementado, claro que si antes de grabar la cancelas, como el número ya salto luego tienes una seríe de facturas tal que:

1
2
5
7
etc....

Por lo tanto el autoincrementado está bien para conocer el orden natural de la grabación de los datos y no para la numeración de albaranes, etc.

Máxime cuando dicha numeración suele tener tipo texto tal como:
03-0000090
03-0000091

Indicando por ejemplo que el 03 es el año, que yo guardo en una tabla auxiliar y el usuario lo cambia cada vez que inicia un nuevo ejercicio, con lo cual puede tener la factura:
02-00001
03-00001

Es decir normalmente cada año se inicia el contador y como se cambia el ejercicio no hay claves repetidas.


Bueno un Saludo.

roman 17-07-2003 21:03:38

Perdón por la necedad pero sigo sin captar.

Hasta donde yo entiendo el autoincremento se hace hasta que se hace el "post" a la base. Así sucede al menos en paradox (si se hace un append y se cancela el autoincrement no aumenta) y lo mismo en mysql; el autoincrement se asigna hasta el momento que se ejecuta el INSERT.

El problema vendría si se desea cancelar después de que el registro se haya guardado en la tabla pero esto mismo sucederá con las otras técnicas.

En cuanto al formato de los números no veo el problema; una vez que se dispone de un autoincremental se puede dar formato a otro campo tomando el autoincremental como base, por ejemplo, en mysql podríamos hacer:

INSERT INTO tabla values(0, campo1, campo2,...)

Recuperar el autoincrement asignado con

SELECT last_insert_id()

y usarlo para el número de control:

UPDATE tabla SET no_control = concat(fecha, '-', ID)

o bien, ahorrándonos un paso:

UPDATE tabla SET no_control = concat(fecha, '-', last_insert_id())

Y todo esto sin los problemas de tener que bloquear las tablas para no desincronizar el autoincremental

// Saludos

marcoszorrilla 17-07-2003 21:48:22

Si tienes a mano Access, crea una tabla, con un campo "Autonumérico", y otro texto por ejemplo.

Desde el propio Access, escribe una simple a en el campo texto pulsa escape.

Bien has cancelado la grabación, inicia otra alta, verás como ya se ha saltado un número.


Un Saludo.

roman 17-07-2003 22:05:58

De acuerdo con lo de Access. Pero @-soft trabaja con algo más serio ;) , mysql y a no ser que las componente zeos hagan un INSERT antes de completar la edición (cosa que sería un terrible error) el comportamiento es como describo.

En fin, quizá me hace falta manejar más facturas y cosas por el estilo :D

// Saludos


La franja horaria es GMT +2. Ahora son las 23:11:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi