Ayuda con registros y bases de datos

Iniciado por CARRY-ON, 21 Octubre 2006, 02:48 AM

0 Miembros y 1 Visitante están viendo este tema.

CARRY-ON

necesito crear un formulario que se conecte a una base de datos  los campos requeridos son codigo del producto este tiene que ser generado aleatoriamente

producto
cantidad
precio
bueno con los ultimos datos no tengo problema los conecto ala base de datos y todo pero  que el codigo tiene que ser generado automaticamente en eso no hay proble ya que access tiene un opcion para hacerlo pero el problema esta al borrar un registro
ejemplo

borro el registro 3 y tengo actualmente 25 registros y cuando quiero agregar otro registro me da como numero el 26 pero lo que yo quiero es que me ocupe el registro menor que este desocupado en este caso el 3 y si estuviera el registro 3 y 1 desocupado que me ocupe el menor osea el 1 no se si me explico cualkier duda me preguntan

lo que quiero es un porcedimiento funcion o lo que sea que me resuelva ese problema

ZuKaR

Buenas CARRY

El problema que plantes, de base, está mal ... Me explico:

Si hablamos que es un código producto, no es muy lógico que te lo autogenere, dado que ese código producto irá relacionado (supongo) con otra tabla que se llame Producto (por ejemplo) donde el código producto de la principal y de la de producto se relacionan mediante el código producto.

Si quieres saber qué código de producto del principal, es el 2 en la tabla producto, mirarías el campo descripción de la tabla y dirías ... 2 = Pimientos

El autonumérico se utiliza, normalmente para indexar las búsquedas, para facilitar el trabajo al motor de búsquedas. Normalmente, se recomienda que se indexen. Un autonumérico, no debería considerarse código de alguna tabla relacional. Por eso comento que está mal planteado, a nivel estructural tu cuestión.

Explica un poco qué es lo que querrías hacer, y miramos de plantear el diseño de la tabla, para que sea correcto. A nivel diseño funcional.

Salu2

Cita de: CARRY-ON en 21 Octubre 2006, 02:48 AM
necesito crear un formulario que se conecte a una base de datos  los campos requeridos son codigo del producto este tiene que ser generado aleatoriamente

producto
cantidad
precio
bueno con los ultimos datos no tengo problema los conecto ala base de datos y todo pero  que el codigo tiene que ser generado automaticamente en eso no hay proble ya que access tiene un opcion para hacerlo pero el problema esta al borrar un registro
ejemplo

borro el registro 3 y tengo actualmente 25 registros y cuando quiero agregar otro registro me da como numero el 26 pero lo que yo quiero es que me ocupe el registro menor que este desocupado en este caso el 3 y si estuviera el registro 3 y 1 desocupado que me ocupe el menor osea el 1 no se si me explico cualkier duda me preguntan

lo que quiero es un porcedimiento funcion o lo que sea que me resuelva ese problema

CeLaYa

pues tendiras hacer una consulta a la BD para ordenar los datos por el "codigo" y luego poner un For para recorrer cada uno sacar el numero del codigo

private funtion EncontrarCodigo() as Long
dim bd as database
dim tb as recodset
dim nuevocodigo as long

Encontarcodigo = 0

'Abres la BD
set bd = workspaces(0).opendatabase("base de datos")
'Abres ta labla y la ordenas por codigo
set tb = bd.openrecodset("SELECT * FROM Tabla ORDER BY Codigo ASC;")

nuevocodigo = 1
do while not(tb.eof)
 'Checas si el nuevo codigo existe, si ya existe se incrementa, si no sale del bucle y listo ya tienes tu codigo
  if nuevocodigo <> tb!Codigo then
    'Encontraste un hueco en los codigos
    Encontarcodigo = nuevocodigo
    exit do
  end if

  tb.movenext
  nuevocodigo = nuevocodigo+1

loop

'Cierras la tabla y la BD
tb.close
bd.close

'liberas la memoria
set tb = nothing
set bd = nothing

end function



la funcion te regresa 0 en caso de alguna falla o un valor <> de 0 en caso de haber encontrado un "codigo", espero y te sirva de algo este ejemplo
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

ZuKaR

la función que publica CeLaYa te será útil a nivel "visual" pero a nivel de estructura de base de datos, lo que comentas

Cita de: CARRY ONborro el registro 3 y tengo actualmente 25 registros y cuando quiero agregar otro registro me da como numero el 26 pero lo que yo quiero es que me ocupe el registro menor que este desocupado en este caso el 3 y si estuviera el registro 3 y 1 desocupado que me ocupe el menor osea el 1 no se si me explico cualkier duda me preguntan

en access no es posible porque no tiene ninguna herramienta que lo haga. Hice la prueba con el access compactando la bd pero nada ... Siempre cuando creas un registro nuevo en la BdD, te pone el siguiente índice.

El procedimiento que te comenta el amigo CeLaYa te servirá pero si quieres guardar el registro, siempre te creará "el siguiente".

Salu2 a los 2 y al foro en general.

CeLaYa

creo que para hacer eso tendrias que hacer esto

private funtion EncontrarCodigo() as Long
dim bd as database
dim tb as recodset
dim nuevocodigo as long
dim Encontrado as Boolean

Encontarcodigo = 0

'Abres la BD
set bd = workspaces(0).opendatabase("base de datos")
'Abres ta labla y la ordenas por codigo
set tb = bd.openrecodset("SELECT * FROM Tabla ORDER BY Codigo ASC;")

for nuevocodigo = 1 to tb.recordcount
   Encontrado = False
   do while not(tb.eof)
     if nuevocodigo = tb!Codigo then
          Encontrado = True
          exit do 'El codigo ya existe
     tb.movenext
     if encontrado = false then exit for
    loop
next nuevocodigo

'Cierras la tabla y la BD
tb.close
bd.close

'liberas la memoria
set tb = nothing
set bd = nothing

end function



si tienes pocos registros te servira, pero conforme vaya creciendo tu BD se va a hacer muy lento, lo que hago aqui es checar si el Codigo "1"  existe en la BD recorriendo cada uno de los registros, si ya existe se pasa al "2" y asi hasta que el codigo en cuestion no esta dentro de la tabla.
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

CARRY-ON

Cita de: ZuKaR en 21 Octubre 2006, 03:11 AM
Buenas CARRY

El problema que plantes, de base, está mal ... Me explico:

Si hablamos que es un código producto, no es muy lógico que te lo autogenere, dado que ese código producto irá relacionado (supongo) con otra tabla que se llame Producto (por ejemplo) donde el código producto de la principal y de la de producto se relacionan mediante el código producto.

Si quieres saber qué código de producto del principal, es el 2 en la tabla producto, mirarías el campo descripción de la tabla y dirías ... 2 = Pimientos

El autonumérico se utiliza, normalmente para indexar las búsquedas, para facilitar el trabajo al motor de búsquedas. Normalmente, se recomienda que se indexen. Un autonumérico, no debería considerarse código de alguna tabla relacional. Por eso comento que está mal planteado, a nivel estructural tu cuestión.

Explica un poco qué es lo que querrías hacer, y miramos de plantear el diseño de la tabla, para que sea correcto. A nivel diseño funcional.

Salu2

*********************************
Si esta mal plantiado como lo planteo mejor ??  yo solo de como lo estaba haciendo pero si no se puede o hay alguna manera mejor como seria di pregunte es por que no estoy seguro como hacerlo si no e puede con auto numerico como puedo hacerlo para solucuionar mi problema de que el codigo se auto genere y que si se elimina uno el proxima ocupe el valor que se elimino

probare el codigo que me dio celaya  cualquier cosa la posteo aca