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 .......
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
Evet istediğimde buydu deneyeceğim teşekkürler
(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