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:
Los Recordset definidos en la cabecera del codigo, fuera de cualquier SubPrivate Sub Form_Load() Inicio StatusBar1.Panels(3).Text = usuario End Sub
Código:
Esta es la rutina para regresar al form luego de Guardar y/o CancelarDim rsCombo As New ADODB.Recordset Dim rsTmCbo As New ADODB.Recordset Dim BlNuevo As Boolean Dim sSQL As Variant
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:
Aqui, el codigo para cargar el DATAGRIDPrivate 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
Código:
Estas dos rutinas cargan o limpian para el ABMPrivate 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
Código:
Y por ultimo el evento GuardarPrivate 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
Código:
[URL=http://img220.imageshack.us/i/frmlistprovincias.jpg/][IMG]http://img220.imageshack.us/img220/8793/frmlistprovincias.jpg[/IMG][/URL]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
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