In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
DBComboboxMod error al usar dtBOUND
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
DBComboboxMod error al usar dtBOUND
Xailer team,
Al usar un DBComboboxMod con dtBOUND y el usuario selecciona una opción se marca Error: <seleccion>
Supongamos el siguiente escenario con el SAMPLE \Xailer8.2\Samples\Modern\ComboBox
Tomando el DBComboboxMod...
:nDataType := dtBOUND
:oDataField := Last // asociado a un campo
:onCreate := DBComboboxMod1Create
METHOD DBComboboxMod1Create( oSender ) CLASS TForm1
oSender:aItems := {"(ninguno)", "azul"} // <<=== Opciones de texto que se necesitan cargar en tiempo de ejecución
oSender:aItemsBound := {"", "blue"}
RETURN Nil
Listo, ahora al correr este SAMPLE y seleccionar del combo otra opcion de la lista coloca el texto Error: <azul>
Al usar un DBComboboxMod con dtBOUND y el usuario selecciona una opción se marca Error: <seleccion>
Supongamos el siguiente escenario con el SAMPLE \Xailer8.2\Samples\Modern\ComboBox
Tomando el DBComboboxMod...
:nDataType := dtBOUND
:oDataField := Last // asociado a un campo
:onCreate := DBComboboxMod1Create
METHOD DBComboboxMod1Create( oSender ) CLASS TForm1
oSender:aItems := {"(ninguno)", "azul"} // <<=== Opciones de texto que se necesitan cargar en tiempo de ejecución
oSender:aItemsBound := {"", "blue"}
RETURN Nil
Listo, ahora al correr este SAMPLE y seleccionar del combo otra opcion de la lista coloca el texto Error: <azul>
Saludos
Israel
Israel
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Código: Seleccionar todo
METHOD SetValue( xValue, lFocused, lUpdPict, lWithEvent ) CLASS XDBComboBoxMod
LOCAL nVal, nAt
DO CASE
CASE ::nDataType == dtDEFAULT
IF Valtype( xValue ) == "N" .AND. xValue > 0 .AND. xValue <= Len( ::aItems )
xValue := ::aItems[ xValue ]
ENDIF
CASE ::nDataType == dtINDEX
nVal := IIF( Valtype( xValue ) != "N", Val( xValue ), xValue )
IF nVal > 0 .AND. nVal <= Len( ::aItems )
xValue := ::aItems[ nVal ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
ENDIF
CASE ::nDataType == dtBOUND
IF ValType( ::oDataField ) == "O" .AND. ::oDataField:Valtype() == "N"
IF ValType( xValue ) == "C" // se ha pasado el literal y no el valor bound
nAt := AScan( ::aItems, Trim( xValue ) )
ELSE
nAt := AScan( ::aItemsBound, xValue )
ENDIF
ELSEIF ValType( xValue ) == "C"
nAt := AScan( ::aItems, Trim( xValue ) )
ELSE
nAt := 0
ENDIF
IF nAt > 0 .AND. nAt <= Len( ::aItems )
xValue := ::aItems[ nAt ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
ENDIF
ENDCASE
RETURN ::Super:SetValue( xValue, lFocused, lUpdPict, lWithEvent )
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Igracio,
No, no funcionó... Sobrecargando la solución que has publicado en el mismo SAMPLE de xailer... sigue dando el mismo error que comento
No, no funcionó... Sobrecargando la solución que has publicado en el mismo SAMPLE de xailer... sigue dando el mismo error que comento
Saludos
Israel
Israel
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Ignacio,
Hemos encontrado el problema, ya funciona el dtBOUND
GRACIAS PEDRO !!
Hemos encontrado el problema, ya funciona el dtBOUND
GRACIAS PEDRO !!
Código: Seleccionar todo
METHOD SetValue( xValue, lFocused, lUpdPict, lWithEvent ) CLASS TDBComboBoxMod
LOCAL nVal, nAt
DO CASE
CASE ::nDataType == dtDEFAULT
IF Valtype( xValue ) == "N" .AND. xValue > 0 .AND. xValue <= Len( ::aItems )
xValue := ::aItems[ xValue ]
ENDIF
CASE ::nDataType == dtINDEX
nVal := IIF( Valtype( xValue ) != "N", Val( xValue ), xValue )
IF nVal > 0 .AND. nVal <= Len( ::aItems )
xValue := ::aItems[ nVal ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
ENDIF
CASE ::nDataType == dtBOUND
IF ValType( ::oDataField ) == "O" .AND. ::oDataField:Valtype() == "N"
IF ValType( xValue ) == "C" // se ha pasado el literal y no el valor bound
nAt := HB_Ascan( ::aItems, {|x| Trim(x)== Trim( xValue )} )
ELSE
nAt := AScan( ::aItemsBound, xValue )
ENDIF
ELSEIF ValType( xValue ) == "C"
nAt := HB_Ascan( ::aItems, {|x| Trim(x)== Trim( xValue )} )
ELSE
nAt := 0
ENDIF
IF nAt > 0 .AND. nAt <= Len( ::aItemsBound )
xValue := ::aItemsBound[ nAt ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
ENDIF
ENDCASE
RETURN ::Super:SetValue( xValue, lFocused, lUpdPict, lWithEvent )
Saludos
Israel
Israel
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Pues a mi no. ExtrañoIsrael Solis escribió: ↑Vie Mar 31, 2023 7:27 pm Igracio,
No, no funcionó... Sobrecargando la solución que has publicado en el mismo SAMPLE de xailer... sigue dando el mismo error que comento
Saludos
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Hola,
Revisado y la solución de Pedro no es correcta. Estaba mejor al prinicipio, pero con un ajuste:
Creo que así está bien.
Saludos
Revisado y la solución de Pedro no es correcta. Estaba mejor al prinicipio, pero con un ajuste:
Código: Seleccionar todo
ELSEIF ValType( xValue ) == "C"
nAt := AScan( ::aItemsBound, Trim( xValue ) )
IF nAt == 0 .AND. ::lFreeEdit
nAt := AScan( ::aItems, Trim( xValue ) )
ENDIF
ELSE
Saludos
- xhermita
- Mensajes: 177
- Registrado: Vie Feb 18, 2011 10:05 pm
- Ubicación: Las Palmas de Gran Canaria
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
El valor de xValue que nos llega a SetValue es el cText del DTDBComboBoxMod por lo que no podemos buscarlo en ::aItemsbound.
Pero al llamar a Super:SetValue si le tenemos que dar el valor en ::aItemsbound equivalente
Código: Seleccionar todo
ELSEIF ValType( xValue ) == "C"
nAt := Ascan( ::aItems, Trim( xValue ) )
ELSE
Código: Seleccionar todo
IF nAt > 0 .AND. nAt <= Len( ::aItemsBound )
xValue := ::aItemsBound[ nAt ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
ENDIF
Pedro Amaro
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Me temo que no es así. Te olvidas de la asignación del combo por la navegación en un browser, por ejemplo.
Para algo soy el que lo hizo
Para algo soy el que lo hizo
- xhermita
- Mensajes: 177
- Registrado: Vie Feb 18, 2011 10:05 pm
- Ubicación: Las Palmas de Gran Canaria
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Pues algo pasa, porque en las pruebas que hicimos Israel y yo lo que nos llegaba era el cText.
Volveremos a revisar las pruebas.
Volveremos a revisar las pruebas.
Pedro Amaro
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Como te va a llegar algo que no existe? El browse tiene los valores de aItemsBound, no los de aItems. Los de aItems son los que te muestra cuando ve una coincidencia en la otra matriz . Son dos escenarios distintos que ambos utilizan SetValue(). En un caso se recibe el VERDADERO dato y en otro caso se recibe la pulsación del usuario. Te recomiendo que pruebes el código que he subido.
- xhermita
- Mensajes: 177
- Registrado: Vie Feb 18, 2011 10:05 pm
- Ubicación: Las Palmas de Gran Canaria
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
Código probado ...
No funciona.
No funciona.
Pedro Amaro
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
2PC Service
Xailer / Néfele / MySQL-MariaDB / SQLServer
Re: DBComboboxMod error al usar dtBOUND
Pues me pasa el mismo error en un DBComboboxMod que en el xfm se ve así
WITH OBJECT ::oDBComboBox1 := TDBComboboxMod():New( ::oFolderPage1 )
:SetBounds( 188, 140, 130, 21 )
:nMaxLength := 15
:aItems := { "Hombre / Gizon", "Mujer / Emakume" }
:aItemsBound := { "H", "M" }
:nDataType := dtBOUND
:oDataField := "Sexo"
:Create()
END
y al seleccionar un elemento cualquiera me almacena un valor numérico 0 (cero) en el campo sexo.
Lo más cachondo es que cuando vuelves a entrar muestra el texto Error: <0> en el campo y si selecciono de nuevo un item como "Hombre / Gizon" el campo pasa a contener "Error: <Hombre / Gizon>" o sea inserta el texto del item dentro del error.
WITH OBJECT ::oDBComboBox1 := TDBComboboxMod():New( ::oFolderPage1 )
:SetBounds( 188, 140, 130, 21 )
:nMaxLength := 15
:aItems := { "Hombre / Gizon", "Mujer / Emakume" }
:aItemsBound := { "H", "M" }
:nDataType := dtBOUND
:oDataField := "Sexo"
:Create()
END
y al seleccionar un elemento cualquiera me almacena un valor numérico 0 (cero) en el campo sexo.
Lo más cachondo es que cuando vuelves a entrar muestra el texto Error: <0> en el campo y si selecciono de nuevo un item como "Hombre / Gizon" el campo pasa a contener "Error: <Hombre / Gizon>" o sea inserta el texto del item dentro del error.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: DBComboboxMod error al usar dtBOUND
A ver si ahora si:
Código: Seleccionar todo
METHOD SetValue( xValue, lFocused, lUpdPict, lWithEvent ) CLASS XDBComboBoxMod
LOCAL nVal, nAt
DO CASE
CASE ::nDataType == dtDEFAULT
IF Valtype( xValue ) == "N" .AND. xValue > 0 .AND. xValue <= Len( ::aItems )
xValue := ::aItems[ xValue ]
ENDIF
CASE ::nDataType == dtINDEX
IF Valtype( xValue ) == "N"
IF xValue > 0 .AND. xValue <= Len( ::aItems )
xValue := ::aItems[ xValue ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
ENDIF
ENDIF
CASE ::nDataType == dtBOUND
IF ValType( ::oDataField ) == "O" .AND. ::oDataField:Valtype() == "N"
IF ValType( xValue ) == "C" // se ha pasado el literal y no el valor bound
nAt := AScan( ::aItems, Trim( xValue ) )
ELSE
nAt := AScan( ::aItemsBound, xValue )
ENDIF
ELSEIF ValType( xValue ) == "C"
nAt := AScan( ::aItemsBound, Trim( xValue ) )
IF nAt == 0 //.AND. ::lFreeEdit >>>>>>>>>>>>>>>>>> Simplemente comenta después del cero
nAt := AScan( ::aItems, Trim( xValue ) )
ENDIF
ELSE
nAt := 0
ENDIF
IF nAt > 0 .AND. nAt <= Len( ::aItems )
xValue := ::aItems[ nAt ]
ELSE
xValue := "Error: <" + ToString( xValue ) + ">"
RETURN 0
ENDIF
ENDCASE
RETURN ::Super:SetValue( xValue, lFocused, lUpdPict, lWithEvent )