[RESUELTO] Copiar dato de una tabla a otra tabla

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Copiar dato de una tabla a otra tabla

Notapor tkmelter » Mar Ago 15, 2017 9:26 pm

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   Expandir vistaContraer vista
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
tkmelter
 
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

Re: Copiar dato de una tabla a otra tabla

Notapor mauricio » Mié Ago 16, 2017 5:41 am

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
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Copiar dato de una tabla a otra tabla

Notapor tkmelter » Mié Ago 16, 2017 7:08 pm

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   Expandir vistaContraer vista
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
tkmelter
 
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

Re: Copiar dato de una tabla a otra tabla

Notapor mauricio » Mié Ago 16, 2017 7:23 pm

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
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5787
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Copiar dato de una tabla a otra tabla

Notapor tkmelter » Jue Ago 17, 2017 6:44 pm

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) 75 veces
Libreoffice 5.3.4.2 (x64) - Debian Stretch
Libreoffice 5.3.4.2 (x64) - Windows 10
Avatar de Usuario
tkmelter
 
Mensajes: 4
Registrado: Mar Ago 15, 2017 9:02 pm

Re: Copiar dato de una tabla a otra tabla

Notapor RMG » Vie Ago 18, 2017 10:36 am

Hola,

Esta macro carga el DNI.
Código: Seleccionar todo   Expandir vistaContraer vista
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.6 y LibreOffice 5.4.5.1 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3488
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Copiar dato de una tabla a otra tabla

Notapor tkmelter » Vie Ago 18, 2017 4:12 pm

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


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados