[RESUELTO] Copiar dato de una tabla a otra tabla

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
tkmelter
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

[RESUELTO] Copiar dato de una tabla a otra tabla

Mensaje por tkmelter »

Buenas tardes.
Primeramente dar las gracias a todos los que compartis y ayudais a los novatos como yo, y gracias por todos esos manuales y ejemplos de aplicaciones.

Me encuentro trabado en lo siguiente:
- Tengo una tabla en la que la clave primaria es el campo "DNI" y en la que grabo las nuevas altas de personal
- Ademas de esta, tengo otras cinco tablas enlazadas con la primera por clave primaria tambien "DNI"
- Necesito "insertar", "copiar"... cuando grabo una nueva alta el dato "DNI" en el resto de tablas.

Lo he intentado con esta subrutina:

Código: Seleccionar todo

Sub InsertDNIToOtherTables()

	Dim oDBC As Object
	Dim oBD As Object
	Dim oConexion As Object
	Dim oDeclaracion As Object
	Dim sSQL0 As String, sSQL1 As String, sSQL2 As String, sSQL3 As String, sSQL4 As String, sSQL5 As String, sSQL6 As String
	Dim oDoc As Object
	Dim oDrawpage As Object
	Dim oForm As Object
	Dim oCtrlDNI As Object
	Dim oCtrlButActualizarTablas As Object
	Dim Resultado As String
	
	'Ordenes SQL a ejecutar
	'sSQL0 = "INSERT INTO ""tblAccAdmPreZO"" (""DNI"") VALUES ('" & sDNI & "')"
	sSQL0 = "INSERT INTO ""tblAccAdmPreZO"" (""DNI"") SELECT (""DNI"") FROM ""tblDBFCivil"" WHERE ""DNI"" = ('" & sDNI & "')"
	sSQL1 = "INSERT INTO ""tblBajMed"" (""DNI"") VALUES ('" & sDNI & "')"
	sSQL2 = "INSERT INTO ""tblComisiones"" (""DNI"") VALUES ('" & sDNI & "')"
	sSQL3 = "INSERT INTO ""tblConPruPsi"" (""DNI"") VALUES ('" & sDNI & "')"
	sSQL4 = "INSERT INTO ""tblConRecMed"" (""DNI"") VALUES ('" & sDNI & "')"
	sSQL5 = "INSERT INTO ""tblDBFMilitar"" (""DNI"") VALUES ('" & sDNI & "')"
	sSQL6 = "INSERT INTO ""tblSitLisRev"" (""DNI"") VALUES ('" & sDNI & "')"
	'Creamos el servicio para acceder y manipular las bases de datos
	oDBC = createUnoService("com.sun.star.sdb.DatabaseContext")
	'Nos aseguramos de que exista la base de datos
	If oDBC.hasByName( sBaseDatos ) Then
		'Si existe, accedemos por el nombre
		oBD = oDBC.getByName( sBaseDatos )
		'Creamos una conexion a la base de datos
		oConexion = oBD.getConnection("","")
		'Creamos un objeto para las instrucciones SQL
		oDeclaracion = oConexion.createStatement()
		'*** OBTENEMOS EL NUMERO DE DNI ********************************************
		Call getDNI()
		MsgBox sDNI
		'Ejecutamos la inserción de datos
		Resultado = oDeclaracion.executeUpdate( sSQL0 )
		MsgBox Resultado
		oDeclaracion.executeUpdate( sSQL1 )
		oDeclaracion.executeUpdate( sSQL2 )
		oDeclaracion.executeUpdate( sSQL3 )
		oDeclaracion.executeUpdate( sSQL4 )
		oDeclaracion.executeUpdate( sSQL5 )
		oDeclaracion.executeUpdate( sSQL6 )
		MsgBox "Aparentemente todo ha terminado de forma correcta."
		Else
			MsgBox "La base de datos no existe."
	End If

End Sub
- La instruccion "sSQL0 = "INSERT INTO ""tblAccAdmPreZO"" (""DNI"") VALUES ('" & sDNI & "')"" me da error y esta
"sSQL0 = "INSERT INTO ""tblAccAdmPreZO"" (""DNI"") SELECT (""DNI"") FROM ""tblDBFCivil"" WHERE ""DNI"" = ('" & sDNI & "')" me retorna "0" como valor de retorno pero no da error.

