Tipp 4.3 - DDL Funktionen DAO
Wie kann ich verschiedenen Datendefinitionsabfragen bezüglich der Feldbearbeitung unter DAO simulieren?
Mit dieser Funktion können Sie verschiedenen Datendefinitionsabfragen bezüglich der Feldbearbeitung unter DAO simulieren. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Hinweis: Durch spezielle Anweisungen können Sie diese Funktion erst ab Access 2000 einsetzen.
Beispiel:
Option Explicit Public Enum eAlterType atAdd = 1 atChange = 2 atDrop = 3 End Enum Public Enum eDataType dtBinary = 9 dtBoolean = 1 dtByte = 2 dtCurrency = 5 dtDate = 8 dtDouble = 7 dtInteger = 3 dtLong = 4 dtMemo = 12 dtSingle = 6 dtText = 10 dtCounter = 99 End Enum Public Function A2XDAOAlterField( _ peAlterType As eAlterType, _ psTable As String, _ psFieldName As String, _ peDataType As eDataType, _ Optional plLen As Long, _ Optional plStart As Long, _ Optional plCount As Long, _ Optional psDbs _ As String = vbNullString) _ As Integer '// ===================================================== '// Methode | Simulation der Datendefinitionsabfragen '// | bezüglich der Feldbearbeitung, wie z.B. '// | Hinzufügen eines Feldes, Ändern des '// | Feldtypes oder Löschen eines Feldes '// ----------------------------------------------------- '// Parameter | peAlterType - Feldbearbeitungsoption '// | psTable - Name der Tabelle '// | psFieldName - Name des neuen Feldes '// | peDataType - Datentyp '// | plLen - Optional die Länge eines '// | Textfeldes '// | plStart - Optional der Startwert '// | eines Counterfeldes '// | plCount - Optional die Schrittweite '// | eines Counterfeldes '// | psDbs - Optional Pfad & Name der DB '// | Hinweis - Die Enums eDataType und '// | eAlterType sollten vorab '// | auf Modulebene deklariert '// | sein! '// ----------------------------------------------------- '// Rückgabe | Integer - True = OK, False = Fehler '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ===================================================== ' Verweis auf DAO 3.6 Object Library muss gesetzt sein! On Error GoTo HandleErr Dim dbs As DAO.Database Dim sSql As String Dim sFieldType As String ' Datenbank öffnen If Len(psDbs) > 0 Then Set dbs = DAO.DBEngine.Workspaces(0).OpenDatabase(psDbs) Else Set dbs = CurrentDb End If ' Feldtype bestimmen sFieldType = A2XCheckFieldType(CInt(peDataType)) ' SQL-Syntax zusammen stellen sSql = "ALTER TABLE " & psTable Select Case peAlterType Case atAdd ' Hinzufügen sSql = sSql & " ADD COLUMN " & psFieldName & _ " " & sFieldType Case atChange ' Verändern sSql = sSql & " ALTER COLUMN " & psFieldName & _ " " & sFieldType Case atDrop ' Löschen sSql = sSql & " DROP COLUMN " & psFieldName End Select If peAlterType <> atDrop Then ' Falls Textfeld, wurde eine Länge angegeben If peDataType = dtText Then If plLen > 0 And plLen < 256 Then sSql = sSql & "(" & plLen & ")" End If ' Falls Counter, wurde ein Startwert angegeben ElseIf peDataType = dtCounter Then If plStart > 0 Then sSql = sSql & "(" & plStart ' Falls Startwert, wurde eine Schrittweite ' angegeben If plCount > 0 Then sSql = sSql & "," & plCount & ")" Else sSql = sSql & ")" End If End If End If End If dbs.Execute sSql A2XDAOAlterField = True HandleExit: On Error Resume Next If Not dbs Is Nothing Then dbs.Close: Set dbs = Nothing Exit Function HandleErr: Select Case Err.Number Case Else MsgBox "Fehler " & Err.Number & ": " & _ Err.Description, vbCritical, _ "basDao.A2XDAOAlterField" End Select Resume HandleExit End Function Public Function A2XCheckFieldType(piDataType As Integer) _ As String '// ===================================================== '// Methode | Ermittelt den SQL-Datentyp-Syntax '// ----------------------------------------------------- '// Parameter | piDataType - Angabe des Datentypes '// ----------------------------------------------------- '// Rückgabe | String - s.o. '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ===================================================== Dim sTmp As String Select Case piDataType Case dtBinary sTmp = "BINARY" Case dtBoolean sTmp = "BIT" Case dtByte sTmp = "BYTE" Case dtCurrency sTmp = "CURRENCY" Case dtDate sTmp = "DATE" Case dtDouble sTmp = "DOUBLE" Case dtInteger sTmp = "SMALLINT" Case dtLong sTmp = "LONG" Case dtMemo sTmp = "MEMO" Case dtSingle sTmp = "SINGLE" Case dtText sTmp = "TEXT" Case dtCounter sTmp = "COUNTER" End Select A2XCheckFieldType = sTmp End Function