Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Almacenamiento de varios registros.

Estas en el tema de Almacenamiento de varios registros. en el foro de Visual Basic clásico en Foros del Web. Buenas tardes estimados foristas : Tengo una duda con relación al almacenamiento de varios registros. Tengo un list box en modo checked.... Cada vez que ...
  #1 (permalink)  
Antiguo 02/02/2010, 15:56
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Almacenamiento de varios registros.

Buenas tardes estimados foristas :

Tengo una duda con relación al almacenamiento de varios registros. Tengo un list box en modo checked.... Cada vez que hago click en un check el valor que tiene asignado ese campo debe almacenarse en la base de datos.... Hasta aqui vamos bien...

Les anexo el código :

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql$

Set cnn = New ADODB.Connection
cnn.ConnectionString = "DRIVER={mysql odbc 3.51 driver};" _
& "SERVER=999999;" _
& "Database=eeeeeeeee;" _
& "UID=segui;" _
& "password= vmsidmosdv;" _
& "port=3306;option3 "

cnn.Open

Set rst = New ADODB.Recordset

With rst
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open "INSERT INTO tb_plan (cod_planif, cod_emp, cod_divi, id_audit, cod_audit, cod_prog, cod_tarea, cod_subta, tiempo) VALUES ('" & Val(Text6.Text) & "', '" & Val(Text7.Text) & "', '" & Val(Text15.Text) & "', '" & Val(Text16.Text) & "', '" & Val(Text18.Text) & "', '" & Val(Text9.Text) & "', '" & Val(Text10.Text) & "', '" & Val(Text11.Text) & "', '" & Val(Text12.Text) & "' )", cnn
End With


Hasta aqui vamos bien.... Pero imaginense lo lento que se pone el sistema cada vez que hago click en un checked del listbox... Se torna lento porque en cada click ejecuta la instrucción que les puse arriba....

Mi pregunta es la siguiente.... Como puedo hacer para que cuando el usuario elija 10 opciones estas se mantengan como en una variable y luego yo le de click a un botón que sea guardar y solo se haga una conexión al servidor y ahi se almacenen los 10 registros....

Estoy programando en visual basic 6 con base de datos en mysql.

Saludos.

Carlos.
  #2 (permalink)  
Antiguo 02/02/2010, 17:39
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Almacenamiento de varios registros.

Pues se me ocurre que crees una arreglo de estructuras con los campos que vas a almacenar y un contador como variable global, que cuando llegue a 10, lea todo lo almacenado en el arreglo de estrucutras y lo guarde en la base de datos.
__________________
En programación hay mil y un formas de hacer lo mismo...
  #3 (permalink)  
Antiguo 03/02/2010, 06:43
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Exclamación Respuesta: Almacenamiento de varios registros.

Exacto.... Algo así sería lo que quiero, pero te comento que no siempre puede ser un valor de 10.. pueden ser hasta 60 opciones....

Ese arreglo es lo que quiero hacer pero no se como... tendrás algún código por el cuál me pueda guiar ???

Gracias.

Carlos.
  #4 (permalink)  
Antiguo 03/02/2010, 14:00
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Almacenamiento de varios registros.

Claro puede ser la cantidad de registro que tú quieras, solo tienes que ir contando para irlos colocando en el arreglo para su posterior almacenamiento, así en un módulo define tu estructura:

Type Clientes
nombre as String
apellido as String
.
.
.
(los campos que sean)
End Type

y ahi mismo declaras el arreglo:

Dim aclientes(60) as Clientes

(el numero de registros pueder ponerlo tú)

la variable global bien la declaras en el módulo o en el formulario con el que trabajas:

Dim contador as Integer

para acceder a los miembros de la estructura, por ejemplo para colocar pedro en la posicion 0 del arreglo, y cada vez que agregues un registro incrementa el contador:

aclientes(contador).nombre="PEDRO"
contador = contador + 1

De ahi para leer basta con un for y los vas guardando en la basde de datos.
__________________
En programación hay mil y un formas de hacer lo mismo...
  #5 (permalink)  
Antiguo 03/02/2010, 15:25
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Almacenamiento de varios registros.

hermano un millón de gracias por tu respuesta... Voy a intentar amoldarlo a mis requerimientos...

