Consultas de anexo y eliminación

Bueno mi pregunta se podrían dividir en 2. Primero tengo una tabla "zz_TblInformesGenerales" que me gustaría poder borrarle todos los registros. Claro que lo hago con una consulta de eliminación, no logro hacerlo por código. La idea es que al hacer click se borre todos los registros para poder anexar luego.
Y la segunda pregunta se relaciona mucho con la primera. Tengo 7 tablas con 7 consultas de anexo. Estas 7 tablas se anexan a "zz_TblInformesGenerales" con ciertas condiciones y parámetros. (Claro que las 7 tablas Son muy parecidas unas con las otras y la tabla "zz_TblInformesGenerales" tiene todos los campos de las 7 restantes) Mi idea encontrar alguna forma de que estas consultas se ejecuten por código o cualquier forma evitando tener que guardar las consultas, intente hacerlo con SQL pero no tengo idea.
Resumiendo. El usuario hace click en un botón, se borran los datos de la tabla y se anexan las 7 tablas a "zz_TblInformesGenerales"
Muchas Gracias
Los parámetros y las considiciones de las consultas: Les dejo el SQL de una que estoy utilizando, las 6 consultas restantes usan los mismos parámetros. Varían algunos campos
INSERT INTO [zz_TblInformes Generales] ( [Codigo de Gestión0], [Pendiente de Gestión], [Partida Com], [Nro PFP], [Cantidad de Cuotas Plan], [Cantidad de Cuotas Deuda], [Dia Carga], [Mes Carga], [Año Carga], Respuesta, Resultado, Objetivos, Observaciones, [Deuda Total], Usuario, [Tipo de llamado], Vinculo, Contacto, [Fecha Cita en Municipio], [Hora Inicio sistema], [Hora Fin sistema], [Registro Modificado], [Registro Modificado Por], [Registro Modificado El], [Fecha Re-Llamado], [Hora Re-Llamado], SerieFecha )
SELECT [04_Carga Datos (3)].[Codigo de Gestión0], [04_Carga Datos (3)].[Pendiente de Gestión], [04_Carga Datos (3)].[Partida Com], [04_Carga Datos (3)].[Nro PFP], [04_Carga Datos (3)].[Cantidad de Cuotas Plan], [04_Carga Datos (3)].[Cantidad de Cuotas Deuda], [04_Carga Datos (3)].[Dia Carga], [04_Carga Datos (3)].[Mes Carga], [04_Carga Datos (3)].[Año Carga], [04_Carga Datos (3)].Respuesta, [04_Carga Datos (3)].Resultado, [04_Carga Datos (3)].Objetivos, [04_Carga Datos (3)].Observaciones, [04_Carga Datos (3)].[Deuda Total], [04_Carga Datos (3)].Usuario, [04_Carga Datos (3)].[Tipo de llamado], [04_Carga Datos (3)].Vinculo, [04_Carga Datos (3)].Contacto, [04_Carga Datos (3)].[Fecha Cita en Municipio], [04_Carga Datos (3)].[Hora Inicio sistema], [04_Carga Datos (3)].[Hora Fin sistema], [04_Carga Datos (3)].[Registro Modificado], [04_Carga Datos (3)].[Registro Modificado Por], [04_Carga Datos (3)].[Registro Modificado El], [04_Carga Datos (3)].[Fecha Re-llamado], [04_Carga Datos (3)].[Hora Re-Llamado], [04_Carga Datos (3)].SerieFecha
FROM [04_Carga Datos (3)]
WHERE ((([04_Carga Datos (3)].[Pendiente de Gestión])=No) AND (([04_Carga Datos (3)].[Dia Carga])>=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![DiaDesde] And ([04_Carga Datos (3)].[Dia Carga])<=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![Hasta]) AND (([04_Carga Datos (3)].[Mes Carga])=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![MesInfo]) AND (([04_Carga Datos (3)].[Año Carga])=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![AñoInfo]));

1 Respuesta

Respuesta
1
Lo que pretendes es lanzar una serie de consultas consecutivas. Eso es fácil.
Supongamos que tu botón se llama btnEjecutar. Primero lanzaremos una consulta de borrado para eliminar el contenido de la tabla y después tendrás que lanzar el resto de consultas.
El mayor problema es que tu consulta es muy larga y quedaría muy poco legible. Para evitarlo puedes utilizar una variable de tipo texto a la cual asignas el contenido de tu consulta y después mandas ejecutar lo que contiene esa variable.
Lo mejor, un ejemplo:
Private Sub btnEjecutar_Click()
    Dim txt as string ' Definimos una sóla vez la variable que usaremos para construir la consulta
    ' Primero borramos el contenido de la tabla (llemémosla tabla1)
    Docmd. Runsql "delete from [zz_TblInformes Generales]"
    ' Ahora tenemos que insertar el resultado de las consultas
    ' Para ello tenemos que ejecutar el código SQL de la consulta de inserción
    ' Usando el 'alias' "a" en la tabla de tu consulta para que sea más sencilla.
    ' Para poner el alias, al crear la consulta, en la parte donde están las tablas,
