Cómo recuperar una clave identity en el programa informático Visual Basic
Estoy muy agradecido por tu aporte anterior. Estuvo muy bueno.
Ahora... Vuelvo con el tema de recuperar una clave identity.
Quisiera ver si está bien armada esta consulta de selección:
Private Sub Form_Terminate()
Dim UltRegistro As String
Set Base = New ADODB.Connection
Set rstvol = New ADODB.Recordset
UltRegistro = "SELECT MAX(NumVoluntario) As ID FROM Voluntarios"
rstvol = Base.Execute(UltRegistro)
txtVoluntario(0).Text = rstvol!NumVoluntario
End Sub
Lo que si sé es que está mal usado en este procedimiento de evento (¿cuál me aconsejas usar?)
Ahora... Vuelvo con el tema de recuperar una clave identity.
Quisiera ver si está bien armada esta consulta de selección:
Private Sub Form_Terminate()
Dim UltRegistro As String
Set Base = New ADODB.Connection
Set rstvol = New ADODB.Recordset
UltRegistro = "SELECT MAX(NumVoluntario) As ID FROM Voluntarios"
rstvol = Base.Execute(UltRegistro)
txtVoluntario(0).Text = rstvol!NumVoluntario
End Sub
Lo que si sé es que está mal usado en este procedimiento de evento (¿cuál me aconsejas usar?)
1 respuesta
Respuesta de emperador20
1
1
¿Pero vos lógicamente cuando lo quieres recuperar? ¿
al entrar al form?, ¿Al salir?
Porque ahí hasta que no cerras el form no lo busca
al entrar al form?, ¿Al salir?
Porque ahí hasta que no cerras el form no lo busca
Claro. Exactamente eso era lo que yo te decía: que ya sabía que estaba mal planteado. El tema es que no sé en que procedimiento de evento ponerlo (más allá de que tampoco sé si está bien armada la consulta - que también quería ver si me podías decir como armarla.-).
Qué es lo que quiero hacer: Tengo los text para ingresar los datos del Voluntario: Nombre, Apellido, FechaNacimiento, etc. También tengo un text para el Numero de Voluntario, el cual, en la base de datos lo declaré como autonumérico (Identity, con incremento en 1) y no se como ejecutar el procedimiento SELECT MAX (en que evento) para que luego de guardar los datos del voluntario se pueda tomar ese num de Voluntario y ponerlo en el textbox txtNumVoluntario.
Bueno amigo. Espero se haya entendido lo que quiero y que me puedas dar una mano.
Gracias. Daniel.
Qué es lo que quiero hacer: Tengo los text para ingresar los datos del Voluntario: Nombre, Apellido, FechaNacimiento, etc. También tengo un text para el Numero de Voluntario, el cual, en la base de datos lo declaré como autonumérico (Identity, con incremento en 1) y no se como ejecutar el procedimiento SELECT MAX (en que evento) para que luego de guardar los datos del voluntario se pueda tomar ese num de Voluntario y ponerlo en el textbox txtNumVoluntario.
Bueno amigo. Espero se haya entendido lo que quiero y que me puedas dar una mano.
Gracias. Daniel.
Eso tendría que ir en el load del form, cuando ingresas al form que te traiga el ultimo numero de id y lo ponga directamente en el text para dar el alta.
Set Rs = clase_datos.Abre("SELECT MAX(legajo) as ultleg FROM alumnos WHERE cod_colegio = '" & Col & "'")
If Not IsNull(Rs!ultleg) <> False Then
txtultleg.Text = Rs!ultleg
Else
MsgBox "No Hay Ningun Alumno Cargado", vbInformation, "Control Alumnos"
End If
Rs.Close
Set Rs = Nothing
Este es donde sacas el max vos tienes que incrementarlo en 1 y listo.
Pero el numero de voluntario lo tienes que poner antes de dar el alta, si entras ahí es para dar una alta, directamente lo pones y listo.
Set Rs = clase_datos.Abre("SELECT MAX(legajo) as ultleg FROM alumnos WHERE cod_colegio = '" & Col & "'")
If Not IsNull(Rs!ultleg) <> False Then
txtultleg.Text = Rs!ultleg
Else
MsgBox "No Hay Ningun Alumno Cargado", vbInformation, "Control Alumnos"
End If
Rs.Close
Set Rs = Nothing
Este es donde sacas el max vos tienes que incrementarlo en 1 y listo.
Pero el numero de voluntario lo tienes que poner antes de dar el alta, si entras ahí es para dar una alta, directamente lo pones y listo.
Hola. Creo que por ahí va la cosa aunque sigue sin convencerme el evento en el que pones al código. Yo ingreso un Voluntario sin problemas porque tengo la clave como identity y con incremento en 1. El tema es que quiero que luego de guardar el registro me muestre la clave en el text. Por eso mi duda es en que evento ejecutar el código para que una vez guardado me muestre el último registro ingresado (que siempre será el que haya ingresado recién), y en base al número que me muestra hacer el alta de Socio u alguna otra tabla que tenga en la BD.
Bueno, espero saberme explicar, y que me puedas dar una mano. Gracias!
Bueno, espero saberme explicar, y que me puedas dar una mano. Gracias!
Eso va al final del código de alta, no va en ningún evento aparte
Después de vaciar los casilleros y dar el mensaje de alta ok ahí buscas el ultimo
Después de vaciar los casilleros y dar el mensaje de alta ok ahí buscas el ultimo
Amigo. Está muy buena tu explicación. Igual, por desgracia me surgió un error de compilación: Uso no válido de la propiedad y me marca toda esta línea que te paso en amarillo, y la parte de la asignación del recordset en azul.
Te paso la cadena armada con mis datos, pero, la primer parte de la asignación no la entiendo: clase_datos.Abre
rsVol = clase_datos.Abre("SELECT MAX(ID) as ultID FROM Voluntarios WHERE NumVoluntario = '" & NumVoluntario & "'")
Desde ya muchas gracias por tomarte el tiempo de explicarme, y espero puedas ayudarme a terminar con este tema que me hace doler la cabeza. jaja.
Saludos. Daniel.
Te paso la cadena armada con mis datos, pero, la primer parte de la asignación no la entiendo: clase_datos.Abre
rsVol = clase_datos.Abre("SELECT MAX(ID) as ultID FROM Voluntarios WHERE NumVoluntario = '" & NumVoluntario & "'")
Desde ya muchas gracias por tomarte el tiempo de explicarme, y espero puedas ayudarme a terminar con este tema que me hace doler la cabeza. jaja.
Saludos. Daniel.
Amigo. Te paso el código completo por las dudas. En el apartado anterior estaba mal escrito una parte del código, lo corregí pero igual me tira el mismo error pero sólo me marca en azul la variable recordset hasta la asignación. rsVol =
He aquí el código completo:
Private Sub cmdGuardar_Click()
Dim rsVol As ADODB.Recordset
Dim ConsultaSql As String
'Dim x As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
'ConsultaSql es un string. lo que va adentro es String así que va ence _
rrado entre "", luego, la unión de cadenas se hace con &
ConsultaSql = "INSERT INTO Voluntarios("
'ConsultaSql = ConsultaSql & "NumVoluntario, "
'ConsultaSql = ConsultaSql & "NumSocio, "
'ConsultaSql = ConsultaSql & "NumDador, "
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 & "Tipo_Contribucion "
ConsultaSql = ConsultaSql & ")values ("
'ConsultaSql = ConsultaSql & SQLText(txtVoluntario(0).Text) & ", " 'Num Voluntario
'ConsultaSql = ConsultaSql & Val(Trim(txtVoluntario(1).Text)) & ", " 'Num Socio
'ConsultaSql = ConsultaSql & Val(Trim(txtVoluntario(2).Text)) & ", " ''Num Dador
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(1).Text) & ", " 'Apellido
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(2).Text) & ", " 'Nombre
'cambiar por esta:
ConsultaSql = ConsultaSql & SQLText(DTPFNac.Value) & ", " 'FechaNacimiento
'Esta línea me daba error:
'ConsultaSql = ConsultaSql & SQLDate(txtVoluntario(3).Text) & ", " 'FechaNacimiento
ConsultaSql = ConsultaSql & SQLText(cmbTipoDoc.Text) & ", " 'TipoDocumento
ConsultaSql = ConsultaSql & Val(txtVoluntario(3).Text) & ", " 'NumeroDocumento
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(4).Text) & ", " 'Domicilio
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(5).Text) & ", " 'Teléfono particular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(6).Text) & ", " 'Celular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(7).Text) & ", " 'E-mail
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(8).Text) & ");" 'Profesión
'ConsultaSql = ConsultaSql & SQLText(cmbTipoContribucion.Text) & ");" 'Tipo Contribución
Base.Execute (ConsultaSql)
MsgBox "Cómo desea ingresar a este Voluntario", vbInformation
Base.Close
'Limpiar_Text
'Limpiar_Combos
Set rstvol = New ADODB.Recordset
rsVol = clase_datos.Abre("SELECT MAX(ID) as ultID FROM Voluntarios WHERE NumVoluntario = '" & NumVoluntario & "'")
If Not IsNull(rstvol!ultID) <> False Then
txtVoluntario(0).Text = rsVol!ultID
Else
MsgBox "No Hay Ningun Voluntario Cargado", vbInformation, "Control de Voluntarios"
End If
rsVol.Close
Set rsVol = Nothing
cmdGuardar.Enabled = False
End Sub
Bueno, muchas gracias nuevamente!
Saludos. Daniel.
He aquí el código completo:
Private Sub cmdGuardar_Click()
Dim rsVol As ADODB.Recordset
Dim ConsultaSql As String
'Dim x As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
'ConsultaSql es un string. lo que va adentro es String así que va ence _
rrado entre "", luego, la unión de cadenas se hace con &
ConsultaSql = "INSERT INTO Voluntarios("
'ConsultaSql = ConsultaSql & "NumVoluntario, "
'ConsultaSql = ConsultaSql & "NumSocio, "
'ConsultaSql = ConsultaSql & "NumDador, "
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 & "Tipo_Contribucion "
ConsultaSql = ConsultaSql & ")values ("
'ConsultaSql = ConsultaSql & SQLText(txtVoluntario(0).Text) & ", " 'Num Voluntario
'ConsultaSql = ConsultaSql & Val(Trim(txtVoluntario(1).Text)) & ", " 'Num Socio
'ConsultaSql = ConsultaSql & Val(Trim(txtVoluntario(2).Text)) & ", " ''Num Dador
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(1).Text) & ", " 'Apellido
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(2).Text) & ", " 'Nombre
'cambiar por esta:
ConsultaSql = ConsultaSql & SQLText(DTPFNac.Value) & ", " 'FechaNacimiento
'Esta línea me daba error:
'ConsultaSql = ConsultaSql & SQLDate(txtVoluntario(3).Text) & ", " 'FechaNacimiento
ConsultaSql = ConsultaSql & SQLText(cmbTipoDoc.Text) & ", " 'TipoDocumento
ConsultaSql = ConsultaSql & Val(txtVoluntario(3).Text) & ", " 'NumeroDocumento
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(4).Text) & ", " 'Domicilio
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(5).Text) & ", " 'Teléfono particular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(6).Text) & ", " 'Celular
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(7).Text) & ", " 'E-mail
ConsultaSql = ConsultaSql & SQLText(txtVoluntario(8).Text) & ");" 'Profesión
'ConsultaSql = ConsultaSql & SQLText(cmbTipoContribucion.Text) & ");" 'Tipo Contribución
Base.Execute (ConsultaSql)
MsgBox "Cómo desea ingresar a este Voluntario", vbInformation
Base.Close
'Limpiar_Text
'Limpiar_Combos
Set rstvol = New ADODB.Recordset
rsVol = clase_datos.Abre("SELECT MAX(ID) as ultID FROM Voluntarios WHERE NumVoluntario = '" & NumVoluntario & "'")
If Not IsNull(rstvol!ultID) <> False Then
txtVoluntario(0).Text = rsVol!ultID
Else
MsgBox "No Hay Ningun Voluntario Cargado", vbInformation, "Control de Voluntarios"
End If
rsVol.Close
Set rsVol = Nothing
cmdGuardar.Enabled = False
End Sub
Bueno, muchas gracias nuevamente!
Saludos. Daniel.
Primero lo de consultasql = consultasql eso ya deja de usarlo. Queda mal y no es un buen estilo de programación.
El error del recordset esta acá
Dim rsVol As ADODB.Recordset
Dim ConsultaSql As String
'Dim x As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
vos declaras rsvol y no declaras rstvoluntarios
saludos
Leandro
El error del recordset esta acá
Dim rsVol As ADODB.Recordset
Dim ConsultaSql As String
'Dim x As Integer
Set Base = New ADODB.Connection
AbrirBase
Set rstVoluntarios = New ADODB.Recordset
vos declaras rsvol y no declaras rstvoluntarios
saludos
Leandro
Estimado amigo. Gracias por tomarte el tiempo para contestar!
Tenías razón pero he hecho esta modificación y no me muestra nada más que el número cero en el text que he designado para que me lo muestre.
Te paso el código a ver si encuentras adonde falla. Gracias!
Private Sub Form_Load()
'Dim CadenaVol As String
'Dim CadenaSocio As String
'Dim cadenaDador As String
Dim NumSoc As Integer
Dim NumDad As Integer
Dim rstVolS As ADODB.Recordset
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 6
AbrirBase
Mostrar
MostrarSocio
End Sub
Private Sub Mostrar()
Dim cadenaconexion As String
Dim cadenaStr As String
cadenaStr = "Select * from Voluntarios"
rstVoluntarios.Open cadenaStr, Base
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
Private Sub MostrarSocio()
Dim CadenaSocio As String
CadenaSocio = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocio, Base
If Not IsNull(rstVolS!numsocio) Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End Sub
Saludos! Daniel.
Tenías razón pero he hecho esta modificación y no me muestra nada más que el número cero en el text que he designado para que me lo muestre.
Te paso el código a ver si encuentras adonde falla. Gracias!
Private Sub Form_Load()
'Dim CadenaVol As String
'Dim CadenaSocio As String
'Dim cadenaDador As String
Dim NumSoc As Integer
Dim NumDad As Integer
Dim rstVolS As ADODB.Recordset
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 6
AbrirBase
Mostrar
MostrarSocio
End Sub
Private Sub Mostrar()
Dim cadenaconexion As String
Dim cadenaStr As String
cadenaStr = "Select * from Voluntarios"
rstVoluntarios.Open cadenaStr, Base
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
Private Sub MostrarSocio()
Dim CadenaSocio As String
CadenaSocio = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocio, Base
If Not IsNull(rstVolS!numsocio) Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End Sub
Saludos! Daniel.
Sí. Llegó 2 veces. jaja. Ya que estamos t hago una consulta
Quiero hacer un procedimiento para que me muestre el Número de socio que le asigné a un voluntario en un formulario distinto, en el cual me muestre todos los datos del voluntario y además la clave que fue asinada a ese Voluntario, para lo cual declaré un registro rstVols. Mi problema está en que no me lo muestra, y que tampoco se donde usar el procedimiento. Te paso el código para ver si ves donde estoy fallando. La única forma que no m mostró el cero y sí me mostró un número fue cuando eliminé unos cuantos registros hasta que el actual fue uno que sí tenía Número de socio, pero luego me pasó lo mismo, me mostró ese mismo número para todos los demás registros!
Otro problema que tengo es cuando elimino un registro, lo elimina pero me lo sigue mostrando en el formulario.
Private Sub Form_Load()
Dim NumSoc As Integer
Dim NumDad As Integer
Dim rstVolS As ADODB.Recordset
AbrirBase
Mostrar
MostrarSocio
End Sub
Private Sub Mostrar()
'Dim CadenaSocio As String
Dim cadenaconexion As String
Dim cadenaStr As String
'CadenaSocio = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
cadenaStr = "Select * from Voluntarios"
rstVoluntarios.Open cadenaStr, Base
If rstVoluntarios.EOF = False Then
'txtNumDador.Text = rstVoluntarios!NumDador + 1
'txtNumSocio.Text = rstVoluntarios!NumSocio + 1
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
Private Sub MostrarSocio()
Dim CadenaSocioVoluntario As String
CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocioVoluntario, Base
If rstVolS.EOF = False Then
If Not IsNull(rstVolS!numsocio) <> False Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End If
End Sub
y el código de eliminar xq no anda tampoco lo puedo ver.
Private Sub cmdEliminarVol_Click()
Dim rstVolElim As ADODB.Recordset
Dim StrElimVol As String
Set rstVolElim = New ADODB.Recordset
StrElimVol = "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Base.Execute (StrElimVol)
MsgBox "Voluntario Eliminado"
End Sub
¿No hay un método similar al refresh para que se refresquen los registros luego de eliminar?
Bueno amigo. Me despido. Espero me ayudes a encontrar la solución. Saludos. Daniel
Quiero hacer un procedimiento para que me muestre el Número de socio que le asigné a un voluntario en un formulario distinto, en el cual me muestre todos los datos del voluntario y además la clave que fue asinada a ese Voluntario, para lo cual declaré un registro rstVols. Mi problema está en que no me lo muestra, y que tampoco se donde usar el procedimiento. Te paso el código para ver si ves donde estoy fallando. La única forma que no m mostró el cero y sí me mostró un número fue cuando eliminé unos cuantos registros hasta que el actual fue uno que sí tenía Número de socio, pero luego me pasó lo mismo, me mostró ese mismo número para todos los demás registros!
Otro problema que tengo es cuando elimino un registro, lo elimina pero me lo sigue mostrando en el formulario.
Private Sub Form_Load()
Dim NumSoc As Integer
Dim NumDad As Integer
Dim rstVolS As ADODB.Recordset
AbrirBase
Mostrar
MostrarSocio
End Sub
Private Sub Mostrar()
'Dim CadenaSocio As String
Dim cadenaconexion As String
Dim cadenaStr As String
'CadenaSocio = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
cadenaStr = "Select * from Voluntarios"
rstVoluntarios.Open cadenaStr, Base
If rstVoluntarios.EOF = False Then
'txtNumDador.Text = rstVoluntarios!NumDador + 1
'txtNumSocio.Text = rstVoluntarios!NumSocio + 1
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
Private Sub MostrarSocio()
Dim CadenaSocioVoluntario As String
CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocioVoluntario, Base
If rstVolS.EOF = False Then
If Not IsNull(rstVolS!numsocio) <> False Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End If
End Sub
y el código de eliminar xq no anda tampoco lo puedo ver.
Private Sub cmdEliminarVol_Click()
Dim rstVolElim As ADODB.Recordset
Dim StrElimVol As String
Set rstVolElim = New ADODB.Recordset
StrElimVol = "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Base.Execute (StrElimVol)
MsgBox "Voluntario Eliminado"
End Sub
¿No hay un método similar al refresh para que se refresquen los registros luego de eliminar?
Bueno amigo. Me despido. Espero me ayudes a encontrar la solución. Saludos. Daniel
Vamos a cerrar esta pregunta y seguimos en la otra porque creo que también te la coneste sin quieres
porque vos llamas a select * voluntarios sin where entoncers te trae todo lo que este en la base, como política de programación el * no se usa, si es necesario para una tabla chiquita pero muy chiquita y donde uses todos los campos de todos los registros
acá no vas a usar todos los registros, con el where vas a seleccionar cual quieres mostrar.
Saludos y por favor termínala y la seguimos en la otra
porque vos llamas a select * voluntarios sin where entoncers te trae todo lo que este en la base, como política de programación el * no se usa, si es necesario para una tabla chiquita pero muy chiquita y donde uses todos los campos de todos los registros
acá no vas a usar todos los registros, con el where vas a seleccionar cual quieres mostrar.
Saludos y por favor termínala y la seguimos en la otra
Amigo, si quieres la termino a la pregunta pero no has respondido lo que yo he solicitado.
Yo quiero eliminar un registro que coincida con el número que tengo en el cuadro de texto por eso es que tengo que usar el where.
y en esta consulta no uso el *(asterísco en ningún momento): CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Y lo que quiero hacer es seleccionar el socio que es voluntario. ¿Qué es lo que no se entiende?
Y este procedimiento:
Private Sub MostrarSocio()
Dim CadenaSocioVoluntario As String
CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocioVoluntario, Base
If rstVolS.EOF = False Then
If Not IsNull(rstVolS!numsocio) <> False Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End If
End Sub
Lo quiero usar para que me traiga el número de socio del Voluntario que se inscribió como tal, porque no todos los voluntarios son socios, pero no me anda y por eso te consulto ya que tu eres el experto.
Saludos. Daniel.
Yo quiero eliminar un registro que coincida con el número que tengo en el cuadro de texto por eso es que tengo que usar el where.
y en esta consulta no uso el *(asterísco en ningún momento): CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Y lo que quiero hacer es seleccionar el socio que es voluntario. ¿Qué es lo que no se entiende?
Y este procedimiento:
Private Sub MostrarSocio()
Dim CadenaSocioVoluntario As String
CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocioVoluntario, Base
If rstVolS.EOF = False Then
If Not IsNull(rstVolS!numsocio) <> False Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End If
End Sub
Lo quiero usar para que me traiga el número de socio del Voluntario que se inscribió como tal, porque no todos los voluntarios son socios, pero no me anda y por eso te consulto ya que tu eres el experto.
Saludos. Daniel.
Me estas mareando! Si lees para arriba hay como 4 consultas en el mismo hilo...
Pensé que otra vez vino repetida y no la leí, disculpame.
hola el delete no te funciona¿?
No podes ver los datos porque vos tienes que llamar cuando terminas de borrar o modificar al procedimiento mostrar datos.
La pregunta es ¿dónde se tiene que refrescar los datos que vos eliminas?
¿En qué componente? El procedimiento de mostrar lo tienes. Solo lo tienes que llamar y aplicárselo al componente necesario.
Porque si eliminas con delete lo va a borrar y no te tiene que mostrar nada, porque no veo que estés usando grilla o listbox.
veamos esto "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Si numvoluntario es numérico esta mal empleado el uso de las comillas simples, solo los campos string van en comillas simples
seria "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = " & txtModVoluntario(0).Text
Ese puede ser un motivo que no te este eliminando si el campo numvoluntario es numérico.
Vamos a la segunda parte
Es lo mismo que ante si numvountario es string la consulta no tendría que estar dando problema al menos que el textvoluntario(0) este vacío.
Hace una interrupción en el código en la consulta haber que dato tiene el textbox.
Pensé que otra vez vino repetida y no la leí, disculpame.
hola el delete no te funciona¿?
No podes ver los datos porque vos tienes que llamar cuando terminas de borrar o modificar al procedimiento mostrar datos.
La pregunta es ¿dónde se tiene que refrescar los datos que vos eliminas?
¿En qué componente? El procedimiento de mostrar lo tienes. Solo lo tienes que llamar y aplicárselo al componente necesario.
Porque si eliminas con delete lo va a borrar y no te tiene que mostrar nada, porque no veo que estés usando grilla o listbox.
veamos esto "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Si numvoluntario es numérico esta mal empleado el uso de las comillas simples, solo los campos string van en comillas simples
seria "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = " & txtModVoluntario(0).Text
Ese puede ser un motivo que no te este eliminando si el campo numvoluntario es numérico.
Vamos a la segunda parte
Es lo mismo que ante si numvountario es string la consulta no tendría que estar dando problema al menos que el textvoluntario(0) este vacío.
Hace una interrupción en el código en la consulta haber que dato tiene el textbox.
Amigo. Las disculpas aceptadas. El delete no me funcionaba y me sigue sin funcionar. Como verás puse el procedimiento mostrarVoluntarios luego de eliminar pero me dice, la operación no está permitida si el objeto está abierto y me marca esta línea como la del error: rstVoluntarios.Open cadenaStr, Base del procedimiento MostrarVoluntarios.
Private Sub cmdEliminarVol_Click()
Dim rstVolElim As ADODB.Recordset
Dim StrElimVol As String
Set rstVolElim = New ADODB.Recordset
StrElimVol = "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = " & txtModVoluntario(0).Text
Base.Execute (StrElimVol)
MsgBox "Voluntario Eliminado"
MostrarVoluntarios
End Sub
Private Sub MostrarVoluntarios()
Dim cadenaconexion As String
Dim cadenaStr As String
cadenaStr = "Select * from Voluntarios"
rstVoluntarios.Open cadenaStr, Base 'Línea donde me marca error.
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
y también, como te comentaba antes, con este procedimiento:
Private Sub MostrarSocio()
Dim CadenaSocioVoluntario As String
CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocioVoluntario, Base
If rstVolS.EOF = False Then
If Not IsNull(rstVolS!numsocio) <> False Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End If
End Sub
Lo que quiero es que me muestre el número de socio que fue asignado a ese Voluntario pero me muestra el número del primer registro, ya sea 0 (si es que todavía no se inscribió como socio), 1, 10 o cualquier número y no me muestra los números de otros voluntarios que se inscribieron como socio.
Bueno amigo espero no haberte mareado nuevamente y que puedas responder a mis consultas.
Muchas gracias! Daniel.
Private Sub cmdEliminarVol_Click()
Dim rstVolElim As ADODB.Recordset
Dim StrElimVol As String
Set rstVolElim = New ADODB.Recordset
StrElimVol = "DELETE FROM VOLUNTARIOS WHERE NumVoluntario = " & txtModVoluntario(0).Text
Base.Execute (StrElimVol)
MsgBox "Voluntario Eliminado"
MostrarVoluntarios
End Sub
Private Sub MostrarVoluntarios()
Dim cadenaconexion As String
Dim cadenaStr As String
cadenaStr = "Select * from Voluntarios"
rstVoluntarios.Open cadenaStr, Base 'Línea donde me marca error.
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
y también, como te comentaba antes, con este procedimiento:
Private Sub MostrarSocio()
Dim CadenaSocioVoluntario As String
CadenaSocioVoluntario = "SELECT NumSocio FROM VOLUNTARIOS WHERE NumVoluntario = '" & txtModVoluntario(0).Text & "'"
Set rstVolS = New ADODB.Recordset
rstVolS.Open CadenaSocioVoluntario, Base
If rstVolS.EOF = False Then
If Not IsNull(rstVolS!numsocio) <> False Then
txtNumSocio.Text = rstVolS!numsocio
Else
txtNumSocio.Text = 0
End If
End If
End Sub
Lo que quiero es que me muestre el número de socio que fue asignado a ese Voluntario pero me muestra el número del primer registro, ya sea 0 (si es que todavía no se inscribió como socio), 1, 10 o cualquier número y no me muestra los números de otros voluntarios que se inscribieron como socio.
Bueno amigo espero no haberte mareado nuevamente y que puedas responder a mis consultas.
Muchas gracias! Daniel.
Vamos con el delete, la consulta esta bien echa, queda revisar paso a paso que la variable tenga datos, y que sentencia este funcionando Base. Execute (StrElimVol)
despues el error del recordset.open es que nunca cerrar un recordset cuando terminas de usarlo, tenes que acostumbrarte a cerrar con rs.close y set rs = nothing
la ultima parte estoy medio perdido con la logica
yo entiendo que primero si se ejecuta mostrarvoluntarios.
La consulta "Select * from Voluntarios" estas diciendo que te traiga todos los registros de la tabla voluntarios y después lo pasas a un text ¿? Siempre te va a quedar el primer registro del recordset clavado, o le ingresas un where y lo haces único o vas a tener que ver otra manera de mostrar los datos.
select * from voluntarios trae 100 registros ¿como hace una coleccion de text para verlos a todos?, si los text siempre pueden ver 1 y otra cosa del codigo es que nunca moves el recordset, preguntas si el recordset tiene datos, despues asignas cada text a los campos de la tabla y termino.
Faltaría el rs.movenext para que siga avanzando y cuando termina y sale del if tienes que cerrar el recordset.
(Para solucionar este tema te aconsejo que dejes los text pero para mostrar utilices una grilla hiperchical flex grid donde podes poner todos los datos, y después seleccionas cual quieres modificar.)
Es por eso que el mostrarsocio actúa raro, soluciona lo de arriba y mostrarsocio va a traer. Pero acá quiero que veas algo que tienes que unificar porque no le veo motivo para hacer 2 procedimiento bajo la misma consulta.
Pregunta ¿un voluntario tiene un numero de socio solamente?
Entonces esto lo tenemos que resolver en una solo procedimiento.
Si pasas que todos los datos se carguen en una grilla
insertas el componente en el form y debajo de
cadenaStr = "Select * from Voluntarios"
RstVoluntarios. Open cadenaStr, Base 'Línea donde me marca error.
pone set nombregrilla.datasource = recordset
rs.close
set rs = nothing
ahora ahi vas a poder ver todos los registros de voluntarios, y al seleccionar en una fila de la grilla
ejemplo!!!!
txtModVoluntario(0).Text = .TextMatrix(.RowSel, 1)
txtModVoluntario(1).Text = .TextMatrix(.RowSel, 2)
txtModVoluntario(2).Text = .TextMatrix(.RowSel, 3)
Y asi hasta cantidad de columnas tengas.
Bueno espero que te sirva.
despues el error del recordset.open es que nunca cerrar un recordset cuando terminas de usarlo, tenes que acostumbrarte a cerrar con rs.close y set rs = nothing
la ultima parte estoy medio perdido con la logica
yo entiendo que primero si se ejecuta mostrarvoluntarios.
La consulta "Select * from Voluntarios" estas diciendo que te traiga todos los registros de la tabla voluntarios y después lo pasas a un text ¿? Siempre te va a quedar el primer registro del recordset clavado, o le ingresas un where y lo haces único o vas a tener que ver otra manera de mostrar los datos.
select * from voluntarios trae 100 registros ¿como hace una coleccion de text para verlos a todos?, si los text siempre pueden ver 1 y otra cosa del codigo es que nunca moves el recordset, preguntas si el recordset tiene datos, despues asignas cada text a los campos de la tabla y termino.
Faltaría el rs.movenext para que siga avanzando y cuando termina y sale del if tienes que cerrar el recordset.
(Para solucionar este tema te aconsejo que dejes los text pero para mostrar utilices una grilla hiperchical flex grid donde podes poner todos los datos, y después seleccionas cual quieres modificar.)
Es por eso que el mostrarsocio actúa raro, soluciona lo de arriba y mostrarsocio va a traer. Pero acá quiero que veas algo que tienes que unificar porque no le veo motivo para hacer 2 procedimiento bajo la misma consulta.
Pregunta ¿un voluntario tiene un numero de socio solamente?
Entonces esto lo tenemos que resolver en una solo procedimiento.
Si pasas que todos los datos se carguen en una grilla
insertas el componente en el form y debajo de
cadenaStr = "Select * from Voluntarios"
RstVoluntarios. Open cadenaStr, Base 'Línea donde me marca error.
pone set nombregrilla.datasource = recordset
rs.close
set rs = nothing
ahora ahi vas a poder ver todos los registros de voluntarios, y al seleccionar en una fila de la grilla
ejemplo!!!!
txtModVoluntario(0).Text = .TextMatrix(.RowSel, 1)
txtModVoluntario(1).Text = .TextMatrix(.RowSel, 2)
txtModVoluntario(2).Text = .TextMatrix(.RowSel, 3)
Y asi hasta cantidad de columnas tengas.
Bueno espero que te sirva.
Estimado amigo: es verdad, primero se ejecuta mostrarvoluntarios.
La consulta "Select * from Voluntarios" es para que me traiga todos los registros de la tabla voluntarios y después lo pasas a un text. Esto lo hago en el load del formulario, luego en dos commandbutton que puse hago que el cursor vaya avanzando o retrocediendo y me los muestra a todos.
Ahora, si hago un select * from voluntarios, agregando los campos NumDador y NumSocio. ¿Cómo hago para que si es nulo no me tire error?
Saludos.
La consulta "Select * from Voluntarios" es para que me traiga todos los registros de la tabla voluntarios y después lo pasas a un text. Esto lo hago en el load del formulario, luego en dos commandbutton que puse hago que el cursor vaya avanzando o retrocediendo y me los muestra a todos.
Ahora, si hago un select * from voluntarios, agregando los campos NumDador y NumSocio. ¿Cómo hago para que si es nulo no me tire error?
Saludos.
primero al ser un campo numerico no podes permitir que sean nulos, cargales un cero por default,
pero si en el futuro te topas con alguno la consulta la asi
select isnull(numdador,0) from tabla
aca siempre el recordset te va a traer un registro por lo menos que si es nulo lo va a transformar en cero, pero te repito si es un campo numerico revisa la base porque no puede tener nulo nunca.
pero si en el futuro te topas con alguno la consulta la asi
select isnull(numdador,0) from tabla
aca siempre el recordset te va a traer un registro por lo menos que si es nulo lo va a transformar en cero, pero te repito si es un campo numerico revisa la base porque no puede tener nulo nunca.
- Compartir respuesta
- Anónimo
ahora mismo