Tablo Oluşturmadan Önce Eskisini Varsa Kontrol Etmek

1 2
01/02/2020, 19:48

feraz

Evet.
Dictionary içine alıyor tablo adlarını.

Yani alttaki gibi uzun kod ilede olabilir kısa yoldan ekledim kodu.

İf Scr.exists .......
Scr.add .......
01/02/2020, 21:51

feraz

Alttaki kodlar işinizi görür bence.
Mantık şu;

Eğer Foo adında tablo yoksa Foo adında tablo oluşturur.

Eğer Foo  adında tablo varsa ve alan sayısı eşit değil yada alan adları farklıysa mesaj verir.
Ve Foo tablosu silinir ve koddaki create table ile Foo tablosu oluşturulur.

Bir buton Click olayına  test kodunu ekleyin.


Option Compare Database

Const alansayisi As Integer = 2 'Foo alan sayisi create ile elde edilen
Const strSQLCreateFoo_c As String = _
          "CREATE TABLE Foo" & _
          "(" & _
          "MyField1 INTEGER," & _
          "MyField2 Text(10)" & _
          ");"

Sub test()

    Dim rs As DAO.Recordset
    Dim n As Long
    Dim scr As New Scripting.Dictionary
    Dim arr
   
    arr = Array("MyField1", "MyField2")
   
    If Not TableExists("foo") Then
        CurrentDb.Execute strSQLCreateFoo_c
    End If
   
    Set rs = CurrentDb.OpenRecordset("Foo")
   
    With scr
        For n = 0 To rs.Fields.Count - 1
            .Add rs.Fields(n).name, ""
        Next
    End With

'--------------------------------------------------------------------------------------------

   
    If Join(arr, "|") <> Join(scr.Keys, "|") Or scr.Count <> 2 Then
        MsgBox "Tablolar farkli yapida degil.Tablo silinecek", vbCritical, "Hata"
        GoTo var
    End If
   
      Set rs = Nothing
      Erase arr
      Set scr = Nothing
     
    Exit Sub
var:
    Set scr = Nothing
    Set rs = Nothing
    Erase arr
    DoCmd.DeleteObject acTable, "Foo"
    CurrentDb.Execute strSQLCreateFoo_c
   

End Sub



Private Function TableExists(ByVal name As String) As Boolean
    On Error Resume Next
    TableExists = LenB(CurrentDb.TableDefs(name).name)
End Function
01/02/2020, 23:42

accessman

Evet istediğimde buydu deneyeceğim teşekkürler
02/02/2020, 00:01

feraz

(01/02/2020, 23:42)accessman yazdı: Evet istediğimde buydu deneyeceğim teşekkürler

Kod:
If Join(arr, "|") <> Join(scr.Keys, "|") Or scr.Count <> 2 Then

Yukarıdaki 2 yernine const ile tanımladığım alansayisi  gelecekti unutmuşum.
 
Alttaki gibi olacak yani.

Kod:
If Join(arr, "|") <> Join(scr.Keys, "|") Or scr.Count <> alansayisi Then
1 2