Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2003
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 22
@-Soft Va por buen camino
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..
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.

Última edición por @-Soft fecha: 17-07-2003 a las 07:13:55.
Responder Con Cita
  #2  
Antiguo 17-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 17-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si entiendo bien puedes usar campos autoinc:

Código:
create table tu_tabla(
  num_control int not null auto_increment,
  ...
)
// Saludos
Responder Con Cita
  #4  
Antiguo 17-07-2003
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 22
@-Soft Va por buen camino
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...
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
  #5  
Antiguo 17-07-2003
Avatar de hecjona
hecjona hecjona is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jal. Mexico
Posts: 84
Poder: 22
hecjona Va por buen camino
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.
__________________
Saludos desde la tierra del tequila y las mujeres hermosas
Responder Con Cita
  #6  
Antiguo 17-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 17-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 17-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #9  
Antiguo 17-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 17-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:35:09.


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
Copyright 1996-2007 Club Delphi