¿Usar un cuadro de lista para seleccionar varios registros y agregar nuevos registros repetidos?

Con una nueva inquietud, genere un formulario con un cuadro de lista, donde extraigo varios registros. En el cuadro lista selecciono varios registros cree un botón que me permita agregarle nuevos registros en campos específicos, esos datos a ingresar están en varios textbox. El registro que quiero integrar es el mismo para todos, ya que es una sola factura para varias ordenes de trabajo en el mes.

Uso el comando SQL INSERT, coloco los campos de la tabla y los nombre de textbox, pero me genera un error 3346, el cual dice "El numero de valores de consulta y el numero de campos de destino son diferentes". Lo revise y están iguales, adjunto código:

Private Sub Agregar_Click()
Dim intCurrentRow As Integer
For intCurrentRow = 0 To Me.Lista2.ListCount - 1
If Me.Lista2.Selected(intCurrentRow) Then
    CurrentDb.Execute "INSERT INTO Tabla_Requerimiento (RegistroFactura, FacturaN, FechaFactura,Pagado,FechadePago,DocumentoFactura,EstadoDocumentoFactura) VALUES (" & _
    Int(CDbl(Me.RegistroFactura)) & ",'" & Me.FacturaN & "','" & Me.FechaFactura & "','" & Me.Pagado & "','" & Me.FechadePago & "','" & Me.DocumentoFactura & "','" & Me.EstadoDocumentoFactura & "', '" & Me.Lista2.Column(0, intCurrentRow) & ");"
End If
Next intCurrentRow
End Sub

Todo esto en un formulario dependiente de la tabla Requerimientos

Respuesta
1

Héctor, no dices si el origen de la fila del cuadro de lista es Tabla/consulta o una lista de valores. Así que te envío un ejemplo de como lo puedes hacer.

¡Gracias! Julián, revise lo enviado y no es lo que necesito. El cuadro de lista esta asociado directamente a la Tabla y los registros que quiero ingresar se repite en varias filas, pero estas depende del ID_OT, que obviamente son diferentes.

2 respuestas más de otros expertos

Respuesta
1

Aquí hay un problema con la cantidad de columnas y valores. Estás insertando 8 valores, pero en INSERT INTO solo menciona 7 columnas.

Si, por ejemplo, la columna adicional representa el IDOrdenTrabajo, la consulta corregida quedaría así:

Private Sub Agregar_Click()
    Dim intCurrentRow As Integer
    For intCurrentRow = 0 To Me.Lista2.ListCount - 1
        If Me.Lista2.Selected(intCurrentRow) Then
            CurrentDb.Execute "INSERT INTO Tabla_Requerimiento (RegistroFactura, FacturaN, FechaFactura, Pagado, FechadePago, DocumentoFactura, EstadoDocumentoFactura, IDOrdenTrabajo) VALUES (" & _
            Int(CDbl(Me.RegistroFactura)) & ", '" & Me.FacturaN & "', #" & Me.FechaFactura & "#, '" & Me.Pagado & "', #" & Me.FechadePago & "#, '" & Me.DocumentoFactura & "', '" & Me.EstadoDocumentoFactura & "', '" & Me.Lista2.Column(0, intCurrentRow) & "');"
        End If
    Next intCurrentRow
End Sub

Explicación:

Añadí IDOrdenTrabajo en la lista de columnas, asumiendo que la columna Lista2. Column(0, intCurrentRow) representa un ID de orden de trabajo.

Formato de fecha en SQL de Access: En Access, los valores de tipo Date deben ir entre #, por eso cambié '" & Me.FechaFactura & "' a #" & Me.FechaFactura & "#.

Corrección del número de valores: Ahora hay 8 valores para 8 campos.

Si Lista2. Column(0, intCurrentRow) no representa un campo en la tabla, revise la estructura de Tabla_Requerimiento y ajuste los nombres de columnas según corresponda.

Don Eduardo, gracias por responder, pero no me resulta. Efectivamente el campo 0 corresponde a la columna OT, la cual seria el Id de los registros. Modifique la consulta del Listado2 agregando los campos que necesito llenar con información.

Seria posible que le envie la data para que pueda revisarlo, puede que yo me equivoque en lo que quiero hacer y mi idea no es correcta. Gracias...

Le respondí a su correo.

Respuesta
1

El problema lo generan los campos de fecha a los que se intenta añadir un texto.

Se ha de utilizar el marcador de fechas (#) y el formato de la fecha ha de ser el americano.

La alternativa es utilizar el formato numérico (el dato real guardado en la tabla) utilizando la conversión de la fecha a número (mediante CDbl).

Si el dato referente no es 'una fecha Access' se le convierte a 'fecha Acess' con la función CDate.

¡Gracias! Don Enrique, desconicia ese método para que access asuma el formato de fecha, solo pensaba que al darle el formato en el formulario bastaba y en la tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas