Jump to content

Archived

This topic is now archived and is closed to further replies.

Pirtrafilla

Problema con UPDATE registro vacío o nulo

Recommended Posts

Hola a todos de nuevo.

De nuevo con un problema con una consulta SQL desde Excel a Access. Pongo el código y explico.

'macro para grabar los datos en tabla Checklist
Fin = ListBox1.ListCount
For i = 0 To Fin - 1
xxx = ListBox1.List(i, 0)
Conexión
If IsNull(ListBox1.List(i, 9)) Then
Sql = "UPDATE Tb_Checklist SET Importe='" & ListBox1.List(i, 4) & "',Contable='" & ListBox1.List(i, 7) & _
"', Previsto='" & ListBox1.List(i, 6) & "', En_Curso='" & ListBox1.List(i, 8) & _
"' WHERE ID =" & xxx
Else
Sql = "UPDATE Tb_Checklist SET Importe='" & ListBox1.List(i, 4) & "',Contable='" & ListBox1.List(i, 7) & _
"', Previsto='" & ListBox1.List(i, 6) & "', En_Curso='" & ListBox1.List(i, 8) & _
"', ID_Contable='" & ListBox1.List(i, 9) & "' WHERE ID =" & xxx
End If

Tengo un listbox en un formulario, donde voy modificando datos. En algunos casos he de dejar un campo vacío, o nulo. Es el datos que hay en el ListBox1.List(i, 9).

Como me daba error he puesto un IF THEN que al final lo que hago es que si el valor de ListBox1.List(i, 9) es nulo no lo incluyo en el UPDATE.

Pero lo que pasa es que si quiero actualizar el registro cuando el valor es nulo en el listbox a la tabla Tb_Checklist en el registro ID_Contable.

No consigo hacerlo, y tampoco encuentro en Internet justo este problema.

Agradezco si podéis ayudarme.

Moisés.

 

Link to post
Share on other sites

según se aprecia, los datos del listbox1 deben ser tratados como números (?), prueba de esta forma:

1) agrega dos variables a tu procedimiento (asumo que lo acostumbras)

  dim valorOnulo, num as string

2) llama a tu procedimiento de conexión donde te sea más conveniente (yo lo he omitido)

3) usa unas instrucciones +/- como las siguientes:

  with listbox1
    for i = 0 to .listcount - 1
      valorOnulo = .list(i, 9): num = "'" ' se asume que .list(i, 9) tiene dato (se considera el apóstrofo) '
      if valorOnulo = "" then valorOnulo = " null ": num = "" ' si .list(i, 9) no tiene dato, cambian las variables '
      sql = "update tb_checklist set importe='" & .list(i, 4) $ "',contable='" & .list(i, 7) & "',previsto ='" & _
        .list(i, 6) & "',en_curso='" & .list(i, 8) & "',id_contable=" & num & valorOnulo & num & " where id =" & .list(i, 0)
    next
  end with

saludos,
hector.

Link to post
Share on other sites

@Héctor Miguel, muchas gracias por responder.

He probado y funciona SOLO si el campo no es nulo. En cuanto el campo está vacío me salta el error de "No coinciden los tipos"

Te copio la macro integra como la tengo.

Private Sub CommandButton4_Click()

Dim i, valorOnulo, num As String

'macro para grabar los datos en tabla Checklist
Conexión

    For i = 0 To ListBox1.ListCount - 1
      valorOnulo = ListBox1.List(i, 9): num = "'" ' se asume que .list(i, 9) tiene dato (se considera el apóstrofo) '
      If valorOnulo = "" Then valorOnulo = " null ": num = "" ' si .list(i, 9) no tiene dato, cambian las variables '
      Sql = "update Tb_Checklist set Importe='" & ListBox1.List(i, 4) & "',Contable='" & ListBox1.List(i, 7) & "',Previsto ='" & ListBox1.List(i, 6) & _
      "',En_Curso='" & ListBox1.List(i, 8) & "',ID_Contable=" & num & valorOnulo & num & " where ID =" & ListBox1.List(i, 0)
    
    Rst.Open Sql, Conn, 3, 3, 1
    Next
