[RESUELTO]DUPLICAR REGISTROS

Discute sobre las herramientas de la base de datos
Responder
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

[RESUELTO]DUPLICAR REGISTROS

Mensaje por James07 »

Hola, estoy diseñando una aplicación y me vendría muy bien poder duplicar algunos registros que van a tener básicamente los mismos datos, solo cambiando unos pocos campos. Desde el formulario sería lo ideal para facilitar su uso ya que al darle a "nuevo registro" logicamente se borra todo el formulario para recibir nuevos datos. La base de datos es Firebird.
Gracias!!
Última edición por James07 el Mar Dic 28, 2021 5:42 pm, editado 2 veces en total.
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: DUPLICAR REGISTROS

Mensaje por RMG »

Hola,

Si buscas en el foro de Base, encontraras ejemplos.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

Hola de nuevo, pues la verdad es que antes de hacer la consulta he buscado para no dar la lata innecesaramente pero lo que he visto o no se ajusta o no he comprendido bien lo que querían. Mi caso es sencillo de explicar, duplicar TODO el contenido de una fila de la BD (que se ve en un formjlaro) en un registro nuevo para poder cambiar solo algunos datos del nuevo (el que se ha generado y es copia). En mi caso es importante ya que muchos supuestos son casi iguales en todos los campos menos alguno/ os. Si me puedes indicar alguna respuesta que ya se haya dado me perece perfecto.
Gracias otra vez.
Un saludo
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: DUPLICAR REGISTROS

Mensaje por RMG »

Hola,

Dejo en este hilo, un pequeño ejemplo de uno de mis proyectos para quien pueda necesitar esta solución. Lo que hace, es recoger los datos de los campos de un formulario e insertar un nuevo registro en la tabla y por ultimo refrescar el formulario para ver ese nuevo registro.

Código: Seleccionar todo

'Duplica los datos de un responsable seleccionado
Sub DuplicarResponsable (Evento)'Evento boton
	Dim oStat As Object
	Dim sSQL As String
	Dim oForm As Object
	Dim iParcela As Integer
	Dim sNombre As String
	Dim sApellidos As String
	Dim sDNI As String
	Dim sTfno As String
	Dim sMovil As String
	Dim dFianza As Double
	Dim sEMail As String
	Dim sFNacimiento As String
	Dim sFExpedicion As String
	Dim sCiudad As String
	Dim sDomicilio As string
	Dim sNacionalidad As String
	Dim sMatricula As String
	Dim iOpcion As Integer
		oForm=Evento.Source.Model.Parent
		If oForm.IsNew Or oForm.IsAfterLast Then
			MsgBox "¡Atención! no se pueden cargar los datos si no estan grabados"
			Exit Sub
		End Sub
		iOpcion = MsgBox ("Con esta acción se duplicaran los datos del responsable, ¿Realmente deseas duplicarlos?",36,"Duplicar datos")
	If iOpcion = 6 Then
		iParcela = oForm.Columns.getByName("NParcela").Value
		sNombre = oForm.Columns.getByName("Nombre").String
		sApellidos = oForm.Columns.getByName("Apellidos").String
      	sDNI = oForm.Columns.getByName("DNI").String
      	sTfno = oForm.Columns.getByName("Tfno").String
      	sMovil = oForm.Columns.getByName("Movil").String
      	dFianza = oForm.Columns.getByName("Fianza").Value
      	sEMail = oForm.Columns.getByName("EMail").String
      	sFNacimiento = oForm.Columns.getByName("FNacimiento").String
      	sFExpedicion = oForm.Columns.getByName("FExpedicion").String
      	sCiudad = oForm.Columns.getByName("Ciudad").String
      	sDomicilio = oForm.Columns.getByName("Domicilio").String
      	sNacionalidad = oForm.Columns.getByName("Nacionalidad").String
      	sMatricula = oForm.Columns.getByName("Matricula").String
   		'Cargamos los datos con los valores de la ultima ocupación
    	oStat=ThisDatabaseDocument.CurrentController.ActiveConnection.CreateStatement
		sSQL = "INSERT INTO ""tabOcupaciones""(""NParcela"",""Nombre"",""Apellidos"",""DNI"",""Tfno"",""Movil"",""Fianza"","&_
		" ""EMail"",""FNacimiento"",""FExpedicion"",""Ciudad"",""Domicilio"",""Nacionalidad"",""Matricula"")"&_
		" VALUES (" & iParcela & ",'" & sNombre & "', '" & sApellidos & "', '" & sDNI & "', '" & sTfno & "',"&_
		" '" & sMovil & "', " & dFianza &	", '" & sEMail & "', '" & Format(sFNacimiento,"YYYY-MM-DD") & "', '" & Format(sFExpedicion,"YYYY-MM-DD") & "',"&_
		" '" & sCiudad & "', '" & sDomicilio &	"', '" & sNacionalidad & "', '" & sMatricula & "')"
		oStat.ExecuteUpdate(sSQL)
   	Else
   		MsgBox "Acción cancelada. No se ha cargado ningun dato",,"Acción cancelada"
   		Exit Sub
   	End If
   	oForm.Reload()	
