Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: TheGhost(Z) en 19 Junio 2009, 20:09 pm



Título: ID en base de datos
Publicado por: TheGhost(Z) en 19 Junio 2009, 20:09 pm
Hola, amigos.

Veran, tengo una base de datos con tablas Albaran y RecibosDePago. y las ID's de cada tabla son autonumericas. Pues mi problema esta en que al crear un Albaran tambien tengo que crear un ReciboDePago, pero mi problema esta que como relaciono el Albaran con RecibosDePago, si cada uno generan sus ID automáticamente.

he pensado en una ves guardado el albaran, ya se genera la ID. y esta ID tendria que asignarla al ReciboDePago. Pero para eso tendría que cerrar el albaran, luego buscarlo y abrirlo. cosa que asi ya sabria el ID que se asigno a mi albaran. luego recien crear el ReciboDepaGO.. pues como veran estoy hecho un lio.. ayuda porfavor..



Título: Re: ID en base de datos
Publicado por: Spider-Net en 19 Junio 2009, 23:47 pm
Pues no entiendo muy bien del todo cual es tu problema la verdad, pero si quieres relacionar un albarán y un recibo porque no usas una tabla intermedia y creas una relación?

Albarán ------------- corresponde -------------recibo
idalbaran                  ida - idr                      idrecibo

En la relación guardas el id de cada  uno de ellos y cuando quieras saber que albarán corresponde con qué recibo solo tienes que consultar la tabla corresponde. Es como siempre se ha hecho no?

De todos modos no sé si entendí del todo bien tu pregunta.


Título: Re: ID en base de datos
Publicado por: cassiani en 20 Junio 2009, 01:15 am
depende del tipo de relación que necesites, puedes hacerla de uno a uno ó de uno a muchos, colocando un campo foraneo en la tabla recibos.. pero, eso no tiene nada que ver con vb6  :-\


Título: Re: ID en base de datos
Publicado por: seba123neo en 20 Junio 2009, 01:54 am
Hola, pues con un ID  :P...no importa que haya un registro autonumerico...si queres relacionarlas es con un ID y no hay otra...


Título: Re: ID en base de datos
Publicado por: TheGhost(Z) en 20 Junio 2009, 10:02 am
Lo que deseo es: Recibir el último ID de una inserción. Practicamente algo igual como se ve aqui: http://www.desarrolloweb.com/articulos/1433.php (http://www.desarrolloweb.com/articulos/1433.php)


Título: Re: ID en base de datos
Publicado por: seba123neo en 20 Junio 2009, 19:55 pm
hace un Max(idregistro) y listo...despues le sumas 1 para el nuevo registro...


Título: Re: ID en base de datos
Publicado por: SKL (orignal) en 20 Junio 2009, 23:39 pm
hace un Max(idregistro) y listo...despues le sumas 1 para el nuevo registro...

Ojo aca... si queres visualizar esto... tenes que hacer asi...

Código:
SELECT MAX(Campo) AS Variable FROM tabla

entonces si queres visualizar El campo maximo de esa tabla haces lo siguiente

Código:
debug.print RecordeSet("variable")

el debug.print puede ser reemplazado por otra variable o un txt y a la vez poder sumarle un valor.

PD: a mucha gente le confunde y no sabe como sacar el valor despues de hacer el query

saludos


Título: Re: ID en base de datos
Publicado por: XcryptOR en 21 Junio 2009, 03:29 am
de esta forma adiciono un nuevo registro cuando el valor de este es autonumerico, hago la consulta primero y al valor obtenido del campo ID le agrego 1:

Código
  1. With RecorsetNuevoRegistro
  2.        .Open "Select campo From tabla ORDER BY ID", ActiveConnection:="mi cadena conexion", _
  3.        CursorType:=adOpenKeyset, LockType:=adLockOptimistic
  4.        .MoveLast
  5.        valornuevaid = !ID + 1
  6.        .Close
  7. End With

