Acest tutorial vă va învăța cum să lucrați cu tabelele de acces folosind VBA.
Accesați tabelele VBA
Pentru a începe, vom demonstra comenzile simple pentru lucrul cu Tables in Access. Mai târziu în acest tutorial vă vom arăta funcții complete dezvoltate profesional pentru lucrul cu tabele în Access.
Creați tabel
Acest cod va utiliza SQL pentru a crea un tabel numit „Table1” cu câmpurile „ID” și „Name”:
Dim table_name As String Dim câmpuri As String table_name = "Table1" fields = "([ID] varchar (150), [Name] varchar (150))" CurrentDb.Execute "CREATE TABLE" & table_name & fields
Închideți tabelul
Această linie de cod VBA va închide un tabel (salvând modificările):
DoCmd.Close acTable, "Table1", acSaveYes
Pentru a închide un tabel fără a salva:
DoCmd.Close acTable, "Table1", acSaveNo
Ștergeți tabelul
Acest cod va șterge un tabel (notă: mai întâi tabelul ar trebui închis):
DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"
Redenumiți tabelul:
Această linie de cod va redenumi un tabel de acces:
DoCmd.Rename "Table1", acTable, "Table1_New"
O altă opțiune este utilizarea proprietății TableDefs a unui obiect de bază de date.
Setați tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName
Tabel gol / gol
Acest cod VBA va goli un tabel:
DoCmd.RunSQL "DELETE * FROM" & "Table1"
Tăiați tabelul / ștergeți înregistrările
Această linie de cod VBA folosește SQL pentru a șterge înregistrările dintr-un tabel care îndeplinesc anumite criterii:
DoCmd.RunSQL ("DELETE * FROM" & "Table1" & "WHERE" & "num = 2")
Exportați tabelul în Excel
Pentru a exporta un tabel în Excel utilizați DoCmd.OutputTo metodă:
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
sau utilizați DoCmd.TransferSpreadsheet metodă:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c: \ temp \ ExportedTable.xls", True
Tabel de actualizare
Următorul cod va actualiza o înregistrare, fără a afișa mesajul de avertizare:
DoCmd.SetWarnings (Fals) DoCmd.RunSQL "Update ProductsT SET ProductsT.ProductName = 'Produs AAA' WHERE (((ProductsT.ProductID) = 1))"
Accesați funcțiile tabelului VBA
Exemplele de cod de mai sus sunt comenzile simple pe care le puteți utiliza pentru a interacționa cu tabele folosind VBA. Cu toate acestea, va trebui adesea să adăugați mult mai mult cod de susținere (inclusiv gestionarea erorilor) pentru a utiliza corect aceste comenzi. Mai jos veți găsi funcții de dezvoltare profesională pentru lucrul cu Tables în Access.
Înregistrări de tabel de numărare
Această funcție va număra numărul de înregistrări dintr-un tabel:
Funcție publică Count_Table_Records (TableName As String) As Integer On Error GoTo Err: Dim r As DAO.Recordset Dim c As Integer Set r = CurrentDb.OpenRecordset ("Select count (*) as rcount from" & TableName) .OpenRecordset If (r .EOF) Atunci c = 0 Altceva c = Nz (r! RCount, 0) Sfârșit Dacă Count_Table_Records = c Ieșire funcție Err: Apelați MsgBox („A apărut o eroare:„ & Err.Descriere, vbExclamare, „Eroare”) Finalizare funcție ' Exemplu de utilizare Private Sub Count_Table_Records_Example () MsgBox (Count_Table_Records ("Table1")) End Sub
Verificați dacă tabelul există funcție
Această funcție va testa dacă există un tabel, returnând TRUE sau FALSE:
Funcția publică TableExists (ByVal strTableName As String) Ca funcție booleană: Determinați dacă tabelul există într-o bază de date Access 'Argumente: strTablename: Numele tabelului pentru a verifica Dim tdf Ca DAO.TableDef La eroare Reîncepeți Set tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Funcția de sfârșit
Iată un exemplu al funcției utilizate:
Private Sub TableExists_Example () If VBA_Access_Checks.TableExists ("Table") = True Atunci MsgBox ("Table a fost găsit!") Altele MsgBox ("Table nu a fost găsit!") End If End Sub
Creați funcția de tabel
Această funcție va crea un tabel în Access VBA în baza de date curentă:
Funcție publică CreateTable (table_fields As String, table_name As String) As Boolean Dim strCreateTable As String Dim intCount As Integer Dim strFields () As String Dim strValues () As String Dim strInsertSQL As String Dim intCounter As Integer Dim intData As Integer On Error OnTo Err strFields = Split (table_fields, ",") strCreateTable = "CREATE TABLE" & table_name & "(" For intCounter = 0 To UBound (strFields) - 1 strCreateTable = strCreateTable & "[" & strFields (intCounter) & "] varchar ( 150), "Next If Right (strCreateTable, 1) =", "Then strCreateTable = Left (strCreateTable, Len (strCreateTable) - 1) strCreateTable = strCreateTable &") "End If CurrentDb.Execute strCreateTable intCounter = 0 intData = 0 If Err.Number = 0 Apoi CreateTable = Adevărat CreateTable = False End If Exit Function Err: CreateTable = False MsgBox Err.Number & "" & Err.Description Function
Această funcție va reveni ADEVĂRAT dacă tabelul este creat cu succes sau FALS dacă tabelul nu este creat.
Puteți apela funcția astfel:
Sub privat CreateTable_Example () Apelați CreateTable ("f1, f2, f3, f4", "ttest") Finalizați sub
Funcția de ștergere / eliminare tabel
Această funcție va șterge un tabel dacă există:
Funcția publică DeleteTableIfExists (TableName As String) Dacă nu este nul (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")) Apoi DoCmd.SetWarnings False DoCmd.Close acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print "Table" & TableName & "deleted …" DoCmd.SetWarnings True End If End Function
Puteți apela funcția astfel:
Sub privat DeleteTableIfExists_Example () Apel DeleteTableIfExists („Tabelul1”) Încheiere sub
Funcția tabelului gol
Această funcție va goli un tabel dacă există:
Funcția publică EmptyTable (TableName As String) Dacă nu este nul (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")) Apoi DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM" & TableName Debug.Print "Table" & TableName & "golit …" DoCmd.SetWarnings True End If End Function
Puteți apela funcția astfel:
Private Sub EmptyTable_Example () Apelați EmptyTable („Tabelul1”) Terminați sub
Redenumiți funcția tabelului
Această funcție VBA va redenumi un tabel:
Funcția publică RenameTable (ByVal strOldTableName As String, ByVal strNewTableName As String, opțional strDBPath As String) Ca boolean Dim db Ca DAO.Database Dim tdf Ca TableDef 'Trap pentru orice erori. La eroare Reluați Următorul 'Dacă numele bazei de date este gol … Dacă Trim $ (strDBPath) = "" Atunci' … apoi setați Db la Db curent. Setați db = CurrentDb () Altfel 'În caz contrar, setați Db la baza de date deschisă specificată. Setați db = DBEngine.Workspaces (0) .OpenDatabase (strDBPath) „Vedeți dacă a apărut o eroare. If Err Then 'MsgBox "Nu s-a putut găsi baza de date pentru a deschide:" & strDBPath RenameTable = Funcție de ieșire falsă End If End If If ObjectExists ("Table", strOldTableName, strDBPath) Apoi setați tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName db.Close RenameTable = True Else RenameTable = Încheiere falsă În cazul în care funcția Sfârșit Exemplu de utilizare Sub privat RenameTable_Example () Apel RenameTable ("table1", "table2") End Sub
Puteți apela funcția astfel:
Private Sub RenameTable_Example () Apel RenameTable ("table1", "table2") Termină sub
Tăiați / Ștergeți înregistrările din tabel
Această funcție va șterge înregistrările dintr-un tabel cu gestionarea erorilor:
Funcția publică Delete_From_Table (TableName as String, Criteria As String) On Error GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM" & TableName & "WHERE" & Criteria) DoCmd.SetWarnings True SubExit: Exit Function SubError: Delete_From_Table error: "& vbCrLf & Err.Number &": "& Err.Descriere Reluare SubExit End Function 'Exemplu de utilizare Public Sub Delete_From_Table_Example () Apel Delete_From_Table (" Table1 "," num = 2 ") End Sub
Exportați tabelul în Excel
Această linie de cod va exporta un tabel în Excel (o nouă foaie de calcul):
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
Sau puteți utiliza această funcție:
Funcție publică Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Exemplu de utilizare Sub Export_Table_Excel_Example () Export_Table_Excel ("Table1", "c: \ temp. Sfârșitul Sub
Codul de mai sus va fi exportat într-o nouă foaie de calcul. În schimb, puteți adăuga un tabel la o foaie de calcul existentă. Articolul nostru despre importul / exportul în Access VBA acoperă acest lucru în detaliu.
Adăugați / atașați înregistrări la un tabel
Această funcție va adăuga / adăuga o înregistrare la un tabel:
Funcție publică Append_Record_To_Table (TableName As String, FieldName As String, FieldValue As String) On Error GoTo SubError Dim rs As DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Set rs = CurrentDb.OpenRecordset (TableName) rs.AddNew rs .Value = FieldValue rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "RunSQL error:" & vbCrLf & Err.Number & ":" & Err.Description Resume SubExit End Function 'Exemplu de utilizare Private Sub Append_Record_To_Table_Example () Apelați Append_Record_To_Table ("Table1", "num", 3) End Sub
Adăugați înregistrare la tabelul din formular
Această funcție va adăuga o înregistrare la un tabel dintr-un formular:
Funcție publică Add_Record_To_Table_From_Form (TableName As String) On Error GoTo SubError Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset (TableName) rs.AddNew 'rs! [Field1] = Value1' rs! [Field2] = Value2 'rs Field3] = Value3 rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "Refresh_Form error:" & vbCrLf & Err.Number & ":" & Err.Description Function Function