' puedes ponerlo en las propiedades de cada tabla.
    ' Construimos la consulta
    txt = "INSERT INTO [zz_TblInformes Generales] ([Codigo de Gestión0],[Pendiente de Gestión],"
    txt = txt & "[Partida Com],[Nro PFP],[Cantidad de Cuotas Plan],[Cantidad de Cuotas Deuda],"
    txt = txt & "[Dia Carga],[Mes Carga],[Año Carga],Respuesta,Resultado,Objetivos,Observaciones,"
    txt = txt & "[Deuda Total],Usuario,[Tipo de llamado],Vinculo,Contacto,[Fecha Cita en Municipio],"
    txt = txt & "[Hora Inicio sistema],[Hora Fin sistema],[Registro Modificado],[Registro Modificado Por],"
    txt = txt & "[Registro Modificado El],[Fecha Re-Llamado],[Hora Re-Llamado],SerieFecha ) "
    txt = txt & "SELECT a.[Codigo de Gestión0],a.[Pendiente de Gestión],a.[Partida Com],a.[Nro PFP],"
    txt = txt & "a.[Cantidad de Cuotas Plan],a.[Cantidad de Cuotas Deuda],a.[Dia Carga],a.[Mes Carga],"
    txt = txt & "a.[Año Carga],a.Respuesta,a.Resultado,a.Objetivos,a.Observaciones,a.[Deuda Total],a.Usuario,"
    txt = txt & "a.[Tipo de llamado], a.Vinculo, a.Contacto, a.[Fecha Cita en Municipio], a.[Hora Inicio sistema],"
    txt = txt & "a.[Hora Fin sistema],a.[Registro Modificado],a.[Registro Modificado Por],a.[Registro Modificado El],"
    txt = txt & "a.[Fecha Re-llamado],a.[Hora Re-Llamado],a.SerieFecha "
    txt = txt & "FROM [04_Carga Datos (3)] as a "
    txt = txt & "WHERE (((a.[Pendiente de Gestión])=No) AND "
    txt = txt & "((a.[Dia Carga])>=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![DiaDesde] And "
    txt = txt & "(a.[Dia Carga])<=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![Hasta]) AND "
    txt = txt & "((a.[Mes Carga])=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![MesInfo]) AND "
    txt = txt & "((a.[Año Carga])=[Formularios]![00_Formulario Principal]![SubForm].[Form]![Secundario25].[Form]![AñoInfo]))"
    ' Y ejecutamos la primera consulta
    Docmd. Runsql txt
    ' Aquí insertarías el código y la ejecución de la segunda consulta, la tercera, etc...
End Sub
Gracias por la respuesta, pero me surgen dudas.
1.- Al eliminar los datos me pregunta si estoy seguro de eliminarlos, ¿eso se puede evitar? Digamos como que siempre sea un si.
2.- ¿Entendí lo de la consulta en sql pero lo del alias no. Que seria? ¿Una expresión dentro de la consulta?
3.- ¿Una ves hecho esto puedo borrar las consultas?
Gracias nuevamente
El que te pregunte si quieres eliminar los registros o no es porque en "Herramientas - Opciones" tienes puesto que se confirme las consultas de acciones.
Tienes dos opciones: cambiarlo directamente en herramientas - opciones (modificar/buscar), o bien utilizando el código que te pongo al final de esta respuesta. Este código lo deberías incluir en un nuevo módulo y en el código de ayer cambiarías las líneas que ponen 'docmd.runsql ...' por 'ejecutarSQL ...'.
Lo del alias.
Cuando en una consulta se utilizan varias tablas es conveniente utilizar un 'alias' (como un mote) para cada una de ellas.
Eso se hace en la cláusula 'FROM' poniendo algo así: "FROM facturas AS f". Con esta instrucción la tabla de facturas tendría como alias "f" y en lugar de tener que escribir continuamente 'facturas. ' Para indicar que se refiere a dicha tabla, escribiremos 'f.'. Con ello el código es más corto y más sencillo de leer.
De todas formas, si no utilizas los alias no pasa nada. Es sólo para simplificar pero funciona exactamente igual de las dos formas.
Respecto a tus consultas. Una vez que tengas todas las consultas en código SQL, no es necesario que las conserves en tu base de datos.
El código que necesitarías para que Access no te de los mensajes de confirmación es el siguiente:
Option Compare Database
Option Explicit
Global gblLeidasOpciones As Boolean
Global gblConfirmarConsultas As Boolean
Global gblConfirmarDocumentos As Boolean
Sub LeeOpciones()
    gblConfirmarConsultas = GetOption("Confirm Action Queries")
    gblConfirmarDocumentos = GetOption("Confirm Document Deletions")
    gblLeidasOpciones = True
End Sub
Sub EjecutarSQL(ByVal sSql As String)
    If Not gblLeidasOpciones Then LeeOpciones
    ' Desactivamos las confirmaciones durante la ejecución del SQL
    If gblConfirmarConsultas Then SetOption "Confirm Action Queries", False
    If gblConfirmarDocumentos Then SetOption "Confirm Document Deletions", False
    DoCmd.RunSQL sSql
    ' Volcemos a activarlas si lo estaban antes
    If gblConfirmarConsultas Then SetOption "Confirm Action Queries", True
    If gblConfirmarDocumentos Then SetOption "Confirm Document Deletions", True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas