2009-03-26 56 views
7

Có cách nào trong MS-Access xóa dữ liệu trong tất cả các bảng cùng một lúc hay không. Chúng tôi chạy một cơ sở dữ liệu trong truy cập, lưu dữ liệu mỗi tháng và sau đó xóa tất cả các dữ liệu trong truy cập. Nhưng nó yêu cầu xóa dữ liệu từ nhiều bảng. Không phải là một cách đơn giản/dễ dàng hơn để làm như vậy?Làm thế nào để xóa dữ liệu trong tất cả các bảng truy cập ms cùng một lúc?

Trả lời

16

Tại sao bạn không giữ bản sao trống của cơ sở dữ liệu trên tay. Vào cuối tháng, lưu cơ sở dữ liệu hiện có, sau đó sao chép cơ sở dữ liệu rỗng vào vị trí của nó.

+0

này cũng đồng nghĩa với việc bạn làm không cần phải nhỏ gọn và sửa chữa. – Fionnuala

+0

Câu trả lời hay. Rất thực dụng. – JohnFx

+0

Và sau đó bạn phải sao chép bất kỳ bản sửa lỗi hoặc cải tiến nào trên cơ sở dữ liệu trống. Tôi đã làm điều đó một thời gian, nhưng nó rất dễ bị lỗi, không nói tẻ nhạt. Tôi sẽ cung cấp cho các giải pháp khác một thử. – mvbentes

0

Vì đây là một hành động lặp đi lặp lại, sẽ tốt hơn nếu bạn tạo một kịch bản SQL đơn giản để thực hiện việc này.

DELETE FROM <table1>; 
DELETE FROM <table2>; 
... 
DELETE FROM <tablen>; 
+3

Truy cập MS không cho phép có nhiều hơn một truy vấn DELETE trong tập lệnh. –

11

Câu trả lời của Craig rất đơn giản và hợp lý. Nếu bạn thực sự muốn có một giải pháp có lập trình, tập lệnh VBA sau sẽ xóa tất cả dữ liệu từ mọi bảng, trừ các bảng ẩn. Nó đòi hỏi DAO để được kích hoạt - trong Visual Basic Editor, vào Tools -> Tài liệu tham khảo, và đánh dấu vào Microsoft DAO 3.6 Thư viện Object, rồi nhấn OK:

Public Sub TruncateTables() 
'Majority of code taken from a data dictionary script I can no longer source nor find the author 

On Error GoTo Error_TruncateTables 

Dim DB As DAO.Database 
Dim TDF As DAO.TableDef 
Dim strSQL_DELETE As String 

Set DB = CurrentDb() 

    For Each TDF In DB.TableDefs 
     If Left(TDF.Name, 4) <> "MSys" Then 
      strSQL_DELETE = "DELETE FROM " & TDF.Name & ";" 
      DB.Execute strSQL_DELETE 
     End If 
    Next 

MsgBox "Tables have been truncated", vbInformation, "TABLES TRUNCATED" 
DB.Close 

Exit_Error_TruncateTables: 
    Set TDF = Nothing 
    Set DB = Nothing 
    Exit Sub 

Error_TruncateTables: 
    Select Case Err.Number 
     Case 3376 
      Resume Next 'Ignore error if table not found 
     Case 3270 'Property Not Found 
      Resume Next 
     Case Else 
      MsgBox Err.Number & ": " & Err.Description 
      Resume Exit_Error_TruncateTables 
    End Select 
End Sub 
0

Highlight tất cả các ROWS và sau đó nhấn phím Delete trên của bạn bàn phím. Nếu truy cập đang làm điều đó là nó không cho phép bạn đi đến phía dưới, sau đó đi vào một tế bào và bấm ctrl + mũi tên xuống. Để đánh dấu tất cả các hàng, hãy chọn hàng trên cùng và sau đó cuộn xuống hàng dưới cùng và giữ phím shift trong khi bạn chọn hàng dưới cùng. Tất cả các hàng phải được đánh dấu.

8

Câu trả lời hay từ Alistair, mặc dù nó cần được cập nhật. Câu lệnh if cũ sẽ gây ra lỗi và chuỗi động cũ sẽ không hoạt động trên các bảng có tên có không gian. Nó sẽ coi một cái tên như "thông tin cá nhân" là "người". Tôi đã cập nhật mã, cũng như làm cho nó dễ dàng hơn một chút để thêm ngoại lệ vào câu lệnh if, nếu bạn muốn một số bảng giữ lại dữ liệu của chúng.

Public Sub TruncateTables() 
    'Majority of code taken from a data dictionary script I can no longer source nor find the author 

    On Error GoTo Error_TruncateTables 

    Dim DB As DAO.Database 
    Dim TDF As DAO.TableDef 
    Dim strSQL_DELETE As String 

    Set DB = CurrentDb() 

     For Each TDF In DB.TableDefs 
      If Not (TDF.Name Like "MSys*" Or TDF.Name Like "~*" Or Len(TDF.Connect) > 0) Then 
       'This will prevent system, temporary and linked tables from being cleared 
       strSQL_DELETE = "DELETE FROM " & "[" & TDF.Name & "]" 
       DB.Execute strSQL_DELETE 
      End If 
     Next 

    MsgBox "Tables have been truncated", vbInformation, "TABLES TRUNCATED" 
    DB.Close 

    Exit_Error_TruncateTables: 
     Set TDF = Nothing 
     Set DB = Nothing 
     Exit Sub 

    Error_TruncateTables: 
     Select Case Err.Number 
      Case 3376 
       Resume Next 'Ignore error if table not found 
      Case 3270 'Property Not Found 
       Resume Next 
      Case Else 
       MsgBox Err.Number & ": " & Err.Description 
       Resume Exit_Error_TruncateTables 
     End Select 
    End Sub 
+1

Hãy chú ý! Điều này cũng sẽ xóa mọi bảng được liên kết. Tôi sẽ chỉnh sửa để thêm điều kiện 'Len (tdf.Connect) = 0' để ngăn chặn điều này. – mvbentes

0

này sẽ xóa tất cả dữ liệu từ tất cả các bảng trừ từ Hệ thống Bàn

Dim T As TableDef 
DoCmd.SetWarnings False 
For Each T In CurrentDb.TableDefs 
    If T.Name Like "d2s_*" Then 
     DoCmd.RunSQL "DELETE * FROM " & T.Name 
    End If 
Next T 
DoCmd.SetWarnings True 

cách tiếp cận khác: (Căn cứ vào Đề xuất của Christopher Duke)

Dim T As TableDef 
DoCmd.SetWarnings False 
For Each T In CurrentDb.TableDefs 
    If Not Left(T.Name, 4) = "MSys" Then 
     DoCmd.RunSQL "DELETE * FROM [" & T.Name & "]" 
    End If 
Next T 
DoCmd.SetWarnings True 
Các vấn đề liên quan