Página 1 de 1

[RESUELTO]DUPLICAR REGISTROS

Publicado: Jue Dic 02, 2021 4:18 pm
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!!

Re: DUPLICAR REGISTROS

Publicado: Jue Dic 02, 2021 7:02 pm
por RMG
Hola,

Si buscas en el foro de Base, encontraras ejemplos.

Saludos

Re: DUPLICAR REGISTROS

Publicado: Vie Dic 03, 2021 5:09 pm
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

Re: DUPLICAR REGISTROS

Publicado: Sab Dic 18, 2021 8:07 pm
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

Re: DUPLICAR REGISTROS

Publicado: Sab Dic 18, 2021 11:42 pm
por James07
muchas gracias RMG!! voy a estudiarlo y ver si lo puedo aplicar.
Un saludo

Re: DUPLICAR REGISTROS

Publicado: Dom Dic 19, 2021 5:27 pm
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!!

Re: DUPLICAR REGISTROS

Publicado: Dom Dic 19, 2021 6:56 pm
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

Re: DUPLICAR REGISTROS

Publicado: Lun Dic 20, 2021 12:04 pm
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

Re: DUPLICAR REGISTROS

Publicado: Vie Dic 24, 2021 11:54 am
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.

Re: DUPLICAR REGISTROS

Publicado: Vie Dic 24, 2021 1:13 pm
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

Re: DUPLICAR REGISTROS

Publicado: Dom Dic 26, 2021 11:34 pm
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.

Re: DUPLICAR REGISTROS

Publicado: Lun Dic 27, 2021 4:32 pm
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

Re: DUPLICAR REGISTROS

Publicado: Lun Dic 27, 2021 4:45 pm
por James07
Gracias!!