** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Consultas: DoCmd.RunSQL a CurrentDb.Execu
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoConsultas: DoCmd.RunSQL a CurrentDb.Execu

 Responder Responder
Autor
Mensaje
calucasanta Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Mayo/2007
Localización: Guatemala
Estado: Sin conexión
Puntos: 299
Enlace directo a este mensaje Tema: Consultas: DoCmd.RunSQL a CurrentDb.Execu
    Enviado: 05/Febrero/2011 a las 17:04
Saludos a todos!!
 
me encuentro ejecutando consultas DoCmd.RunSQL, y las que he podido las he realizado en CurrentDb.Execute, que es un método bastante rápido, ncesito convertir una consulta que ejecuto con DoCmd.RunSQL a CurrentDb.Execute.
 
detallo consulta RunSQL:
 
necesito borrar registros de detalles de una partida contable, que dependen de una llave principal
 
 
tengo una consulta llamada:qry_Temp_CrossDiario_PartidasAEliminarAux
 

 
SELECT tbl_ContaLibroDiarioPartidas.NoPartida, tbl_ContaLibroDiarioPartidas.Año, tbl_ContaLibroDiarioPartidas.IdConvenio, tbl_ContaLibroDiarioPartidas.Fecha
FROM tbl_ContaLibroDiarioPartidas
WHERE (((tbl_ContaLibroDiarioPartidas.IdConvenio)=[forms]![frm_Cross_Menu_PANELCENTRAL]![Idconvenio]) AND ((tbl_ContaLibroDiarioPartidas.Fecha) Between [forms]![frm_Cross_Menu_PANELCENTRAL]![del] And [forms]![frm_Cross_Menu_PANELCENTRAL]![al]));
 
 
luego desde VBA, ejecuto un runsql:
 
 

'Borro el detalle de las partidas del mes o período.....
DoCmd.RunSQL "DELETE tbl_ContaLibroDiarioDetalles.[NoPartida], tbl_ContaLibroDiarioDetalles.Año, tbl_ContaLibroDiarioDetalles.IdConvenio, * " & _
"FROM tbl_ContaLibroDiarioDetalles " & _
"WHERE (((tbl_ContaLibroDiarioDetalles.[NoPartida]) In (Select NoPartida From qry_Temp_CrossDiario_PartidasAEliminarAux)) AND ((tbl_ContaLibroDiarioDetalles.Año) In (Select Año From qry_Temp_CrossDiario_PartidasAEliminarAux)) AND ((tbl_ContaLibroDiarioDetalles.IdConvenio) In (Select IdConvenio From qry_Temp_CrossDiario_PartidasAEliminarAux))); "
 
 
luego de la enterior ejecución, borro las partidas: (aquí me da un error, aunque el problema no es aquí... )
 

'Borro las partidas del mes o período....
CurrentDb.Execute "DELETE NoPartida, Año, IdConvenio, Fecha " & _
"FROM tbl_ContaLibroDiarioPartidas " & _
"WHERE CDbl(Fecha) Between " & CDbl(Forms!frm_Cross_Menu_PANELCENTRAL!Del) & " And " & CDbl(Forms!frm_Cross_Menu_PANELCENTRAL!Al) & " And " & " IdConvenio = " & Forms!frm_Cross_Menu_PANELCENTRAL!IdConvenio
 
 
el error que me da es el 3362, el cual indica que no se pueden borrar las partidas, debido a que todavía existen detalles de las mismas...
 
entonces... si convierto la primera y segunda consulta para que pueda ejecutarlo desde CurrentDb.Execute me dajaría de dar ese error, pero, tengo el problema de no saber cómo integrar las consulta en una.
 
en mis intentos he logrado realizar la primera consulta así: (aunque no sé como integrarla a la segunda consulta)
 

 
Dim strSqlBorraDetallesPdas As String
 
 strSqlBorraDetallesPdas = "SELECT tbl_ContaLibroDiarioPartidas.NoPartida, tbl_ContaLibroDiarioPartidas.Año, tbl_ContaLibroDiarioPartidas.IdConvenio, tbl_ContaLibroDiarioPartidas.Fecha " & _
                              "FROM tbl_ContaLibroDiarioPartidas " & _
                              "WHERE ((tbl_ContaLibroDiarioPartidas.Fecha) Is Not Null) AND CDbl(Fecha) Between " & CDbl(Forms!frm_Cross_Menu_PANELCENTRAL!Del) & " And " & CDbl(Forms!frm_Cross_Menu_PANELCENTRAL!Al) & " And " & " tbl_ContaLibroDiarioPartidas.IdConvenio = " & Forms!frm_Cross_Menu_PANELCENTRAL!IdConvenio & "; "
 
¿podrían darme algunas ideas, comentarios o ejemplos? para resolver este problema...
 
gracias de antemano
 
 Carlos Santa María
Guatemala Centro América


Editado por calucasanta - 05/Febrero/2011 a las 17:13
Carlos Santa Marí­a
Guatemala Centro América
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18830
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:13
Hola!
 
