Foros del Web » Programación para mayores de 30 ;) » Programación General »

Comportamiento Extraño en DataCombo.BoundText

Estas en el tema de Comportamiento Extraño en DataCombo.BoundText en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/11/2010, 20:55
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Comportamiento Extraño en DataCombo.BoundText

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
  #2 (permalink)  
Antiguo 05/11/2010, 15:55
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Comportamiento Extraño en DataCombo.BoundText

Respondo a mi propia consulta:

No he podido averiguar porque en un momento determinado el rowource del datacombo cambia.
Pero encontre una solucion transitoria que me resulve el error:

Código:
Private Sub Inicio()

txtProvincia.Text = "" 
fraProvincia.Visible = False
BlNuevo = False
mnuArcModifi.Enabled = True

CargaCombo
dbcPais.Text = "<<Todos>>"
dbcPais.BoundText = 0 
CargaGrilla

End Sub
Lo que he echo es forzar el valor de boundtext luego de realizar la recarga del datacombo.
Por ahora funciona.
Si alguien puede o sabe explicarme por que sucede el cambio del rowsource se lo agradecere.

Saludos

Etiquetas: extraño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:04.