con respecto a lo de la relación que deben tener las tablas eso ya te lo explico muy bien cΔssiΔnі y es independiente de vb.

saludos  ;D


Título: Re: ID en base de datos
Publicado por: TheGhost(Z) en 21 Junio 2009, 15:02 pm
Hola, XcryptOR. Me podrías explciar esto, xq me parece interesante el código.

Supongamos que tengo la tabla Clientes con dos campos ID (Autonumerico) y Nombre (Char)

Paso1
Inserto un registo.
Dim Rs As New Recorset
Rs.Open "Clientes"
Rs.AddNew
Rs!Nombre = TheGhost(Z)
Rs.UpDate
Rs.Close

Ahora: como obtengo esa id, conciderando que unos x usuarios estan ingresando datos al mismo tiempo.




Título: Re: ID en base de datos
Publicado por: XcryptOR en 21 Junio 2009, 16:17 pm
agregale la clausula WHERE especificando que vamos a filtrar por Nombre


Código:
With RecorsetNuevoRegistro
        .Open "Select campo From tabla WHERE Nombre='TheGhost(Z)' ORDER BY ID", ActiveConnection:="mi cadena conexion", _
        CursorType:=adOpenKeyset, LockType:=adLockOptimistic
        .MoveLast
        valornuevaid = !ID + 1
        .Close
 End With


Título: Re: ID en base de datos
Publicado por: TheGhost(Z) en 21 Junio 2009, 17:07 pm
Chispas, la frase "mi cadena conexion", crei que lo enviaba como un parametro al ingresar un nuevo registro y luego con ese parametro me diria la ID que se generó.

La verdad, es que eso no sirve. xq, si hay varios usuarios que hicieron el mismo ingreso veo muy dificel que reciba la ID correcta. Supongo que para que eso funcione antes de ingresar el nuevo registro tendría que:

1.- Bloquear la Tabla (para que nadie ingrese ningun registro)
2.- Ingresar el registro
3.- Obtener el Ultimo registro ingresado
4.- Desbloquear la Tabla

De esta manera creo que cada usuario recibiria la ID correcta del registro ingresado. Pero todo esto es mucho codigo. En relidad me preguntaba por algo profesional, de esas que utilizan las grandes empresas. Supongo que tambien se habran topado con un lío como este, no?


Título: Re: ID en base de datos
Publicado por: TheGhost(Z) en 22 Junio 2009, 15:53 pm
Hola, a todos. Saben de tanto wear se me ocurrió hacer esto. Y la verdad si me devuelve la ID que quiero.

Código:
Dim RS As New Recordset
Dim NuevoID As Long
RS.Open "Clientes", DBConex, adOpenStatic, adLockOptimistic
RS.AddNew
      NuevoID = RS!ID  ' como la ID ya se autogeneró aprovecho para cogerla :)

      RS!Nombre = Text1
      RS!Atellidos = Text2
RS.Update
RS.Close
Set RS = Nothing

Al poner el Rs.AddNew creamos un nuevo registro, y como la ID es autonumerico pues será el primero en generarse, cosa que aprovecho para cogerlo con la variable NuevoID y continuo ingresando datos en los demas campos. :) Pero tengo dudas o mas bién en que casos me daria error.


Título: Re: ID en base de datos
Publicado por: Angeldj27 en 22 Junio 2009, 22:33 pm
Creo que si asignas el cod al salvar y no al hacerle click a nuevo te ira mejor y mas cuando tienes mas usuarios en la red trabajando en lo mismo debes crear un registro nuevo al hacer click en guardar y despues de actualizar o refrescar en el mismo procedimiento coges el Id y lo asignas a la otra tabla y ya..

PS: Cuando trabajamos en red siempre debemos crear lo Id o codigos o Nmeros de transsacciones al salvar no al darle a nuevo pork cuando le de a nuevo yo otro usuario puede estar salvando y seria un caos..

Saludos...
talves t ayude en algo..