Buenas Noches
Es la primera vez que escribo, asi que tambien utilizare esto para presentarme.
Soy Agustin, De Puerto Iguazú, Misiones, Argentina.
Actualmente estoy terminando el cursado de la carrera de Analista de Sistemas en un instituto terciario, y por lo tanto, estamos armando un sistema con una compañera para presentarlo como tesis.
Basicamente es un Gestor Academico para la facultad, que se encargue del control academico de profesores, alumnos y personal operativo del instituto.
Todo el sistema esta montado en Visual Basic 6, con la base de datos en SQL Server 2000, sabemos que es antiguo, pero es el lenguaje que mejor manejamos-
Puntualmente la duda viene de:
En un formulario tenemso montado el ABM de Provincias, relacionadas a Paises, osea. en la base son dos tabla distintas.
Bien, el formulario cuenta con un DataGrid, donde mostramos el total de las Provincias, y un DataCombo que utilizamos como filtro de paises, para mostrar menor volumen de datos.
En una instancia decidimos no utilizar controles ADO, sino crear una conexion mediante cadena de texto al server SQL, y trabajar con recordsets dimensionados dentro de los formularios.
Al seleccionar un rango del datagrid nos da la opcion de modificar la informacion, o agregar un registro nuevo.
Para cualquiera de ellos (modificar o Nuevo) hacemos visible un frame con los campos a completar para el nombre, y otro DataCombo para seleccionar el pais, indistintamente del filtro que se le haya aplicado al DataGrid
En los eventos Guardar y/o Cancelar, hacemos referencia a una Private Sub que nos da el estado inicial del formulario con todos los datos.
El problema es el siguiente, al ejecutar el Form, podemos realizar 1 evento Guardar, y si queremos realizar otro INSERT o UPDATE nos devuelve un error de Tipo Incorrecto, rastreandolo encontramos que, y no sabemos por que, el valor de DataCombo.BoundText deja de ser el Id del pais y pasa a ser una cadena de texto qeu utilizamos para evitar el filtro.
Les copio las partes del codigo afectadas a ver si alguien puede ver que es lo que estamos haciendo mal:
DataCombo.BoundColumn = idpais
DataCombo.ListField = Descripcion
Código:
Private Sub Form_Load()
Inicio
StatusBar1.Panels(3).Text = usuario
End Sub
Los Recordset definidos en la cabecera del codigo, fuera de cualquier Sub
Código:
Dim rsCombo As New ADODB.Recordset
Dim rsTmCbo As New ADODB.Recordset
Dim BlNuevo As Boolean
Dim sSQL As Variant
Esta es la rutina para regresar al form luego de Guardar y/o Cancelar
Código:
Private Sub Inicio()
txtProvincia.Text = ""
'dbcPais.Text = "<<Todos>>"
'dbcPais.BoundText = 0 Esto es el DATACOMBO del filtro
fraProvincia.Visible = False
BlNuevo = False
mnuArcModifi.Enabled = True
CargaCombo
CargaGrilla
End Sub
Código:
Private Sub CreaCombo()
On Error GoTo erro3
Set rsCombo = Nothing
With rsCombo
.Fields.Append "idPais", adInteger
.Fields.Append "descripcion", adVarChar, 40
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
.Open
End With
Exit Sub
erro3:
MsgBox "Error creando el combo: " & Err.Description
End Sub
Private Sub CargaCombo()
On Error GoTo erro4
CreaCombo ' llamo a la rutina que crea la dimension del recordset que utilizare para llenar el DATACOMBO
Set rsTmCbo = Nothing
Set rsTmCbo = cnconex.Execute("SELECT idpais, descripcion FROM PAISES")
rsCombo.AddNew
rsCombo(0) = 0
rsCombo(1) = "<<Todos>>"
Do While Not rsTmCbo.EOF
rsCombo.AddNew
rsCombo(0) = rsTmCbo!idpais
rsCombo(1) = RTrim(rsTmCbo!Descripcion)
'MsgBox rsCombo.Fields(1).Value
rsTmCbo.MoveNext
Loop
'MsgBox rsCombo.Fields(1).Value
If Not rsCombo.EOF Then
If Not rsCombo.BOF Then
rsCombo.MoveFirst
End If
End If
Set dbcPais.RowSource = Nothing
Set dbcPais.RowSource = rsCombo
Set dbcPais2.RowSource = rsCombo
Exit Sub
erro4:
MsgBox "Error cargando el combo: " & Err.Description
Aqui, el codigo para cargar el DATAGRID
Código:
Private Sub CargaGrilla()
On Error GoTo erro2
CreaGrilla 'Misma metodologia que CreaCombo
Set RsTmp = Nothing
Set RsTmp = cnconex.Execute("SELECT p.idprovincia, p.descripcion, p.idpais,a.descripcion as 'descrPais' FROM provincias p, paises a WHERE p.idpais=a.idpais")
With RsTmp
If dbcPais.BoundText <> "" Then
If dbcPais.BoundText = "0" Then' Aqui es donde surge el problema,
en algun momento, el valor cambia de sel el Integer IdPais a el valor
STRING "<<Todos>>" con el que evitamos el filtro,
y de aqui sale el error de "Tipo lncorrecto"
.Filter = 0
Else
.Filter = "idpais ='" & dbcPais.BoundText & "'"
End If
End If
End With
Do While Not RsTmp.EOF
rsProv.AddNew
rsProv(0) = RsTmp!idprovincia
rsProv(1) = RTrim(RsTmp!Descripcion)
rsProv(2) = RsTmp!idpais
rsProv(3) = RTrim(RsTmp!descrpais)
RsTmp.MoveNext
Loop
Set grdProvincias.DataSource = rsProv
Exit Sub
erro2:
MsgBox "Error carganda la grilla : " & Err.Description
End Sub
Estas dos rutinas cargan o limpian para el ABM
Código:
Private Sub mnuArcModifi_Click()
BlNuevo = False
fraProvincia.Visible = True
txtProvincia.Text = grdProvincias.Columns(1).Value
dbcPais2.Text = grdProvincias.Columns(3)
End Sub
Private Sub mnuArcNuevo_Click()
BlNuevo = True
fraProvincia.Visible = True
dbcPais2.Text = "<<Todos>>"
End Sub
Y por ultimo el evento Guardar
Código:
Private Sub cmdAceptar_Click()
Dim rta As New ADODB.Recordset
Set sSQL = Nothing
If Len(txtProvincia) > 0 Then
If BlNuevo = False Then
sSQL = "SP_UpdProvincias '" & grdProvincias.Columns(0).Value & "', '" & txtProvincia.Text & "', '" & dbcPais2.BoundText & "'"
Else
sSQL = "SP_INSProvincia '" & txtProvincia.Text & "', '" & dbcPais2.BoundText & "'"
End If
Set rta = cnconex.Execute(sSQL)
If rta(0) = 1 Then
MsgBox "Datos Guardados Correctamente"
Inicio
Else
MsgBox "Compruebe la informacion"
Inicio
End If
Else
MsgBox "Debe ingresar el nombre de una Provincia"
Exit Sub
End If
End Sub
[URL=http://img220.imageshack.us/i/frmlistprovincias.jpg/][IMG]http://img220.imageshack.us/img220/8793/frmlistprovincias.jpg[/IMG][/URL]
El form al momento de arrancar funciona, podemos filtrar el DataGrid, pero al momento de llamr a la rutina INICIO por segunda vez nos da el error de
Tipo
[URL=http://img64.imageshack.us/i/errortipo.jpg/][IMG]http://img64.imageshack.us/img64/1223/errortipo.jpg[/IMG][/URL]
Desde ya Agradesco el tiempo que les he robado,
Saludos