Lo que sucede es que mis conocimientos son extremadamente "BASICOS" en programación y es por ello la dificultad en comprender lo que me suministrastes....

Cualquier duda te pregunto de nuevo... de igual forma quisiera saber donde podré descargar un ejemplo ya que tengo como un mes con el desarrollo parado por esa problemática...

De nuevo un millón de gracias !!!

Carlos.
  #6 (permalink)  
Antiguo 04/02/2010, 12:26
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Almacenamiento de varios registros.

Estimado amigo :

Desde ayer estuve probando lo que me enviastes pero no me sale... será que podrías darme una explicación extremadamente básica ???

Una explicación algo así como para "DUMMIES" jejejeje.....

Un millón de gracias y disculpa tanto fastidio !!!

Saludos.

Carlos.
  #7 (permalink)  
Antiguo 04/02/2010, 13:44
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Almacenamiento de varios registros.

No controlo de ADOC y tal, pero imagino que de algún modo cada elemento seleccionado del listbox conlleva guardar varios datos diferentes en la base.

Creo que lo que fradve te sugiere es que guardes cada valor en una matriz de tipo definido por tí.
Para que lo tengas fácil te voy a hacer la mitad del trabajo de lo que yo creo que dice.
Así me entretengo y quzá te aclare la cosa.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Type Clientes
  4.   nombre as String
  5.   apellido as String
  6. .
  7. .
  8. .
  9.   (los campos que sean)
  10. End Type
  11.  
  12. Dim Tabla () As Clientes
  13.  
  14. Private Sub Form_Load()
  15.   ' creamos el primer elemento
  16.  Redim Tabla(0)
  17. End Sub
  18.  
  19. 'en el click del listbox creas un elemento para la matriz y guardas ahí todos los datos que hay que mandar despues.
  20.  
  21. private sub list1_click()
  22.  
  23. 'primero puedes mirar si ya lo has añadido, si quieres poder actualizarlo
  24.  dim f as long
  25.   for f=0 to ubound(tabla) - 1
  26.     ' si existe
  27.    if tabla(f).nombre=nombreainsertar then
  28.      ' lo actualizamos
  29.      goto guardar
  30.     endif
  31.   next f
  32.  
  33.   'si no existe con anterioridad
  34.  'se guardan los valores en el último elemento de la tabla
  35.   f=ubound(tabla)
  36.   ' y preparamos ya el siguiente elemento de la tabla
  37.  redim preserve Tabla(f+1)
  38.  
  39. guardar:
  40.   tabla(f).nombre=nombreainsertar
  41.   tabla(f).apellido=
  42.   tabla(f)...
  43.  
  44.  
  45. End sub
Después en un botón guardas los elementos de la tabla desde 0 hasta ubound(tabla)-1
Recuerda también en el botón reiniciar la tabla: Redim Tabla(0)

Espero haber ayudado además de pasar un rato entretenido.

Suerte
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #8 (permalink)  
Antiguo 04/02/2010, 16:32
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Almacenamiento de varios registros.

Claro que si eres de gran ayuda pkj está muy bien explicado tú codigo, solo una cosita no soy muy amigo de los goto(:-p) y la función con una pequeña modificación y para que no tome en cuenta los repetidos:

Código vb:
Ver original
  1. Private Sub List1_Click()
  2.     Dim nombreainsertar As String
  3.     Dim bandera As Boolean
  4.    
  5.     nombreainsertar = List1.Text
  6.     For f = 0 To UBound(tabla) - 1
  7.         If tabla(f).nombre = nombreainsertar Then
  8.             bandera = True
  9.             Exit For
  10.         End If
  11.     Next f
  12.    
  13.     If Not bandera Then
  14.         f = UBound(tabla)
  15.         tabla(f).nombre = nombreainsertar
  16.         ReDim Preserve tabla(f + 1)
  17.     Else
  18.         MsgBox "El valor ya ha sido agregado"
  19.     End If
  20. End Sub

Una vez que hayas seleccionado todo los datos que quieras almacenar lees el arreglo y dando clic en el botón guardar vas a enviar elemento por elemento a la base de datos, así:

