Tablo Oluşturmadan Önce Eskisini Varsa Kontrol Etmek

1 2
01/02/2020, 09:58

accessman

iyi günler 
create Sql komutu ile komutu ile tablo oluşturuyoruz ama diyelimki hali hazırdaki tablo bizim istediğimiz alanlara sahip değil veya yok
bunu sorgulayıp tablo oluşturabilir miyiz
mesela oluşturmak istediğimiz tablo ile aynı ada sahip fakat alakasız alanları olan bir tabloyu silip yeni tablo oluşturabilir miyiz
mantık olarak şöyle soracak 
bu isimli bir tablo var mı
varsa alanları nelerdir
uygunsa veri ekleme kısmına geç
uygun değilse yeni isimde mi oluşturulsun veya 
silinip yeni tablo oluşturulsun
01/02/2020, 09:59

accessman

şöyle bir kod var buna alan kontrolu sorgulama nasıl eklenir


Kod:
Sub ViaVBA()
    Const strSQLCreateFoo_c As String = _
          "CREATE TABLE Foo" & _
          "(" & _
          "MyField1 INTEGER," & _
          "MyField2 Text(10)" & _
          ");"
    Const strSQLAppendBs_c As String = _
          "INSERT INTO Foo (MyField1, MyField2) " & _
          "SELECT Bar.MyField1, Bar.MyField2 " & _
          "FROM Bar " & _
          "WHERE Bar.MyField2 Like 'B*';"

    If Not TableExists("foo") Then
        CurrentDb.Execute strSQLCreateFoo_c
    End If
    CurrentDb.Execute strSQLAppendBs_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, 15:02

feraz

Ado schmea ile tablo adları bulunuyordu.
Belki orda Alan adlarıda yazıyordur incelemek gerek aklıma geldi.
01/02/2020, 15:18

feraz

Alttaki gibi bir kod var ve Tablodaki alan adlarını bulyor.
Ona bir if koşulueklersen sarım  istediğin olur.


Dim sTable As String
    Dim rs As DAO.Recordset
    Dim n As Long
    Dim sResult As String


    Set rs = CurrentDb.OpenRecordset("Tablo1")

    With rs
        For n = 0 To .Fields.Count - 1
            sResult = sResult & .Fields(n).Name & vbCrLf
        Next 'n
        .Close
    End With

    Set rs = Nothing

MsgBox sResult
01/02/2020, 15:50

feraz

Bir incele kodları.Referenceden Microsoft.scripting.runtime yi işaretle



Function alanAdlar() As Dictionary

    Dim rs As DAO.Recordset
    Dim n As Long
    Dim scr As New Scripting.Dictionary

    Set rs = CurrentDb.OpenRecordset("Tablo1")
    With rs
        For n = 0 To .Fields.Count - 1
            scr(.Fields(n).name) = scr(.Fields(n).name)
        Next 'n
        .Close
    End With

  Set alanAdlar = scr
  Set rs = Nothing

End Function


Sub test()

    Dim rs As DAO.Recordset
    Dim n As Long


    Const strSQLCreateFoo_c As String = _
          "CREATE TABLE Foo" & _
          "(" & _
          "MyField1 INTEGER," & _
          "MyField2 Text(10)" & _
          ");"

    Set rs = CurrentDb.OpenRecordset("Foo")

    If Not TableExists("foo") Then
        CurrentDb.Execute strSQLCreateFoo_c
    End If
   
    For n = 0 To CurrentDb.OpenRecordset("Foo").Fields.Count - 1
        For Each xx In alanAdlar.Keys
          If rs.Fields(n).name = xx Then
                MsgBox "Bulunan Tablo ad: " & rs.Fields(n).name
          End If
        Next
    Next
    rs.Close
    Set rs = Nothing
'    CurrentDb.Execute strSQLAppendBs_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, 19:47

accessman

scr(.Fields(n).name) = scr(.Fields(n).name)
bu satır doğru mu
1 2