End Sub

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

muchas gracias RMG!! voy a estudiarlo y ver si lo puedo aplicar.
Un saludo
Libre Office 6.4 en Windows 10
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

Hola de nuevo RMG. He estado estudiando el código de he me has indicado y tengo bastantes preguntas para intentar comprenderlo. No quisiera darte mucho la lata y a lo mejor, si no te es mucha molestia, sería mejor si pudiera verlo en un pequeño ejemplo, una tabla, un par de registros y un botón con la macro… lo analizaría y creo que podría entenderlo antes.
Si no puede ser, lo comprendo.
Muchas gracias!!
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: DUPLICAR REGISTROS

Mensaje por RMG »

Hola,

Ya te he pedido un pequeño ejemplo en otro hilo y no lo has preparado, tienes que procurar que no tengamos que partir de cero a los que te queremos ayudar.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

Perdón, pero no llegué a comprender la operativa. Efectivamente lo preparé pero como no me decidí al tema de los archivos externos por que iba a ser demasiada complicación y nula demanda pues ahí se quedó. Lo repaso y lo mando.
Mis disculpas por adelantado y agradecerte el trabajo que haces altruistamente por doomies como yo jajaja.
Un saludo muy cordial
Libre Office 6.4 en Windows 10
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

Hola de nuevo RMG. Aquí te adjunto un ejemplo que he llamado PRUEBA DUPLICADO con el código que mandaste. He intentado acoplarlo a la BD que he preparado pero no se como conectarla con el botón de prueba. No me aparece como macro el código.
Gracias por tu ayuda!
Un saludo.
Adjuntos
PRUEBADUPLICADO.rar
(10.88 KiB) Descargado 139 veces
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: DUPLICAR REGISTROS

Mensaje por RMG »

Hola,

Aquí tienes tu ejemplo funcionando, en el puedes ver como he modificado mi macro a tus datos.

Una recomendación que te hago para todas las BD en general que diseñes, evita poner tildes a los nombres de los campos, tipo número o teléfono etc, con ellos evitaras muchos problemas. A las etiquetas sí se los puedes poner sin problemas.

Saludos
Adjuntos
PRUEBADUPLICADO1.zip
(11.69 KiB) Descargado 150 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

Muchísimas gracias RMG por tu ayuda inestimable. Has tenido la amabilidad de adaptar el código al ejemplo que envié y por mi torpeza ni siguiera llevaba la macro que había preparado sobre el código que enviaste. Gracias nuevamente.
Solo por aprender más quería preguntarte cuando el código dice
Dim iOpcion As Integer
se está refiriendo al mensaje de aviso? ¿ y los valores 6 y 36 que salen en el código a que responden?
Gracias nuevamente y un afectuoso saludo.
Libre Office 6.4 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: DUPLICAR REGISTROS

Mensaje por RMG »

Hola,

Dim significa declarar una variable, iOption, el nombre de la variable, As Integer, el tipo de variable. En estos enlaces que te dejo puedes aprender mucho sobre ello.

https://wiki.open-office.es/Recursos_Basic

https://wiki.open-office.es/Basic

https://wiki.open-office.es/Base

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
James07
Mensajes: 78
Registrado: Sab Jul 04, 2020 12:15 pm

Re: DUPLICAR REGISTROS

Mensaje por James07 »

Gracias!!
Libre Office 6.4 en Windows 10
Responder