No entiendo nada, ejecutar una consulta con DoCmd.RunSQL o con CurrentDB.Execute en principio no supone ninguna diferencia.
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
calucasanta Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Mayo/2007
Localización: Guatemala
Estado: Sin conexión
Puntos: 299
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:16
saludos emilio!!
 
pues bien he tenido bastante diferencia, runsql se ejecuta más lento mientras currentdb.execute, es más rápido y creo que espera terminar con su ejecución antes de pasar a la siguiente línea de código, mientras que la primera no, por eso me da ese error.
 
espero tus comentarios
Carlos Santa Marí­a
Guatemala Centro América
Arriba
Tikimore Ver desplegable
Moderador
Moderador


Unido: 02/Enero/2008
Localización: España
Estado: Sin conexión
Puntos: 1519
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:17

Hola sin terminar de entender esto:

"necesito borrar registros de detalles de una partida contable, que dependen de una llave principal"
 
Te puedo decir que cuando uno borra un registro lo que hace es borrar el valor de todos los campos y por ende, el registro.
 
Si tu haces un DELETE campo1,Campo2,Campo3 lo que te hace es borrar el valor del campo pero si existen más el registro permanece con los valores de los otros campos por lo que no estamos borrandolo.
 
Para borrarlo debes hacer un DELETE *
 
Un saludo.
 
Edito lo expuesto ya que esto no es de Access y lo he probado en Access y da igual que se ponga * o nombres de campos porque lo que al final hace es eliminar el registro por completo.
 


Editado por Tikimore - 05/Febrero/2011 a las 17:25
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18830
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:21
A lo que me refiero es a que es indiferente que en una linea de codigo reemplaces DoCmd.RunSQL por CurrentDB.Execute.
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
calucasanta Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Mayo/2007
Localización: Guatemala
Estado: Sin conexión
Puntos: 299
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:26
saludos Tikimore!!
 
bueno, hablemos que tenemos 5 negocios en la base de datos, cada uno con una contabilidad con sus propias partidas y detalles, el periodo fiscal para ellos es del 01 de enero al 31 de diciembre del mismo año.
 
y si necesito actualizar un negocio nada más, en base a cheques o facturas que tengo en otra tabla, através de otras consultas se hacen las partidas (consulta de datos anexados), pero, para poderlos pasar, necesito borrarlos.
 
por ejemplo de una partida:
partida 415, el día 05 de noviembre 2010 se vendio mercadería por $100.00
 
el ejemplo de un detalle de esa partida sería:
Banco XX                                 $100.00
     a Ventas de mercaderías                  $ 100.00
 
y lo que necesito es borrar tanto el detalle como la partida, ojo a esto, hay más negocios y más periódos incluso de este cliente, por eso solo necesito trabajar un periódo y un negocio.
 
espero tus comentarios.
 
Carlos Santa Marí­a
Guatemala Centro América
Arriba
calucasanta Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Mayo/2007
Localización: Guatemala
Estado: Sin conexión
Puntos: 299
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:30
perdón a todos!
 
talvez el error o la mala interpretación es que no he dicho que estas tablas son de mysql y que están vinculadas a access 2007.
 
espero sus comentarios
Carlos Santa Marí­a
Guatemala Centro América
Arriba
Tikimore Ver desplegable
Moderador
Moderador


Unido: 02/Enero/2008
Localización: España
Estado: Sin conexión
Puntos: 1519
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:33
Según estoy entendiendo tienes en unas tablas la partidas y en otras los detalles.
 
Si eso es así y deseas borrarlo todo creo que debes eliminar el detalle para luego proceder a eliminar la partida ya que en caso contrario te da el error que comentas.
 
Pero esto ya lo contempla Access cuando haces las relaciones de tabla, se llama "Exigir Integridad referencial" y puede ser en la Actualización, en la eliminación o en ambas.
 
De ésta forma sólo debes preocuparte de eliminar el registro superior que en tu caso serían las partidas ya que los detalles se eliminarían automáticamente.
 
Un saludo.
Arriba
Tikimore Ver desplegable
Moderador
Moderador


Unido: 02/Enero/2008
Localización: España
Estado: Sin conexión
Puntos: 1519
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:34
Acabo de postearte y ahora nos cuentas que se trata de MySQL.Cry
 
En ese lugar la relación y la integridad referencias debes hacerla en MySQL.
 
Un saludo.
Arriba
calucasanta Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Mayo/2007
Localización: Guatemala
Estado: Sin conexión
Puntos: 299
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 17:44
saludos Tikimore!!
 
gracias por tus comentarios, sin embargo, ya intenté solamente borrar partidas pero, no respeta, siempre mantiene los detalles.
 
cómo hago para ver si esta correctamente las relaciones en mysql a través de phpmyadmin?
 
Carlos Santa Marí­a
Guatemala Centro América
Arriba
Tikimore Ver desplegable
Moderador
Moderador


Unido: 02/Enero/2008
Localización: España
Estado: Sin conexión
Puntos: 1519
Enlace directo a este mensaje Enviado: 05/Febrero/2011 a las 19:12
Yo no trabajo con MySQL por lo que no puedo ayudarte pero no creo que sea muy complicado.
 
Un saludo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable