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..
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.
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 :-\
Hola, pues con un ID :P...no importa que haya un registro autonumerico...si queres relacionarlas es con un ID y no hay otra...
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)
hace un Max(idregistro) y listo...despues le sumas 1 para el nuevo registro...
Cita de: seba123neo en 20 Junio 2009, 19:55 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...
SELECT MAX(Campo) AS Variable FROM tabla
entonces si queres visualizar El campo maximo de esa tabla haces lo siguiente
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
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:
With RecorsetNuevoRegistro
.Open "Select campo From tabla ORDER BY ID", ActiveConnection:="mi cadena conexion", _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
.MoveLast
valornuevaid = !ID + 1
.Close
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
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.
agregale la clausula WHERE especificando que vamos a filtrar por Nombre
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
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?
Hola, a todos. Saben de tanto wear se me ocurrió hacer esto. Y la verdad si me devuelve la ID que quiero.
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.
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..