Ninguna de las dos me funciona. Se que el código no esta todo lo optimizado que debiera pero estoy empezando y de momento voy como puedo.

Gracias, espero haberme explicado como debiera.

Salu2.
Última edición por tkmelter el Vie Ago 18, 2017 4:14 pm, editado 1 vez en total.
Libreoffice 5.3.4.2 (x64) - Debian Stretch
Libreoffice 5.3.4.2 (x64) - Windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar dato de una tabla a otra tabla

Mensaje por mauricio »

Siempre es bueno mostrar el error que obtienes. Un archivo de ejemplo donde se vea el problema, ayuda a quien quiera ayudarte a no partir de cero.

Ahora, las relaciones uno a uno "solo" se justifican en algunos casos. ¿haz evaluado por que las requieres en cinco tablas más?

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
tkmelter
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

Re: Copiar dato de una tabla a otra tabla

Mensaje por tkmelter »

Buenas tardes.
Gracias por tu rápida respuesta.
Aquí esta el error y las relaciones entre dos de ellas. La de la derecha es en la que grabo la nueva alta de personal.

Ejecutando la sentencia SQL:

Código: Seleccionar todo

INSERT INTO "tblAccAdmPreZO" ("DNI") SELECT ("DNI") FROM "tblDBFCivil" WHERE "DNI" = ('33333333A')
desde "Herramientas-->SQL" funciona perfectamente.

La verdad no he pensado mucho en lo que me dices de las relaciones uno a uno. El diseño obedece a la búsqueda de la sencillez en el tratamiento de los datos o la comodidad de trabajar con tablas sencillas, muchas tablas pero con pocos datos eludiendo mezclar información sin relación.
Gracias de nuevo.
Libreoffice 5.3.4.2 (x64) - Debian Stretch
Libreoffice 5.3.4.2 (x64) - Windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar dato de una tabla a otra tabla

Mensaje por mauricio »

El mensaje es bastante claro, hay una violación de integridad... probablemente el mismo DNI que intentas insertar... reitero un archivo donde se ve al problema será mejor para ayudarte.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
tkmelter
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

Re: Copiar dato de una tabla a otra tabla

Mensaje por tkmelter »

Buenas tardes y gracias por tu tiempo.

Te adjunto archivo. Por favor usa click sobre boton, no esta depurada el aceptar con la tecla enter o intro.

Salu2.
Adjuntos
BDvacia.7z
(62.88 KiB) Descargado 307 veces
Libreoffice 5.3.4.2 (x64) - Debian Stretch
Libreoffice 5.3.4.2 (x64) - Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Copiar dato de una tabla a otra tabla

Mensaje por RMG »

Hola,

Esta macro carga el DNI.

Código: Seleccionar todo

Sub InsertDNIToOtherTables(Evento)

	Dim oDeclaracion As Object
	Dim sSQL As String
	Dim oForm As Object
	Dim sDNI As String
	oForm = Evento.Source.Model.Parent
	sDNI = oForm.getByName("pftDNI").Text
	oDeclaracion = ThisDatabaseDocument.CurrentController.ActiveConnection.CreateStatement
	'Ordenes SQL a ejecutar
	sSQL = "INSERT INTO ""tblBajMed"" (""DNI"") VALUES ('" & sDNI & "')"
	oDeclaracion.executeUpdate( sSQL )
	sSQL = "INSERT INTO ""tblSitLisRev"" (""DNI"") VALUES ('" & sDNI & "')"
	oDeclaracion.executeUpdate( sSQL )

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)
Avatar de Usuario
tkmelter
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

Re: Copiar dato de una tabla a otra tabla

Mensaje por tkmelter »

Buenas tardes.

Impresionante no, lo siguiente. Me siento muy agradecido a los dos. Estudiaré el código a ver si saco alguna conclusión.

Salu2.
Libreoffice 5.3.4.2 (x64) - Debian Stretch
Libreoffice 5.3.4.2 (x64) - Windows 10
Responder