Ingresar datos a una Tabla - Mediante un List

Lo que quiero hacer es lo siguiente: Doy de alta un producto en una tabla producto y luego le asigno el material correspondiente a ese producto en otra tabla llamada materialprod.
Con el siguiente código puedo insertar en una tabla (materialprod) los todos contenidos en una lista.
El problema es que: Con el primero producto que doy de alta, puedo ingresar los datos de la lista correctamente, luego en el siguiente intento, me inserta el código del producto que lo toma de un campo en el formulario pero no me ingresa los datos contenidos en la lista (list3). Me rellana los campos con cero o vacíos.
SELECT materialprod
cant = 0
totalitem = thisform.list3.ListCount
IF (totalitem > 0)
  FOR cant=1 TO totalitem
    GO bottom
     INSERT INTO materialprod (pro_codig, mat_codig, mat_nombr, mat_color, cantidad);
     VALUES ((thisform.text_Codigo.value), VAL(thisform.list3.ListItem(cant, 1)),      ALLTRIM        (thisform.list3.ListItem(cant, 2)), ALLTRIM(thisform.list3.ListItem(cant, 3)),;
VAL(thisform.list3.ListItem(cant, 4)))
   ENDFOR
   cant = 1
Endif

1 respuesta

Respuesta
1
Espero poder ayudarte:
Bueno. Por lo que veo tu código siempre inserta todos los items de la lista en la tabla. Esto puede traer algún problema de duplicación de registros. Verificá que eso no pase. Cualquier cosa lo vemos después.
Con respecto a tu problema, no veo que tu código no funcione salvo por lo siguiente:
El array listItem del listBox hace referencia a un item por su itemID que no siempre es correlativo.
Esto depende mucho de como es el código que usas para llenar el listBox. Si lo haces secuencial, recorriendo los productos te recomiendo que cambies ListItem por list porque la variable cant es secuencial porque está en un for.
Por ejemplo:
Yo puedo usar en un listBox lo siguiente:
Thisform. List3. AddListItem('Este es el primero', 18)
Al hacerlo por medio de addListItem lo que pasa es que el index 1 no corresponde al itemID 1, sino que corresponde al 18 entonces listItem(1,1) no va a traer nada porque debería ser listItem(18,1) ya que tienes que hacer referencia al ID y no al index.
En definitiva, probá haciendo:
SELECT materialprod
FOR cant=1 TO thisform.list3.ListCount
     INSERT INTO materialprod (pro_codig, mat_codig, mat_nombr, mat_color, cantidad);
     VALUES ((thisform.text_Codigo.value), VAL(thisform.list3.List(cant, 1)),      ALLTRIM        (thisform.list3.List(cant, 2)), ALLTRIM(thisform.list3.List(cant, 3)),;
VAL(thisform. List3. List(cant, 4)))
   ENDFOR
   cant = 1
Endif
Y cuando llenas el listBox hacelo mediante addItem y no con addListItem
Si no anda.. empezamos de nuevo.. :D
Estoy a tu disposición
Christian
www.keystone.com.ar
Disculpame, corregí tu código y lo hice mal.
Quedaría así:
SELECT materialprod
FOR cant=1 TO thisform.list3.ListCount
     INSERT INTO materialprod (pro_codig, mat_codig, mat_nombr, mat_color, cantidad);
     VALUES ((thisform.text_Codigo.value), VAL(thisform.list3.List(cant, 1)),;
      ALLTRIM(thisform.list3.List(cant, 2)), ALLTRIM(thisform.list3.List(cant, 3)),;
VAL(thisform. List3. List(cant, 4)))
Endfor
Nos vemos
La solución fue perfecta, se nota que sabes mucho del tema.
Muchas gracias por tu ayuda, fue muy importante para poder seguir con lo que estoy haciendo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas