Recuperar clave identity
Te comento que estoy utilizando VB 6.0 y Sql Server 2005.
Tengo estas tablas:
Voluntario
NumVoluntario
NumDador
ApeVol
NomVol
FNacVol
TipoDocumento
NumDocumento
DomicilioParticular
TelefonoParticular
Celular
EMail
Profesión
Dador
NumDador
FechaInscDador
DomicilioLaboral
TelefonoLaboral
Grupo
Factor
Pesor
FechaUltDonacion
Disponible
Como verás, en la tabla de Voluntarios tengo un atributo; que en la tabla de abajo es clave.
Lo que hago de momento es: Utilizo un form para Ingresar un Voluntario, luego abro otro form de ModificarVoluntario en el cual tengo todos los datos del Voluntario, incluida su clave, en este mismo form tengo un botón (Ingresar como Dador) el cual me abre un nuevo form para cargar los datos del dador, en este form tengo 2 botones, uno para ingresarlo como Dador y otro para agregar el código de ese dador a la tabla de Voluntarios.
Lo que quiero hacer es: recuperar la clave que se le genera como Dador para ingresarla a la tabla de Voluntarios. El problema lo tengo en que la clave para las dos tablas es que las declaré como Identity con incremento en 1, con lo cual tengo problemas al recuperarla.
Sé que el código para recuperar un código Identity es algo así:
SELECT MAX(NumDador) As ID FROM Dadores. Con este código tendría el número más alto y por énde el último ingresado.
Pero no me doy cuenta como ejecutarlo para ingresarlo a la tabla de Voluntarios.
¿Me podrás orientar?
Tengo estas tablas:
Voluntario
NumVoluntario
NumDador
ApeVol
NomVol
FNacVol
TipoDocumento
NumDocumento
DomicilioParticular
TelefonoParticular
Celular
Profesión
Dador
NumDador
FechaInscDador
DomicilioLaboral
TelefonoLaboral
Grupo
Factor
Pesor
FechaUltDonacion
Disponible
Como verás, en la tabla de Voluntarios tengo un atributo; que en la tabla de abajo es clave.
Lo que hago de momento es: Utilizo un form para Ingresar un Voluntario, luego abro otro form de ModificarVoluntario en el cual tengo todos los datos del Voluntario, incluida su clave, en este mismo form tengo un botón (Ingresar como Dador) el cual me abre un nuevo form para cargar los datos del dador, en este form tengo 2 botones, uno para ingresarlo como Dador y otro para agregar el código de ese dador a la tabla de Voluntarios.
Lo que quiero hacer es: recuperar la clave que se le genera como Dador para ingresarla a la tabla de Voluntarios. El problema lo tengo en que la clave para las dos tablas es que las declaré como Identity con incremento en 1, con lo cual tengo problemas al recuperarla.
Sé que el código para recuperar un código Identity es algo así:
SELECT MAX(NumDador) As ID FROM Dadores. Con este código tendría el número más alto y por énde el último ingresado.
Pero no me doy cuenta como ejecutarlo para ingresarlo a la tabla de Voluntarios.
¿Me podrás orientar?
Respuesta de emperador20
1
1
¿Pero una persona puede ser dador y voluntario al mismo tiempo?
yo haría una tabla de personas y pondría un campo de estado (1=dador, 2=voluntario, etc)
Con esto solucionas el problema de una clave incremental.
Si esto no te sirve, avisame que tratamos de solucionar lo otro
yo haría una tabla de personas y pondría un campo de estado (1=dador, 2=voluntario, etc)
Con esto solucionas el problema de una clave incremental.
Si esto no te sirve, avisame que tratamos de solucionar lo otro
Hola. Gracias por responder y preocuparte.
Te comento, sí, un Voluntario puede ser Dador y Socio. Hice una tabla de Voluntarios para que no haya redundancia de datos. Lo de la tabla personas lo había tenido en cuenta pero la profesora al final me dijo que opte por Voluntarios ya que es lo mismo.
Como podría llevar a cabo lo que me dices de estado 1= Dador, estado 2= Voluntario.
Te paso lo que tengo armado en código a ver si de ahí puedes orientarme.
Con el SELECT MAX(NumDador) as ID from DADOR, lo que quiero es traer el maximo o ultimo registro ingresado en Dadores ya que de esa forma actualizo la tabla de Voluntarios con el número que toma en ese momento el Dador. El ambiente no es de muchos usuarios, es más sólo una persona va a manejar el sistema. Lo hago en Sql Server xq me pidieron que lo haga en ese gestor pero este sistema no lo van a usar en un ambiente de multiples concurrencias.
En el formulario de Dadores (utilizo uno de "Modificación de Dadores" en el cual me aparece la clave de el Voluntario en el que estoy parado en ese momento, en una caja de texto).
Ahora, en esta parte no entiendo como debería hacerlo:
SELECT MAX(NumDador) As ID FROM Dadores
En que evento debo poner el código para que después de ingresar los datos de dadores, poder capturar el código de NumDador ( como ejecutar el SELECT MAX. Y otra duda también es como armar el string del Update en el sentido de como usar las comillas)
Private Sub cmdGuardaDador_Click()
Dim ConsultaSql As String
Dim X As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
' este string me tira el error: Sintaxis incorrecta cerca de la palabra clave 'Update'
ConsultaSql = "(Update Voluntarios SET NumDador = "
ConsultaSql = ConsultaSql & SQLNumber(txtNumDadorVol.Text) & " Where " & " NumVoluntario = " & txtNumVolDador.Text & ")"
Base.Execute (ConsultaSql)
Base.Close
End Sub
Y en el form Load agrego ese código para tomar el núm de Voluntario:
En form principal:
Dim conn As ADODB.Connection
Dim rsVoluntario As ADODB.Recordset 'Voluntarios
Dim rsDador As ADODB.Recordset ' Dadores
Private Sub Form_Load()
Set conn = New ADODB.Connection
conn.Open strConnect
En modulo .Bas
Option Explicit
Public Const strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User;Initial Catalog=CruzRoja;Data Source=xxxxx-C7A03134\SQLEXPRESS"
'"driver=" & strDriver & ";" & "server=" & strServer & ";" & "uid=" & strUsuario & ";" & "pwd=" & strPassward & ";" & "database=" & dbsR
Public rstDadores As New ADODB.Recordset
Public rstVoluntarios As New ADODB.Recordset
Public Base As New ADODB.Connection
Public Sub AbrirBase()
Set Base = New ADODB.Connection
Base.ConnectionString = strConnect
Base.CursorLocation = adUseClient
Base.ConnectionTimeout = 30
Base.Open
End Sub
Formulario alta voluntarios
Dim rstVoluntarios As ADODB.Recordset
Private Sub cmdGuardar_Click()
Dim ConsultaSql As String
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
ConsultaSql = "INSERT INTO Voluntarios("
ConsultaSql = ConsultaSql & "ApeVol, "
ConsultaSql = ConsultaSql & "NomVol, "
ConsultaSql = ConsultaSql & "FNacVol, "
ConsultaSql = ConsultaSql & "TipoDocumento, "
ConsultaSql = ConsultaSql & "NumDocumento, "
ConsultaSql = ConsultaSql & "DomicilioParticular, "
ConsultaSql = ConsultaSql & "TelefonoParticular, "
ConsultaSql = ConsultaSql & "Celular, "
ConsultaSql = ConsultaSql & "EMail, "
ConsultaSql = ConsultaSql & "Profesion "
ConsultaSql = ConsultaSql & ")values ("
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(0).Text) & ", " 'Apellido
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(1).Text) & ", " 'Nombre
ConsultaSql = ConsultaSql & SQLText(DTPFNac.Value) & ", " 'FechaNacimiento
ConsultaSql = ConsultaSql & SQLText(cmbTipoDoc.Text) & ", " 'TipoDocumento
ConsultaSql = ConsultaSql & Val(txtVoluntario(2).Text) & ", " 'NumeroDocumento
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(3).Text) & ", " 'Domicilio
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(4).Text) & ", " 'Teléfono particular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(5).Text) & ", " 'Celular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(6).Text) & ", " 'E-mail
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(7).Text) & ");" 'Profesión
Base.Execute (ConsultaSql)
MsgBox "Cómo desea ingresar a este Voluntario", vbInformation
Base.Close
cmdGuardar.Enabled = False
End Sub
Formulario modificar voluntarios
Private Sub Mostrar()
Dim cadenaconexion As String
cadenaStr = "Select * from Voluntarios"
Set rstVoluntarios = Base.Execute(cadenaStr)
If rstVoluntarios.EOF = False Then
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
Formulario alta dadores
Private Sub cmdGuardaDador_Click()
Dim ConsultaSql As String
'Dim IngresaNumDador As String
Dim IngresaCodDador As String
Dim X As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstDadores = New ADODB.Recordset
ConsultaSql = "INSERT INTO Dadores("
ConsultaSql = ConsultaSql & "FechaInscDador, "
ConsultaSql = ConsultaSql & "DomicilioLaboral, "
ConsultaSql = ConsultaSql & "TelefonoLaboral, "
ConsultaSql = ConsultaSql & "Grupo, "
ConsultaSql = ConsultaSql & "Factor, "
ConsultaSql = ConsultaSql & "Peso "
ConsultaSql = ConsultaSql & ")values ("
ConsultaSql = ConsultaSql & SQLText(DTPFInscDador.Value) & ", " 'FechaInscDador
ConsultaSql = ConsultaSql & SQLText(txtDador(0).Text) & ", " 'DomicilioLaboral
ConsultaSql = ConsultaSql & SQLText(txtDador(1).Text) & ", " 'TelefonoLaboral
ConsultaSql = ConsultaSql & SQLText(cmbGrupo.Text) & ", " 'Grupo
ConsultaSql = ConsultaSql & SQLText(cmbFactor.Text) & ", " 'Factor
ConsultaSql = ConsultaSql & SQLText(txtDador(2).Text) & ");" 'Peso
Base.Execute (ConsultaSql)
Base.Close
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
Private Sub cmdActualizarVol_Click()
''''Acá lo que quiero hacer es ingresar el código de Dador a la tabla de Voluntarios!!! _
Se puede hacer desde el botón de comando o debe ser en otro procedimiento??
End Sub
Bueno amigo, espero no haberme extendido demasiado, lo que pasa es que quería que entiendas bien lo que quería hacer.
Un Saludo. Daniel.
Te comento, sí, un Voluntario puede ser Dador y Socio. Hice una tabla de Voluntarios para que no haya redundancia de datos. Lo de la tabla personas lo había tenido en cuenta pero la profesora al final me dijo que opte por Voluntarios ya que es lo mismo.
Como podría llevar a cabo lo que me dices de estado 1= Dador, estado 2= Voluntario.
Te paso lo que tengo armado en código a ver si de ahí puedes orientarme.
Con el SELECT MAX(NumDador) as ID from DADOR, lo que quiero es traer el maximo o ultimo registro ingresado en Dadores ya que de esa forma actualizo la tabla de Voluntarios con el número que toma en ese momento el Dador. El ambiente no es de muchos usuarios, es más sólo una persona va a manejar el sistema. Lo hago en Sql Server xq me pidieron que lo haga en ese gestor pero este sistema no lo van a usar en un ambiente de multiples concurrencias.
En el formulario de Dadores (utilizo uno de "Modificación de Dadores" en el cual me aparece la clave de el Voluntario en el que estoy parado en ese momento, en una caja de texto).
Ahora, en esta parte no entiendo como debería hacerlo:
SELECT MAX(NumDador) As ID FROM Dadores
En que evento debo poner el código para que después de ingresar los datos de dadores, poder capturar el código de NumDador ( como ejecutar el SELECT MAX. Y otra duda también es como armar el string del Update en el sentido de como usar las comillas)
Private Sub cmdGuardaDador_Click()
Dim ConsultaSql As String
Dim X As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
' este string me tira el error: Sintaxis incorrecta cerca de la palabra clave 'Update'
ConsultaSql = "(Update Voluntarios SET NumDador = "
ConsultaSql = ConsultaSql & SQLNumber(txtNumDadorVol.Text) & " Where " & " NumVoluntario = " & txtNumVolDador.Text & ")"
Base.Execute (ConsultaSql)
Base.Close
End Sub
Y en el form Load agrego ese código para tomar el núm de Voluntario:
En form principal:
Dim conn As ADODB.Connection
Dim rsVoluntario As ADODB.Recordset 'Voluntarios
Dim rsDador As ADODB.Recordset ' Dadores
Private Sub Form_Load()
Set conn = New ADODB.Connection
conn.Open strConnect
En modulo .Bas
Option Explicit
Public Const strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User;Initial Catalog=CruzRoja;Data Source=xxxxx-C7A03134\SQLEXPRESS"
'"driver=" & strDriver & ";" & "server=" & strServer & ";" & "uid=" & strUsuario & ";" & "pwd=" & strPassward & ";" & "database=" & dbsR
Public rstDadores As New ADODB.Recordset
Public rstVoluntarios As New ADODB.Recordset
Public Base As New ADODB.Connection
Public Sub AbrirBase()
Set Base = New ADODB.Connection
Base.ConnectionString = strConnect
Base.CursorLocation = adUseClient
Base.ConnectionTimeout = 30
Base.Open
End Sub
Formulario alta voluntarios
Dim rstVoluntarios As ADODB.Recordset
Private Sub cmdGuardar_Click()
Dim ConsultaSql As String
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
ConsultaSql = "INSERT INTO Voluntarios("
ConsultaSql = ConsultaSql & "ApeVol, "
ConsultaSql = ConsultaSql & "NomVol, "
ConsultaSql = ConsultaSql & "FNacVol, "
ConsultaSql = ConsultaSql & "TipoDocumento, "
ConsultaSql = ConsultaSql & "NumDocumento, "
ConsultaSql = ConsultaSql & "DomicilioParticular, "
ConsultaSql = ConsultaSql & "TelefonoParticular, "
ConsultaSql = ConsultaSql & "Celular, "
ConsultaSql = ConsultaSql & "EMail, "
ConsultaSql = ConsultaSql & "Profesion "
ConsultaSql = ConsultaSql & ")values ("
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(0).Text) & ", " 'Apellido
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(1).Text) & ", " 'Nombre
ConsultaSql = ConsultaSql & SQLText(DTPFNac.Value) & ", " 'FechaNacimiento
ConsultaSql = ConsultaSql & SQLText(cmbTipoDoc.Text) & ", " 'TipoDocumento
ConsultaSql = ConsultaSql & Val(txtVoluntario(2).Text) & ", " 'NumeroDocumento
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(3).Text) & ", " 'Domicilio
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(4).Text) & ", " 'Teléfono particular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(5).Text) & ", " 'Celular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(6).Text) & ", " 'E-mail
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(7).Text) & ");" 'Profesión
Base.Execute (ConsultaSql)
MsgBox "Cómo desea ingresar a este Voluntario", vbInformation
Base.Close
cmdGuardar.Enabled = False
End Sub
Formulario modificar voluntarios
Private Sub Mostrar()
Dim cadenaconexion As String
cadenaStr = "Select * from Voluntarios"
Set rstVoluntarios = Base.Execute(cadenaStr)
If rstVoluntarios.EOF = False Then
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
Formulario alta dadores
Private Sub cmdGuardaDador_Click()
Dim ConsultaSql As String
'Dim IngresaNumDador As String
Dim IngresaCodDador As String
Dim X As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstDadores = New ADODB.Recordset
ConsultaSql = "INSERT INTO Dadores("
ConsultaSql = ConsultaSql & "FechaInscDador, "
ConsultaSql = ConsultaSql & "DomicilioLaboral, "
ConsultaSql = ConsultaSql & "TelefonoLaboral, "
ConsultaSql = ConsultaSql & "Grupo, "
ConsultaSql = ConsultaSql & "Factor, "
ConsultaSql = ConsultaSql & "Peso "
ConsultaSql = ConsultaSql & ")values ("
ConsultaSql = ConsultaSql & SQLText(DTPFInscDador.Value) & ", " 'FechaInscDador
ConsultaSql = ConsultaSql & SQLText(txtDador(0).Text) & ", " 'DomicilioLaboral
ConsultaSql = ConsultaSql & SQLText(txtDador(1).Text) & ", " 'TelefonoLaboral
ConsultaSql = ConsultaSql & SQLText(cmbGrupo.Text) & ", " 'Grupo
ConsultaSql = ConsultaSql & SQLText(cmbFactor.Text) & ", " 'Factor
ConsultaSql = ConsultaSql & SQLText(txtDador(2).Text) & ");" 'Peso
Base.Execute (ConsultaSql)
Base.Close
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
Private Sub cmdActualizarVol_Click()
''''Acá lo que quiero hacer es ingresar el código de Dador a la tabla de Voluntarios!!! _
Se puede hacer desde el botón de comando o debe ser en otro procedimiento??
End Sub
Bueno amigo, espero no haberme extendido demasiado, lo que pasa es que quería que entiendas bien lo que quería hacer.
Un Saludo. Daniel.
Saltee el código porque así puesto me pierdo totalmente.
Mira sigo insistiendo que vos tienes una persona que tiene 2 estados o es dador o es voluntario. Si necesitas también podes hacer otra tabla con los datos de cuando una persona cambia de estado para que tengas ese registro.
De esta manera solucionas todos tus problemas de id, y la lógica del sistema me parece lo más normalizada en cuanto a la base de datos.
Creo que tendrías que hablarles a tu profesora y mostrarle las tablas relacionadas personas (id_persona, nombre, apellido, fecha_nac, COD_ESTADO), otra tabla de persona_estado (cod_estado, descripción) así tienes relacionado, ¿que pasa si en el futuro aparece una tercera opción de personas ejemplo dador, voluntario, por_empresa
bueno vamos a tratar de resolver problema por problema.
Para tomar el id del dador, si en alguna pantalla lo capturas lo podes elevar a una variable global (solo aceptable en visual basic 6.0), la declaras en un modulo así public idpersona as string
cada vez que seleccionas un dador, lo guardas en esa variable y después lo usas donde quieras.
Vos me escribís estos...
Ahora, en esta parte no entiendo como debería hacerlo:
SELECT MAX(NumDador) As ID FROM Dadores
En que evento debo poner el código para que después de ingresar los datos de dadores, poder capturar el código de NumDador ( como ejecutar el SELECT MAX. Y otra duda también es como armar el string del Update en el sentido de como usar las comillas)
Para seleccionar el id y usarlo con una variable global creo que estaría solucionado.
despues el update...
Private Sub cmdGuardaDador_Click()
Dim ConsultaSql As String
Dim X As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
ConsultaSql = "Update Voluntarios SET NumDador = "
ConsultaSql = ConsultaSql & SQLNumber(txtNumDadorVol.Text) & " Where " & " NumVoluntario = " & txtNumVolDador.Text & ")"
Vos tienes esto, yo te la armo abajo de como lo haría
ConsultaSql = "Update Voluntarios SET NumDador = " & txtNumDadorVol.Text & " Where NumVoluntario = " & txtNumVolDador.Text"
Doy por entendido que txtnumdadorvol es numérico sino iría '" & txtnumdadorvol.text & ""
Empecemos por ahí y vallamos pregunta por pregunta
gracias y suerte
Mira sigo insistiendo que vos tienes una persona que tiene 2 estados o es dador o es voluntario. Si necesitas también podes hacer otra tabla con los datos de cuando una persona cambia de estado para que tengas ese registro.
De esta manera solucionas todos tus problemas de id, y la lógica del sistema me parece lo más normalizada en cuanto a la base de datos.
Creo que tendrías que hablarles a tu profesora y mostrarle las tablas relacionadas personas (id_persona, nombre, apellido, fecha_nac, COD_ESTADO), otra tabla de persona_estado (cod_estado, descripción) así tienes relacionado, ¿que pasa si en el futuro aparece una tercera opción de personas ejemplo dador, voluntario, por_empresa
bueno vamos a tratar de resolver problema por problema.
Para tomar el id del dador, si en alguna pantalla lo capturas lo podes elevar a una variable global (solo aceptable en visual basic 6.0), la declaras en un modulo así public idpersona as string
cada vez que seleccionas un dador, lo guardas en esa variable y después lo usas donde quieras.
Vos me escribís estos...
Ahora, en esta parte no entiendo como debería hacerlo:
SELECT MAX(NumDador) As ID FROM Dadores
En que evento debo poner el código para que después de ingresar los datos de dadores, poder capturar el código de NumDador ( como ejecutar el SELECT MAX. Y otra duda también es como armar el string del Update en el sentido de como usar las comillas)
Para seleccionar el id y usarlo con una variable global creo que estaría solucionado.
despues el update...
Private Sub cmdGuardaDador_Click()
Dim ConsultaSql As String
Dim X As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
ConsultaSql = "Update Voluntarios SET NumDador = "
ConsultaSql = ConsultaSql & SQLNumber(txtNumDadorVol.Text) & " Where " & " NumVoluntario = " & txtNumVolDador.Text & ")"
Vos tienes esto, yo te la armo abajo de como lo haría
ConsultaSql = "Update Voluntarios SET NumDador = " & txtNumDadorVol.Text & " Where NumVoluntario = " & txtNumVolDador.Text"
Doy por entendido que txtnumdadorvol es numérico sino iría '" & txtnumdadorvol.text & ""
Empecemos por ahí y vallamos pregunta por pregunta
gracias y suerte
Estimado. Pude solucionar el ingreso del número de Dador a la tabla Voluntarios modificando las comillas como me sugeriste, pero me tira el siguiente error cuando dejo el form de dadores una vez ingresado este como Dador y Voluntario, y me vuelvo al form de Modificar Voluntarios y quiero seguir avanzando en los registros, y no sé porque me tira el siguiente error.
P.D: El mismo error me tira en el form de Dadores luego de ingresar un Dador como Voluntario y quiero seguir avanzando en los registros de Dadores
Error '3704' en tiempo de ejecución:
La operación no está permitida si el objeto está cerrado.
Este es el código que me tira error: (está en el form de Modificar Voluntarios que te comentaba más arriba)
No sé porque me lo tira ya que no lo tengo cerrado en ninguna parte del código.
Private Sub cmdSiguiente_Click()
rstVoluntarios.MoveNext 'Me marca esta línea como la del error.
If rstVoluntarios.EOF Then
MsgBox " es el último registro", vbExclamation, "Sistema"
rstVoluntarios.MovePrevious
Else
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
'DTPFNac.Value = rstVoluntarios.Fields("")
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
No sé porque ya que no lo tengo cerrado en ninguna parte del código.
P.D: Si te sirve de algo para orientarme mejor te envío el sistema a un mail. Muchas gracias de antemano!
Saludos!
P.D: El mismo error me tira en el form de Dadores luego de ingresar un Dador como Voluntario y quiero seguir avanzando en los registros de Dadores
Error '3704' en tiempo de ejecución:
La operación no está permitida si el objeto está cerrado.
Este es el código que me tira error: (está en el form de Modificar Voluntarios que te comentaba más arriba)
No sé porque me lo tira ya que no lo tengo cerrado en ninguna parte del código.
Private Sub cmdSiguiente_Click()
rstVoluntarios.MoveNext 'Me marca esta línea como la del error.
If rstVoluntarios.EOF Then
MsgBox " es el último registro", vbExclamation, "Sistema"
rstVoluntarios.MovePrevious
Else
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
'DTPFNac.Value = rstVoluntarios.Fields("")
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
No sé porque ya que no lo tengo cerrado en ninguna parte del código.
P.D: Si te sirve de algo para orientarme mejor te envío el sistema a un mail. Muchas gracias de antemano!
Saludos!
El formulario, en un principio era solamente para recorrer los registros que tenía ingresado en la tabla Voluntarios, pero luego le agregué la funcionalidad de que pueda llamar a los otros formularios para ingresar los datos específicos ya sea de Dador o de cualquier otra cosa, y es ahí donde me aparece este inconveniente y no se como solucionarlo, y el recordset no lo cierro en ninguna parte.
Por ahí la ayuda que necesito es que me des los pasos a seguir para usar bien un recordset...
Cuando cerrarlo y volverlo a abrir por ej.
Bueno, muchas gracias por responder y preocuparte.
Espero tu respuesta. Gracias nuevamente!
Por ahí la ayuda que necesito es que me des los pasos a seguir para usar bien un recordset...
Cuando cerrarlo y volverlo a abrir por ej.
Bueno, muchas gracias por responder y preocuparte.
Espero tu respuesta. Gracias nuevamente!
asi los uso yo
call abre
Set Base = New ADODB.Connection
AbrirBase
Set rstDadores = New ADODB.Recordset
ConsultaSql = "select * from datos_prof"
Base.Execute (ConsultaSql)
Rs.AddNew
Rs!cuil = ArmaCuil
Rs!legajo = txtleg.Text
Rs!apellido = txtnombre.Text
If txtcargo.Text <> "" Then
Rs!cargo = txtcargo.Text
End If
Rs.Update
esto uso para un alta, hay muchas modelos distintos para hacerlo
despues para recorrerlo
una vez que lo abris uso
do while not rs.eof
text1 = rs!campo1
asi con todos
rs.movenext
loop
rs.close
set rs=nothing
empezamos y vemos como vamos
call abre
Set Base = New ADODB.Connection
AbrirBase
Set rstDadores = New ADODB.Recordset
ConsultaSql = "select * from datos_prof"
Base.Execute (ConsultaSql)
Rs.AddNew
Rs!cuil = ArmaCuil
Rs!legajo = txtleg.Text
Rs!apellido = txtnombre.Text
If txtcargo.Text <> "" Then
Rs!cargo = txtcargo.Text
End If
Rs.Update
esto uso para un alta, hay muchas modelos distintos para hacerlo
despues para recorrerlo
una vez que lo abris uso
do while not rs.eof
text1 = rs!campo1
asi con todos
rs.movenext
loop
rs.close
set rs=nothing
empezamos y vemos como vamos
Estimado amigo. Gracias por responder y poner tanto interés. Resulta que no me anduvo ni siquiera en el form que antes me andaba por lo menos antes de abrir el otro formulario. Este código ni siquiera me permite avanzar más de 2 registros, y luego me tira El error:
Error '3704' en tiempo de ejecución. La operación no está permitida si el objeto está cerrado.
He aquí el código:
Private Sub cmdSiguiente_Click()
set rstVoluntarios = New ADODB.Recordset
Do While Not rstVoluntarios.EOF ' línea que me marca error!
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
'DTPFNac.Value = rstVoluntarios.Fields("")
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
rstVoluntarios.MoveNext
Loop
rstVoluntarios.Close
Set rstVoluntarios = Nothing
End Sub
Bueno amigo. Espero tu respuesta. Muchas gracias!
Error '3704' en tiempo de ejecución. La operación no está permitida si el objeto está cerrado.
He aquí el código:
Private Sub cmdSiguiente_Click()
set rstVoluntarios = New ADODB.Recordset
Do While Not rstVoluntarios.EOF ' línea que me marca error!
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
'DTPFNac.Value = rstVoluntarios.Fields("")
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
rstVoluntarios.MoveNext
Loop
rstVoluntarios.Close
Set rstVoluntarios = Nothing
End Sub
Bueno amigo. Espero tu respuesta. Muchas gracias!
No encuentro ningún agujero en el código
Proba esto hace una interrupción en set rstvoluntarios y hace un paso a paso con F8 y decime en que linea te da el error
Proba esto hace una interrupción en set rstvoluntarios y hace un paso a paso con F8 y decime en que linea te da el error
Hola amigo. Gracias por responder.
Esta es la línea que me marca error:
Do While Not rstVoluntarios.EOF
Saludos!
Esta es la línea que me marca error:
Do While Not rstVoluntarios.EOF
Saludos!
¿Pero la consulta para llenar el recordset donde la haces?
En ese código faltaría llamar a la conexión con la base y pasarle la consulta para que llene el recordset
Set rstDadores = New ADODB.Recordset
ConsultaSql = "select * from datos_prof"
Base. Execute (ConsultaSql)
En ese código faltaría llamar a la conexión con la base y pasarle la consulta para que llene el recordset
Set rstDadores = New ADODB.Recordset
ConsultaSql = "select * from datos_prof"
Base. Execute (ConsultaSql)
Estimado amigo. Lo que hago es: en el form load Abro la base con un procedimiento y llamo a este procedimiento también desde el form load, con lo cual, al cargar el formulario ya tengo las asiganaciones hechas, y lo que hago después el moverme entre los registros.
Private Sub Mostrar()
Dim cadenaconexion As String
cadenaStr = "Select * from Voluntarios"
Set rstVoluntarios = Base.Execute(cadenaStr)
If rstVoluntarios.EOF = False Then
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
Ahora: luego de mostrar e ir recorriendo los registros, lo que hago es que al presionar un command en este formulario se me aparezca un form en el cual cargo los datos específicos del dador (x ej.), lo grabo, y luego de finalizada la carga de este, cierro este form, y me queda el form de Voluntarios, y lo que quiero es poder seguir recorriendo los registros de Voluntarios para poder ingresar otro voluntario como Dador (en este caso) y no me deja seguir recorriendo los registros.
Me sale el error: Error '3704' en tiempo de ejecución.
La operación no está permitida si el objeto está cerrado.
Presiono Depurar y la línea que me marca error es : rstVoluntarios.MoveNext
Este es el código armado del botón siguiente:
Private Sub cmdSiguiente_Click()
rstVoluntarios.MoveNext
If rstVoluntarios.EOF Then
MsgBox " es el último registro", vbExclamation, "Sistema"
rstVoluntarios.MovePrevious
Else
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
'DTPFNac.Value = rstVoluntarios.Fields("")
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
Bueno amigo. Desde ya muchas gracias, y espero me ayudes a dilucidar este problema.
Saludos. Daniel.
Private Sub Mostrar()
Dim cadenaconexion As String
cadenaStr = "Select * from Voluntarios"
Set rstVoluntarios = Base.Execute(cadenaStr)
If rstVoluntarios.EOF = False Then
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
Ahora: luego de mostrar e ir recorriendo los registros, lo que hago es que al presionar un command en este formulario se me aparezca un form en el cual cargo los datos específicos del dador (x ej.), lo grabo, y luego de finalizada la carga de este, cierro este form, y me queda el form de Voluntarios, y lo que quiero es poder seguir recorriendo los registros de Voluntarios para poder ingresar otro voluntario como Dador (en este caso) y no me deja seguir recorriendo los registros.
Me sale el error: Error '3704' en tiempo de ejecución.
La operación no está permitida si el objeto está cerrado.
Presiono Depurar y la línea que me marca error es : rstVoluntarios.MoveNext
Este es el código armado del botón siguiente:
Private Sub cmdSiguiente_Click()
rstVoluntarios.MoveNext
If rstVoluntarios.EOF Then
MsgBox " es el último registro", vbExclamation, "Sistema"
rstVoluntarios.MovePrevious
Else
txtModVoluntario(0).Text = rstVoluntarios!NumVoluntario
txtModVoluntario(1).Text = rstVoluntarios!ApeVol
txtModVoluntario(2).Text = rstVoluntarios!NomVol
'DTPFNac.Value = rstVoluntarios.Fields("")
DTPFNac.Value = rstVoluntarios!FNacVol
cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
txtModVoluntario(6).Text = rstVoluntarios!Celular
txtModVoluntario(7).Text = rstVoluntarios!EMail
txtModVoluntario(8).Text = rstVoluntarios!Profesion
End If
End Sub
Bueno amigo. Desde ya muchas gracias, y espero me ayudes a dilucidar este problema.
Saludos. Daniel.
- Compartir respuesta
- Anónimo
ahora mismo