Hi,
I am making a tool that has as a front end an Excel workbook and as a back end an Access DB. I am storing and processing the data at the DB. All the data processing and storing is triggered by buttons in the workbook, therefore I have a set of macros that runs queries in the DB. All the queries that I run are defined at the access data base.
Here the problem: I run the queries in the Excel macros by their names, and this sometimes works and sometimes not. Bellow a piece of my code.
--------------------------------------------------------------------------------------------------------------------------
Public Function EjecutarSQL(c As String) As Boolean
Dim cn As ADODB.Connection
Dim Path as String
Dim StrError As String
EjecutarSQL = True
On Error GoTo ADO_ERROR
If Not AbrirConexBD(cn) Then
EjecutarSQL = False
Exit Function
End If
cn.Execute c
If Not CerrarConexBD(cn) Then
EjecutarSQL = False
Exit Function
Else
Exit Function
End If
ADO_ERROR:
If Err <> 0 Then
StrError = "Error durante la ejecutión de la consulta " + c + ". Mensage técnico: " + Err.Description
MsgBox StrError
Err.Clear
EjecutarSQL = False
MsgBox "La consulta no fue realizada correctamente."
Exit Function
End If
End Function
--------------------------------------------------------------------------------------------------------------------------
Public Function AbrirConexBD(cn As ADODB.Connection) As Boolean
'Función para abrir la conexión a la BD
Dim Path As String
Dim StrError As String
AbrirConexBD = True
On Error GoTo ADO_ERROR
Set cn = New ADODB.Connection
Path = ActiveWorkbook.Path + "\"
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + _
"bdcc.accdb;Persist Security Info=False"
cn.Open
ADO_ERROR:
If Err <> 0 Then
StrError = "Error al abrir la conexión a la BD. Mensage técnico: " + Err.Description
MsgBox StrError
Err.Clear
AbrirConexBD = False
Exit Function
End If
End Function
--------------------------------------------------------------------------------------------------------------------------
Public Function CerrarConexBD(cn As ADODB.Connection) As Boolean
'Función para cerrar la conexión a la BD
Dim StrError As String
CerrarConexBD = True
On Error GoTo ADO_ERROR
If cn.State <> adStateClosed Then
cn.Close
End If
If Not cn Is Nothing Then Set cn = Nothing
ADO_ERROR:
If Err <> 0 Then
StrError = "Error al cerrar la conexión a la BD. Mensage técnico: " + Err.Description
MsgBox StrError
Err.Clear
CerrarConexBD = False
Exit Function
End If
End Function
--------------------------------------------------------------------------------------------------------------------------
In the function EjecutarSQL "c" is for example an Insert query defined in the DB and named C1, thus when I want to execute this query I write EjecutarSQL("C1") in my code, and not EjecutarSQL("Insert (x1, x2, x3) into ..."). I want to keep running the queries in this way because this gives me flexibility to modify my tool without modifying the code.
The error I sometimes get is in the line “cn.Execute c”, and the message is invalid SQL syntax.
Any idea or suggestion is welcomed. Thanks in advance.
Felipe99.
Bookmarks