Añadir registro en ComboBox desde VFP y Sql Server

223 views
Skip to first unread message

integral

unread,
Feb 1, 2023, 11:18:52 PM2/1/23
to Comunidad de Visual Foxpro en Español
Estimados Amigos

Buenas Noches

Recurro a ustedes para pedirle vuestra ayuda en lo siguiente :

Estoy tratando de insertar un nuevo registro en el Combobox desde VFP a SQL Server

Al inicio cargo con 7 items el Combobox 

Ahora en VFP 9.0 y SQL Server 2008r2 cuando deseo agregar un nuevo item vuelvo a crear otro cursor con el nuevo item y el Combobox se desenlaza y no me muestra ningun item.

Aqui les muestro el codigo desde un metodo creado para ello...

LOCAL cDisplayValue, nCount
WAIT WINDOW "[ Metodo Para Actualizar Combo ]" TIMEOUT 1
 
m.cDisplayValue = lcRetorno.Prop_Codigo_1    
m.DisplayProduc = lcRetorno.Prop_Produc_2

IF EMPTY(m.cDisplayValue)
    RETURN
ENDIF

WITH Thisform.CBOCLASE
    FOR i = 1 TO .ListCount
        IF UPPER(m.cDisplayValue) = UPPER(.List[m.i])
            EXIT
        ENDIF
        IF m.i = .ListCount
           SELECT Cur_Gen_Stock_02    

           Wait Window "Grabando el ID del Nuevo Producto Creado." Timeout 1
           APPEND BLANK
           Replace Cur_Gen_Stock_02->Id_Clase With lcRetorno.Prop_Codigo_1  
           Replace Cur_Gen_Stock_02->Desc_Gene With lcRetorno.Prop_Produc_2
 
           Thisform.CBOCLASE.DisplayValue = lcRetorno.Prop_Codigo_1    
           Thisform.TXTCLASE_CAR.Value = lcRetorno.Prop_Produc_2    
        ENDIF
    ENDFOR
ENDWITH

SELECT Cur_Gen_Stock_02     && Cursor del Combo
 
Thisform.CboClase.RowSource = SQLEXEC(cn, "SELECT DISTINCT id_clase, desc_gene FROM Cur_Gen_Stock_02", 'Cur_New_Item')
Thisform.CboClase.RowSourceType = 3
Thisform.CboClase.Requery()
Thisform.CboClase.Refresh()

Agradezco sus comentarios y sugerencias.

Saludos,

Integral

SIN DATO COMBOBOX.jpg
CURSOR_ACTUAL.jpg

HernanCano

unread,
Feb 2, 2023, 5:04:10 AM2/2/23
to Comunidad de Visual Foxpro en Español
Cuando usas .RowSourceType = 3, le estás indicando a VFP que vas a usar un alias como fuente de datos para el combobox (ver la ayuda de VFP en la imagen 1).

Pero estás usado en la propiedad .RowSource lo que devuelve un SQLEXEC, que lo q devuelve es un número entero correspondiente a un handle de conexión, lo que no es lo mismo y por lo tanto es inválido.


Para que tu escenario funcione, debes --antes de las dos propiedades RowSource* -- recibir el cursor que te devuelva SQLEXEC, y luego --el nombre del cursor que contiene esos datos-- ponerlo en .RowSource pero con .RowSourceType = 2. Alternativa: si quieres usar RowSourceType 3, entonces el .RowSource pudiera ser " select * from Cur_New_Item " .


borrable1.png
borrable2.png

HernanCano

unread,
Feb 2, 2023, 5:07:53 AM2/2/23
to Comunidad de Visual Foxpro en Español
Luego que agregues un nuevo ítem al combobox, debes refrescar todo el cursor nuevamente; es decir: volver a traer los datos desde SQL Server, lo cual se logra repitiendo el mismo SQLEXEC que muestras (antes de poner el RowSource nuevamente).

integral

unread,
Feb 2, 2023, 10:45:47 PM2/2/23
to Comunidad de Visual Foxpro en Español
Buenas Noches Amigos :

Ya logre insertar un nuevo registro en el Combobox 

Aqui les muestro el codigo desde un metodo creado para ello :

WAIT WINDOW "[ Metodo Para Actualizar Combo ]" TIMEOUT 1
 
m.DisplayNewDep = lcRetorno.Prop_Codigo_1    
m.DisplayProduc = lcRetorno.Prop_Produc_2

IF EMPTY(m.DisplayNewDep)

    RETURN
ENDIF

WITH Thisform.CBOCLASE
    FOR i = 1 TO .ListCount
        IF UPPER(m.DisplayNewDep) = UPPER(.List[m.i])

            EXIT
        ENDIF
        IF m.i = .ListCount
           SELECT Cur_Gen_Stock_02    

           Wait Window "Grabando el Nuevo Producto en el Cursor." Timeout 1

           APPEND BLANK
           Replace Cur_Gen_Stock_02->Id_Clase With lcRetorno.Prop_Codigo_1  
           Replace Cur_Gen_Stock_02->Desc_Gene With lcRetorno.Prop_Produc_2

          Thisform.CboClase.RowSource = 'Cur_Gen_Stock_02.Id_Clase,Desc_Gene'  
          Thisform.CboClase.RowSourceType = 2   
          Thisform.CboClase.Requery()
          Thisform.CboClase.Refresh()
        ENDIF
    ENDFOR
ENDWITH

Lo extraño es que me muestra un de Error de Sintaxis

Agradezco sus comentarios y sugerencias

Saludos

Integral
(Lima-Perú)
ERROR_HOY_JUEVES.jpg
FORM_COMBOBOX Y NUEVO ITEM.jpg

HernanCano

unread,
Feb 3, 2023, 8:42:15 AM2/3/23
to Comunidad de Visual Foxpro en Español
¿Dónde muestra el error de sintaxis?

El jueves, 2 de febrero de 2023 a la(s) 22:45:47 UTC-5, integral escribió:
Buenas Noches Amigos :

Ya logre insertar un nuevo registro en el Combobox 

Aqui les muestro el codigo desde un metodo creado para ello :

WAIT WINDOW "[ Metodo Para Actualizar Combo ]" TIMEOUT 1
........   
Reply all
Reply to author
Forward
0 new messages