Código vb:
Ver original
  1. Sub guardar()
  2.     cnn.Open
  3.  
  4.     Set rst = New ADODB.Recordset
  5.  
  6.     For i = 0 To UBound(tabla) - 1
  7.         With rst
  8.             .CursorLocation = adUseClient
  9.             .CursorType = adOpenStatic
  10.             .LockType = adLockOptimistic
  11.             .Open "INSERT INTO Clientes VALUES ('" & tabla(i).nombre & "')", cnn
  12.         End With
  13.     Next
  14.     cnn.Close
  15. End Sub

Este es solo un ejemplo, de ahi puedes adecuarlo a tus necesidades. Cualquier duda postealea
__________________
En programación hay mil y un formas de hacer lo mismo...

Última edición por fradve; 04/02/2010 a las 16:34 Razón: aclaración
  #9 (permalink)  
Antiguo 05/02/2010, 09:38
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Almacenamiento de varios registros.

Estimados amigos :

Yo creo que mejor explicación no he podido recibir...

Me parece excelente la capacidad para responder este tipo de interrogantes... Nuevamente los felicito !!!!

Saludos.

Carlos.
  #10 (permalink)  
Antiguo 05/02/2010, 10:32
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Exclamación Respuesta: Almacenamiento de varios registros.

Estimados amigos miren lo siguiente :

Option Explicit

Dim Tabla() As Clientes

Private Type Clientes
cod_producto as integer
producto as string
End Type


Private Sub List1_Click()

Dim bandera As Boolean
Dim f As Long
Dim i As Integer

For i = 0 To List1.ListCount - 1

If List1.Selected(i) = True Then
Text11.Text = List1.ItemData(i)
End If

Next

For i = 0 To UBound(Tabla) - 1
If Tabla(i).cod_producto = Text11.Text Then
bandera = True
Exit For
End If
Next i
If Not bandera Then
i = UBound(Tabla)
Tabla(i).cod_producto = Text11.Text
ReDim Preserve Tabla(i + 1)
Else
MsgBox "El valor ya ha sido agregado"
End If

End Sub


Private Sub Command6_Click()

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim i As Long

On Error Resume Next

Set cnn = New ADODB.Connection
cnn.ConnectionString = "DRIVER={mysql odbc 3.51 driver};" _
& "SERVER=11.11.11.11;" _
& "Database=seg;" _
& "UID=segi;" _
& "password=dsfSFsdfSVsd;" _
& "port=3306;option3 "

cnn.Open

Set rst = New ADODB.Recordset

For i = 0 To UBound(Tabla) - 1
With rst
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open "INSERT INTO tb_plan VALUES ('" & Tabla(i).cod_producto & "')", cnn


End With
Next
' cnn.Close

End Sub



Les explico como opera el control :

Yo cargo el listbox con productos... y le pongo como indice el código de ese artículo.... Cuando yo le hago click por ejemplo al producto "JAMON", en un control de texto me coloca el código de ese cliente (22)... Pero si elijo varios productos, en ese text box me va colocando uno por uno los códigos.

Que pasa... Cuando yo le de al botón "GRABAR" el debe agarrar TODOS los códigos que fuéron almacenados en la matriz e irlos pasando uno a uno con su descripción para almacenarlos a la base de datos...


No me genera ningun error en tiempo de ejecución pero cuando consulto la base de datos no me almacena valores... me pueden ayudar ??

Gracias y disculpen mi torpeza !!!

Saludos.

Carlos.
  #11 (permalink)  
Antiguo 05/02/2010, 10:55
 
Fecha de Ingreso: febrero-2010
Mensajes: 10
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Almacenamiento de varios registros.

y porque mejor no usas VALUE y una vez que tengas todo ok un boton guardar y asi te ahorras todo lo de la matris
  #12 (permalink)  
Antiguo 05/02/2010, 11:00
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Almacenamiento de varios registros.

bueno poruqe imaginate... son muchos productos y muchos códigos... y es mejor usar una matriz porque un mismo cliente puede tener productos de limpieza, productos de higiene personal, legumbres, etc.. me explico ???

por eso es que recurro a la matriz para que despues que tenga TODO cargado, le de guardar y listo... pero no se por que razón cuando le digo guardar la tabla me queda en cero... esto lo vi presionando la tecla f8 para ir viendo linea por línea el problema !!!!

saludos.

Carlos.
  #13 (permalink)  
Antiguo 05/02/2010, 11:25
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Almacenamiento de varios registros.

mira ya probé el código, porque en verdad que se me hace raro que no te funcione o mejor dicho que no guarde entonces aqui te pongo el codigo que usé:

Todo esto primero:

Código vb:
Ver original
  1. Private Type Productos
  2.     codigo As Integer
  3.     nombre As String
  4. End Type
  5.  
  6. Dim tabla() As Productos
  7.  
  8. Dim cn As ADODB.Connection
  9. Dim res As ADODB.Recordset
  10. Dim conexion As String

Luego:

el botón guardar solo llama a la función guardar

Código vb:
Ver original
  1. Private Sub Command2_Click()
  2.     guardar
  3. End Sub

Código vb:
Ver original
  1. Sub guardar()
  2.     Set res = New ADODB.Recordset
  3.  
  4.     For i = 0 To UBound(tabla) - 1
  5.         With res
  6.             .ActiveConnection = cn
  7.             .CursorLocation = adUseClient
  8.             .CursorType = adOpenStatic
  9.             .LockType = adLockOptimistic
  10.             .Open "INSERT INTO productos VALUES (" & tabla(i).codigo & ",'" & tabla(i).nombre & "')"
  11.         End With
  12.     Next
  13.    
  14.     res.Open "SELECT * FROM productos"
  15.     Set DataGrid1.DataSource = res
  16. End Sub

en el load del formulario coloco esto:

Código vb:
Ver original
  1. Private Sub Form_Load()
  2.    
  3.     Set cn = New ADODB.Connection
  4.     conexion = "driver={MySQL ODBC 3.51 Driver};" _
  5.                         & "SERVER=localhost;" _
  6.                         & "DATABASE=prueba;" _
  7.                         & "UID=root;PWD=utm123;OPTION=3"
  8.                            
  9.     cn.ConnectionString = conexion
  10.     cn.Open
  11.     ReDim tabla(0)
  12.     List1.AddItem "Jamón"
  13.     List1.AddItem "Carne"
  14.     List1.AddItem "Leche"
  15.     List1.AddItem "Queso"
  16. End Sub

En el evento clic de la lista va esto:

Código vb:
Ver original
  1. Private Sub List1_Click()
  2.     Dim bandera As Boolean
  3.    
  4.     Text1.Text = List1.ListIndex
  5.     For f = 0 To UBound(tabla) - 1
  6.         If tabla(f).codigo = Val(Text1.Text) Then
  7.             bandera = True
  8.             Exit For
  9.         End If
  10.     Next f
  11.    
  12.     If Not bandera Then
  13.         f = UBound(tabla)
  14.         tabla(f).codigo = Val(Text1.Text)
  15.         tabla(f).nombre = List1.Text
  16.         ReDim Preserve tabla(f + 1)
  17.     Else
  18.         MsgBox "El valor ya ha sido agregado"
  19.     End If
  20. End Sub

y en el unload del formulario cierro la conexión así: cn.close.

Si te fijas en la funcion guardar hace referencia a un data grid, simplemente lo coloqué para visualizar los datos que se han guardado.

Y eso es todo, prueba y comentas lo que suceda
__________________
En programación hay mil y un formas de hacer lo mismo...

Última edición por fradve; 05/02/2010 a las 11:26 Razón: highlight
  #14 (permalink)  
Antiguo 05/02/2010, 14:42
 
Fecha de Ingreso: septiembre-2009
Ubicación: Venezuela
Mensajes: 92
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Almacenamiento de varios registros.

AMIGO EXCELENTE JEJEJEJEJE........ AL FINNNNNNNNNNNNNNNNNN............. wao pensé que nunca solventaría la problemática... jejejeje.... estoy acomodando MUCHOS códigos que tenía con este problema... estaba trabajando de lo mas rudimentario... click en una opción... a guardar... click otra opción... a guardar jejeje... imaginate lo lente que estaba esto... ahora los tiempos de respuesta de mi software han mejorado considerablemente gracias a su apoyo !!!!

DE VERDAD que no tengo como agradecer esta segundota que me han hecho !!!!

Feliz tarde !!!

Saludos.

Carlos.:aplaus o:

Etiquetas: almacenamiento, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:21.