Discussion:
Agregar datos a una tabla con un formulario
(demasiado antiguo para responder)
j***@gmail.com
2007-03-01 11:02:36 UTC
Permalink
Buenas a todos, realmente no es como lo digo en el asunto, pero la
esencia del problema es asi.

Tengo diseñado un formulario en Access el cual tiene varios cuadros
combinados, que apuntan a una tabla final llamada datos_finales, pero
que el origen de los datos de cada cuadro combinado vienen de otras
tablas ( si necesitais mas datos asi he puesto el origen de datos de
uno de los combos [ SELECT TIPOS.TIPO, TIPOS.TDES FROM TIPOS WHERE
(((TIPOS.TIPO)="EA" Or (TIPOS.TIPO)="ET")) ORDER BY TIPOS.TDES; ]

pues bien lo que necesito es que al definir los datos en los cuadros
combinados, me los guarde en la tabla ( si fuera solamente un registro
con un command_button que cerrara el formulario lo guardaria en la
tabla y ya esta). Realmente necesito guardar el dato en la tabla, pero
mantener la información en los cuadros combinados ( creo q en VB eran
combobox, no me acuerdo ahora) asi poder cambiar el dato de uno de
ellos y mantener el resto, y no tener que volver a rellenar los demas.

He intentado poner un cmd_button que contenga este codigo:

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70

Pero me hace una cosa extraña, me va dejando los datos pero el ultimo
introducido me lo guarda 2 veces. Si pongo el primer dato, me lo pone
2 veces, en este casi tengo un cuadro de texto que introduce
cantidades a la tabla, lo cual me lo duplica, supongo q sera porque al
mantener la información en los combos y refrescar, me lo pone
directamente en la tabla.

Donde me quedo perdido es si vale la pena utilizar algun codigo,
manera intermedia para guardar los datos , ya sea con SQL ( que no lo
llevo muy bien) o parecido.

Gracias por la atencion y saludos
CarCar
2007-03-01 11:12:30 UTC
Permalink
Hola:

Dices:

"pues bien lo que necesito es que al definir los datos en los cuadros
combinados, me los guarde en la tabla ( si fuera solamente un registro
con un command_button que cerrara el formulario lo guardaria en la
tabla y ya esta). Realmente necesito guardar el dato en la tabla, pero
mantener la información en los cuadros combinados ( creo q en VB eran
combobox, no me acuerdo ahora) asi poder cambiar el dato de uno de
ellos y mantener el resto, y no tener que volver a rellenar los demas.
"

Y en ese párrafo, no entiendo qué es lo que quieres decir.
Y aún menos lo que intentas decir en estas frases:

"Realmente necesito guardar el dato en la tabla, pero
mantener la información en los cuadros combinados... asi poder cambiar
el dato de uno de
ellos y mantener el resto, y no tener que volver a rellenar los
demas."

Puedes intentar explicarlo un poco mejor, quizás con un ejemplo
concreto...

Saludos,
CarCar
Post by j***@gmail.com
Buenas a todos, realmente no es como lo digo en el asunto, pero la
esencia del problema es asi.
Tengo diseñado un formulario en Access el cual tiene varios cuadros
combinados, que apuntan a una tabla final llamada datos_finales, pero
que el origen de los datos de cada cuadro combinado vienen de otras
tablas ( si necesitais mas datos asi he puesto el origen de datos de
uno de los combos [ SELECT TIPOS.TIPO, TIPOS.TDES FROM TIPOS WHERE
(((TIPOS.TIPO)="EA" Or (TIPOS.TIPO)="ET")) ORDER BY TIPOS.TDES; ]
pues bien lo que necesito es que al definir los datos en los cuadros
combinados, me los guarde en la tabla ( si fuera solamente un registro
con un command_button que cerrara el formulario lo guardaria en la
tabla y ya esta). Realmente necesito guardar el dato en la tabla, pero
mantener la información en los cuadros combinados ( creo q en VB eran
combobox, no me acuerdo ahora) asi poder cambiar el dato de uno de
ellos y mantener el resto, y no tener que volver a rellenar los demas.
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70
Pero me hace una cosa extraña, me va dejando los datos pero el ultimo
introducido me lo guarda 2 veces. Si pongo el primer dato, me lo pone
2 veces, en este casi tengo un cuadro de texto que introduce
cantidades a la tabla, lo cual me lo duplica, supongo q sera porque al
mantener la información en los combos y refrescar, me lo pone
directamente en la tabla.
Donde me quedo perdido es si vale la pena utilizar algun codigo,
manera intermedia para guardar los datos , ya sea con SQL ( que no lo
llevo muy bien) o parecido.
Gracias por la atencion y saludos
Ju@nk
2007-03-01 14:30:59 UTC
Permalink
Entiendo que tienes un botón y varios combobox y que quieres crear registros
en función de la selección de losl combobox. ejecuta una consulta de datos
anexados desde el botón

dim misql as string
misql = "Insert into TuTabla(Campo1, Campo2, ...) values(" & Combo1 & "," &
Combo2 & "," .. & ")"
currentdb.execute misql

o carga un recordset.
--
**
Colabora con el grupo, contesta a este mensaje y dinos si te sirvió o no la
respuesta dada.
Muchas gracias.

Salu2
***@nK [MVP Access] [DCE2003 ***] + VSTO [DCE2005 **]
Correos personales o preguntas particulares en mi grupo
http://groups.google.es/group/juank
www.juank.tk
www.mvp-access.com
¿Que es un MVP?, enterate en http://mvp.support.microsoft.com

Nota: El contenido de este mensaje, así como el código
fuente que pueda ir incluido en el mismo, se proporciona
«COMO ESTÁ», sin garantías de ninguna clase, y no otorga
derecho alguno. Usted asume cualquier riesgo al poner en
práctica, utilizar o ejecutar la sugerencia del presente mensaje.
**
<***@gmail.com> escribi� en el mensaje news:***@j27g2000cwj.googlegroups.com...
Buenas a todos, realmente no es como lo digo en el asunto, pero la
esencia del problema es asi.

Tengo diseñado un formulario en Access el cual tiene varios cuadros
combinados, que apuntan a una tabla final llamada datos_finales, pero
que el origen de los datos de cada cuadro combinado vienen de otras
tablas ( si necesitais mas datos asi he puesto el origen de datos de
uno de los combos [ SELECT TIPOS.TIPO, TIPOS.TDES FROM TIPOS WHERE
(((TIPOS.TIPO)="EA" Or (TIPOS.TIPO)="ET")) ORDER BY TIPOS.TDES; ]

pues bien lo que necesito es que al definir los datos en los cuadros
combinados, me los guarde en la tabla ( si fuera solamente un registro
con un command_button que cerrara el formulario lo guardaria en la
tabla y ya esta). Realmente necesito guardar el dato en la tabla, pero
mantener la información en los cuadros combinados ( creo q en VB eran
combobox, no me acuerdo ahora) asi poder cambiar el dato de uno de
ellos y mantener el resto, y no tener que volver a rellenar los demas.

He intentado poner un cmd_button que contenga este codigo:

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70

Pero me hace una cosa extraña, me va dejando los datos pero el ultimo
introducido me lo guarda 2 veces. Si pongo el primer dato, me lo pone
2 veces, en este casi tengo un cuadro de texto que introduce
cantidades a la tabla, lo cual me lo duplica, supongo q sera porque al
mantener la información en los combos y refrescar, me lo pone
directamente en la tabla.

Donde me quedo perdido es si vale la pena utilizar algun codigo,
manera intermedia para guardar los datos , ya sea con SQL ( que no lo
llevo muy bien) o parecido.

Gracias por la atencion y saludos
j***@gmail.com
2007-03-02 08:28:48 UTC
Permalink
Gracias, estoy creando un recorset con Dao ( es lo único que me
acuerdo )

Lo que voy a comentar antes es como esta montado todo para que no haya
problemas.

Tengo una tabla llamada movimientos, en la cual voy a guardar entradas
de almacen ( es un ejemplo)
Tengo otra tabla con los articulos que voy a meter en el almacen
Tengo otra tabla con la ubicacion en el almacen ( estanterias, por
ejemplo, es un solo campo)
Una tabla con el tipo de entrada ( pongase como ejemplo entrada
ordinaria y extraordinaria, son 2 registros )

Ahora tengo un formulario que tiene lo siguiente:

Un combobox con el tipo de entrada que hacemos
Un textbox con la fecha ( funcion predeterminada fecha() )
Un combobox con la referencia del articulo,
Quiero poner al lado un combobox que apunte a la descripcion, y segun
lo que elijamos se rellene en el otro.
Textbox con la cantidad ( se mete a mano)
Textbox con el numero interno ( se mete a mano)
Otro combobox con la ubicación

Los combobox tienen el origen de datos una consulta que apunta a las
tablas relacionadas con los datos.

Ahora bien, me gustaria que, al introducir datos, se pudiera hacer de
forma múltiple, me explico.

Si lo dejamos de forma normal, y enlazamos el formulario con la tabla
movimientos y los combobox y txtbox con los campos, si seleccionamos
todo e introducimos los datos, se guarda de forma directa. si queremos
introducir otro tendriamos que cerrar y abrir el formulario.

Lo que me gustaria hacer, y realmente tengo medio conseguido, es que
seleccionemos los datos e introduzcamos las cantidades en combos y en
txtbox y con un command button registremos esos datos en la tabla,
dejándonos los datos en los combos y en los txtbox tal cual, de tal
forma que si quiero cambiar la cantidad o la ubicación, no tenga que
rellenarlo del todo.

Aki tengo el código que me sirve para "guardar" los datos, pero
resulta que me duplica el codigo del artículo en la tabla de hecho me
duplica el codigo del artículo que he introducido en último lugar:

Código del cmd

Private Sub Comando172_Click()
On Error GoTo Err_Comando172_Click

Dim db As DAO.Database
Dim rs As DAO.Recordset


Set db = CurrentDb
Set rs = db.OpenRecordset("MOVIMIENTOS", dbOpenDynaset)

rs.MoveFirst
rs.MoveLast
rs.AddNew
rs(0) = TIPO '(combobox)
rs(1) = FECHA
rs(2) = Cuadro_combinado125 '(combobox)
rs(3) = UBI '(combobox)
rs(4) = CANTIDAD
rs(5) = PALET
rs.Update
rs.MoveNext
Exit_Comando172_Click:
Exit Sub

Err_Comando172_Click:
MsgBox Err.Description
Resume Exit_Comando172_Click

End Sub
CarCar
2007-03-02 10:51:27 UTC
Permalink
Hola:

Creo que quieres inventar una rueda que Access ya tiene inventada.

1. En el formulario utiliza la propiedad "Origen del registro" para
incluir la tabla de Movimientos.

2. En la propiedad "Origen del control" de cada uno de los controles,
coloca el nombre que el campo tiene en la dicha tabla de Movimientos.

3. En el evento "Después de actualizar" del formulario incluye:

Me.TIPO.DefaultValue = "'" & Nz(Me.TxtTIPO, "") & "'"
Me.Fecha.DefaultValue = "'" & Nz(Me.TxtFecha, "") & "'"
...

Y ya tienes un formulario que hace lo que necesitas.

Saludos,
CarCar
Post by j***@gmail.com
Gracias, estoy creando un recorset con Dao ( es lo único que me
acuerdo )
Lo que voy a comentar antes es como esta montado todo para que no haya
problemas.
Tengo una tabla llamada movimientos, en la cual voy a guardar entradas
de almacen ( es un ejemplo)
Tengo otra tabla con los articulos que voy a meter en el almacen
Tengo otra tabla con la ubicacion en el almacen ( estanterias, por
ejemplo, es un solo campo)
Una tabla con el tipo de entrada ( pongase como ejemplo entrada
ordinaria y extraordinaria, son 2 registros )
Un combobox con el tipo de entrada que hacemos
Un textbox con la fecha ( funcion predeterminada fecha() )
Un combobox con la referencia del articulo,
Quiero poner al lado un combobox que apunte a la descripcion, y segun
lo que elijamos se rellene en el otro.
Textbox con la cantidad ( se mete a mano)
Textbox con el numero interno ( se mete a mano)
Otro combobox con la ubicación
Los combobox tienen el origen de datos una consulta que apunta a las
tablas relacionadas con los datos.
Ahora bien, me gustaria que, al introducir datos, se pudiera hacer de
forma múltiple, me explico.
Si lo dejamos de forma normal, y enlazamos el formulario con la tabla
movimientos y los combobox y txtbox con los campos, si seleccionamos
todo e introducimos los datos, se guarda de forma directa. si queremos
introducir otro tendriamos que cerrar y abrir el formulario.
Lo que me gustaria hacer, y realmente tengo medio conseguido, es que
seleccionemos los datos e introduzcamos las cantidades en combos y en
txtbox y con un command button registremos esos datos en la tabla,
dejándonos los datos en los combos y en los txtbox tal cual, de tal
forma que si quiero cambiar la cantidad o la ubicación, no tenga que
rellenarlo del todo.
Aki tengo el código que me sirve para "guardar" los datos, pero
resulta que me duplica el codigo del artículo en la tabla de hecho me
Código del cmd
Private Sub Comando172_Click()
On Error GoTo Err_Comando172_Click
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("MOVIMIENTOS", dbOpenDynaset)
rs.MoveFirst
rs.MoveLast
rs.AddNew
rs(0) = TIPO '(combobox)
rs(1) = FECHA
rs(2) = Cuadro_combinado125 '(combobox)
rs(3) = UBI '(combobox)
rs(4) = CANTIDAD
rs(5) = PALET
rs.Update
rs.MoveNext
Exit Sub
MsgBox Err.Description
Resume Exit_Comando172_Click
End Sub
Ju@nk
2007-03-02 15:12:47 UTC
Permalink
Para meter un registro, no precisas moverte por los registros existentes,
fijate en las líneas que te comento (')

Private Sub Comando172_Click()
On Error GoTo Err_Comando172_Click

Dim db As DAO.Database
Dim rs As DAO.Recordset


Set db = CurrentDb
Set rs = db.OpenRecordset("MOVIMIENTOS", dbOpenDynaset)

'rs.MoveFirst
'rs.MoveLast
rs.AddNew
rs(0) = me.TIPO '(combobox)
rs(1) = me.FECHA
rs(2) = me.Cuadro_combinado125 '(combobox)
rs(3) = me.UBI '(combobox)
rs(4) = me.CANTIDAD
rs(5) = me.PALET
rs.Update
'rs.MoveNext
'Hay que cerrar ;-)
rs.close
db.close
'y limpiar memoria
set rs = nothing
set db = nothing
Exit_Comando172_Click:
Exit Sub

Err_Comando172_Click:
MsgBox Err.Description
Resume Exit_Comando172_Click

End Sub

Tienes un control llamado FECHA, yo le cambiaría ese nombre, puede darte
problemas ya que FECHA = DATE que es una función de Access.
--
**
Colabora con el grupo, contesta a este mensaje y dinos si te sirvió o no la
respuesta dada.
Muchas gracias.

Salu2
***@nK [MVP Access] [DCE2003 ***] + VSTO [DCE2005 **]
Correos personales o preguntas particulares en mi grupo
http://groups.google.es/group/juank
www.juank.tk
www.mvp-access.com
¿Que es un MVP?, enterate en http://mvp.support.microsoft.com

Nota: El contenido de este mensaje, así como el código
fuente que pueda ir incluido en el mismo, se proporciona
«COMO ESTÁ», sin garantías de ninguna clase, y no otorga
derecho alguno. Usted asume cualquier riesgo al poner en
práctica, utilizar o ejecutar la sugerencia del presente mensaje.
**
<***@gmail.com> escribi� en el mensaje news:***@p10g2000cwp.googlegroups.com...
Gracias, estoy creando un recorset con Dao ( es lo único que me
acuerdo )

Lo que voy a comentar antes es como esta montado todo para que no haya
problemas.

Tengo una tabla llamada movimientos, en la cual voy a guardar entradas
de almacen ( es un ejemplo)
Tengo otra tabla con los articulos que voy a meter en el almacen
Tengo otra tabla con la ubicacion en el almacen ( estanterias, por
ejemplo, es un solo campo)
Una tabla con el tipo de entrada ( pongase como ejemplo entrada
ordinaria y extraordinaria, son 2 registros )

Ahora tengo un formulario que tiene lo siguiente:

Un combobox con el tipo de entrada que hacemos
Un textbox con la fecha ( funcion predeterminada fecha() )
Un combobox con la referencia del articulo,
Quiero poner al lado un combobox que apunte a la descripcion, y segun
lo que elijamos se rellene en el otro.
Textbox con la cantidad ( se mete a mano)
Textbox con el numero interno ( se mete a mano)
Otro combobox con la ubicación

Los combobox tienen el origen de datos una consulta que apunta a las
tablas relacionadas con los datos.

Ahora bien, me gustaria que, al introducir datos, se pudiera hacer de
forma múltiple, me explico.

Si lo dejamos de forma normal, y enlazamos el formulario con la tabla
movimientos y los combobox y txtbox con los campos, si seleccionamos
todo e introducimos los datos, se guarda de forma directa. si queremos
introducir otro tendriamos que cerrar y abrir el formulario.

Lo que me gustaria hacer, y realmente tengo medio conseguido, es que
seleccionemos los datos e introduzcamos las cantidades en combos y en
txtbox y con un command button registremos esos datos en la tabla,
dejándonos los datos en los combos y en los txtbox tal cual, de tal
forma que si quiero cambiar la cantidad o la ubicación, no tenga que
rellenarlo del todo.

Aki tengo el código que me sirve para "guardar" los datos, pero
resulta que me duplica el codigo del artículo en la tabla de hecho me
duplica el codigo del artículo que he introducido en último lugar:

Código del cmd

Private Sub Comando172_Click()
On Error GoTo Err_Comando172_Click

Dim db As DAO.Database
Dim rs As DAO.Recordset


Set db = CurrentDb
Set rs = db.OpenRecordset("MOVIMIENTOS", dbOpenDynaset)

rs.MoveFirst
rs.MoveLast
rs.AddNew
rs(0) = TIPO '(combobox)
rs(1) = FECHA
rs(2) = Cuadro_combinado125 '(combobox)
rs(3) = UBI '(combobox)
rs(4) = CANTIDAD
rs(5) = PALET
rs.Update
rs.MoveNext
Exit_Comando172_Click:
Exit Sub

Err_Comando172_Click:
MsgBox Err.Description
Resume Exit_Comando172_Click

End Sub
Loading...