Difference between revisions of "Microsoft Access modSql"
Jump to navigation
Jump to search
Line 17: | Line 17: | ||
Dim strTable As String | Dim strTable As String | ||
Dim strAffected As String | Dim strAffected As String | ||
+ | Dim strResult As String | ||
lngResult = 0 | lngResult = 0 | ||
Line 24: | Line 25: | ||
Debug.Print strSql | Debug.Print strSql | ||
datStart = Now | datStart = Now | ||
− | Debug.Print "------------" | + | Debug.Print "+---------------------+" |
− | Debug.Print "Start | + | Debug.Print "| Start : " & Format(datStart, strFormatHms) & " |" |
End If | End If | ||
Line 44: | Line 45: | ||
DoEvents | DoEvents | ||
− | strAffected = "Records | + | strAffected = "| Records " |
Select Case .RecordsAffected | Select Case .RecordsAffected | ||
Case 1 | Case 1 | ||
Line 52: | Line 53: | ||
lngResult = 1 | lngResult = 1 | ||
Else | Else | ||
− | strAffected = "Last Id | + | strAffected = "| Last Id " |
End If | End If | ||
Case Else | Case Else | ||
Line 61: | Line 62: | ||
If isDebug Then | If isDebug Then | ||
− | Debug.Print "End | + | strResult = Format(lngResult, "#,##0") |
− | + | If Len(strResult) < 8 Then | |
− | Debug.Print "Duration | + | strResult = strResult & Space(8 - Len(strResult) + 1) & "|" |
− | Debug.Print strAffected & ": " & | + | End If |
− | Debug.Print "------------" | + | Debug.Print "| End : " & Format(Now, strFormatHms) & " |" |
+ | Debug.Print "| Duration : " & Format(Now - datStart, strFormatHms) & " |" | ||
+ | Debug.Print strAffected & ": " & strResult | ||
+ | Debug.Print "+---------------------+" | ||
Debug.Print "----------------------------------------" | Debug.Print "----------------------------------------" | ||
Debug.Print | Debug.Print |
Revision as of 12:57, 15 July 2010
Constants
Public Const strFormatSqlDate As String = "yyyy\-mm\-dd"
Public Const strFormatSqlDateCriterion As String = "\#yyyy\-mm\-dd\#"
executeSql
Public Function executeSql(strSql As String, Optional strDatabase As String = "") As Long
Dim lngResult As Long
Const strFormatHms As String = "hh:mm:ss"
Dim db As Database
Dim datStart As Date
Dim strErr As String
Dim strTable As String
Dim strAffected As String
Dim strResult As String
lngResult = 0
If isDebug Then
Debug.Print "----------------------------------------"
Debug.Print strSql
datStart = Now
Debug.Print "+---------------------+"
Debug.Print "| Start : " & Format(datStart, strFormatHms) & " |"
End If
If strDatabase = "" Or strDatabase = CurrentProject.FullName Then
Set db = CurrentDb
Else
Set db = OpenDatabase(strDatabase)
End If
With db
On Error GoTo handleExecuteError
If isDebug Then
.Execute strSql, dbFailOnError
Else
.Execute strSql
End If
On Error GoTo 0
DoEvents
strAffected = "| Records "
Select Case .RecordsAffected
Case 1
'Last inserted id
lngResult = .OpenRecordset("SELECT @@IDENTITY")(0)
If lngResult = 0 Then
lngResult = 1
Else
strAffected = "| Last Id "
End If
Case Else
'Number of affected records
lngResult = .RecordsAffected
End Select
End With
If isDebug Then
strResult = Format(lngResult, "#,##0")
If Len(strResult) < 8 Then
strResult = strResult & Space(8 - Len(strResult) + 1) & "|"
End If
Debug.Print "| End : " & Format(Now, strFormatHms) & " |"
Debug.Print "| Duration : " & Format(Now - datStart, strFormatHms) & " |"
Debug.Print strAffected & ": " & strResult
Debug.Print "+---------------------+"
Debug.Print "----------------------------------------"
Debug.Print
End If
executeSql = lngResult
Exit Function
handleExecuteError:
Select Case Err.Number
Case 3010:
'Table already exists
strErr = Err.Description
strTable = Mid( _
Err.Description, _
InStr(1, strErr, "'", vbTextCompare) + 1, _
InStrRev(strErr, "'", -1, vbTextCompare) - _
InStr(1, strErr, "'", vbTextCompare) - 1 _
)
DoCmd.Close acTable, strTable, acSaveNo
DoCmd.DeleteObject acTable, strTable
Resume
Case 2008:
'Table is open
DoCmd.Close acTable, strTable, acSaveNo
Resume
Case Else
strErr = Err.Number & " : " & Err.Description
Debug.Print "############"
Debug.Print "# ERR " & Err.Number & " : " & Err.Description
Debug.Print "# ABORT"
Debug.Print "############"
Debug.Print
If isDebug Then
Stop
End If
End Select
End Function
showSqlResult
Public Sub showSqlResult(strSql As String, Optional strQuery As String = "")
Dim dbs As Database
Dim qdf As QueryDef
If strQuery = "" Then
strQuery = "SQL Result"
End If
If existsQuery(strQuery) Then
DoCmd.DeleteObject acQuery, strQuery
End If
Set dbs = CurrentDb
Set qdf = dbs.CreateQueryDef(Name:=strQuery, SQLText:=strSql)
DoCmd.OpenQuery strQuery
Do While CurrentData.AllQueries(strQuery).IsLoaded
DoEvents
Loop
DoCmd.DeleteObject acQuery, strQuery
End Sub
getSqlAmount
Public Function getSqlAmount(cur As Currency) As String
Dim strResult As String
strResult = CStr(cur)
strResult = Replace( _
Expression:=strResult, _
Find:=",", _
Replace:=".", _
Compare:=vbTextCompare _
)
getSqlAmount = strResult
End Function
getSqlDate
Public Function getSqlDate(dat As Date) As String
Dim strResult As String
strResult = Format(dat, strFormatSqlDate)
getSqlDate = strResult
End Function
getSqlDateCriterion
Public Function getSqlDateCriterion(dat As Date) As String
Dim strResult As String
strResult = Format(dat, strFormatSqlDateCriterion)
getSqlDateCriterion = strResult
End Function