Conn.Close
ListBox1.ListIndex = -1

'macro para grabar el Saldo_Pendiente en tabla Contable
Conexión
Sql = "UPDATE Contable SET Saldo_Pendiente='" & TextBox12.Value & "' WHERE ID_Contable =" & TextBox5
'
Rst.Open Sql, Conn, 3, 3, 1
Conn.Close
Set Rst = Nothing: Set Conn = Nothing

'refrescamos el listbox1 desde este formulario
With UserForm3
it = .ListBox1.ListIndex
.ListBox1.ListIndex = -1
.ListBox1.ListIndex = it
End With
'
End Sub

Por cierto, con el With Listbox1, En With...., me daba error.

He probado primero quitándolo para ver que primero funcione la sentencia SQL y luego intentaré solucionar esto otro.

Si me puedes echar una mano con esto te lo agradezco.

Moisés.

Link to post
Share on other sites

Hola de nuevo.

Para simplicar el código y siguiendo tu consejo he modificado por With, pero poniendo el "me" delante a ver si así evito el error que me daba antes.

With Me.ListBox1
    For i = 0 To .ListCount - 1
      valorOnulo = .List(i, 9): num = "'" ' se asume que .list(i, 9) tiene dato (se considera el apóstrofo) '
      If valorOnulo = "" Then valorOnulo = " null ": num = "" ' si .list(i, 9) no tiene dato, cambian las variables '
      Sql = "update Tb_Checklist set Importe='" & .List(i, 4) & "',Contable='" & .List(i, 7) & "',Previsto ='" & .List(i, 6) & _
      "',En_Curso='" & .List(i, 8) & "',ID_Contable=" & num & valorOnulo & num & " where ID =" & .List(i, 0)
    
    Rst.Open Sql, Conn, 3, 3, 1
    Next
End With

El error que me da sigue siendo el de "No coinciden los tipos", si el valor es nulo.

Moisés.

 

Link to post
Share on other sites



  • Posts

    • Buenas tardes estimados, espero y me puedan ayudar con este dilema se trata de lo siguiente. tengo un archivo "01 PCP.xlsx - v02 - copia" el cual entre otras hojas contiene tres principalmente, y son: "Proy.-Comer"      -       "BD_Recetas"      -      "Mat_Stock" En la hoja "Proy.-Comer" tenemos en color naranja las semanas del año, y en color amarillo los productos, y en plomo las cantidades (que se digitan manualmente). ***Lo que necesito es que en la hoja "BD_Recetas" , a partir de la celda "M65"  Sume la cantidad correspondiente a la semana según el producto de la columna en color amarillo "L10:L193" Y sus cantidades (celdas de color plomo), y luego lo multiplique por la cantidad según corresponda de la columna "H65" y que si la celda de la columna H dice caja que lo deje en "0", y asi sucesivamente para las demás semanas  (se puede apreciar en la formula).*** En la Hoja  "Mat_Stock",  a partir de la celda "I7" ***Quiero sumar por semana la cantidad del material a utilizar, en la columna A que esta en amarillo los códigos y tiene que sumar por semana según el código de la hoja "BD_Recetas" en la columna "F" de color naranja (Se puede ver también en la formula de las celdas)***   esto es para tratar de automatizarlo con una macro.   DE ANTEMANO MUCHAS GRACIAS POR LA AYUDA.     01 PCP.xlsx - v02 - copia.xlsm
    • Hola @wess (y demás concurrencia) Adjunto otra alternativa con Tabla dinámica, pero utilizando el modelo de datos de power pivot y funciones DAX Te mostrara la suma del mes filtrado y el acumulado   Saludos a todos! Filtrar producto con acumulado mensual DAX_GP.xlsx
    • Adjunto otra opción,  saludos, Silvia Tabla dinamica sq.xlsx
    • Si y funciona bien. Ahora tengo que repasar mi macro para encontrar ,si puedo y se, depurar el error en el programa general. Muchas gracias. Un saludo
    • Hola  AlexanderS, justo lo que que necesitaba, la solución esta super, Declaro el tema como solucionado. Muchas gracias y mil Bendiciones desde Colombia
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy