Tablo Alanlarını Döngü İçinde Kullanmak

1 2 3 4
24/04/2020, 14:21

accessman

Hayırlı ramazanlar şöyle bir kod ile tablonun eski ve yeni değerleri arasında karşılaştırma yapıp listelemek istiyoruz
Kod:
Private Sub Komut3_Click()
    Dim strSQL, strSQL_perad, strSQL_persoy As String
    strSQL_perad = "SELECT" & _
        " itLastPersonel.SICNO" & "," & _
        " 'PERAD' AS AlanAdi" & "," & _
        " itLastPersonel.PERAD" & "," & _
        " itNewPersonel.PERAD" & _
        " FROM itLastPersonel" & _
        " INNER JOIN itNewPersonel ON itLastPersonel.SICNO = itNewPersonel.SICNO" & _
        " WHERE (((itLastPersonel.PERAD)<>[itNewPersonel].[PERAD])) "

       
    strSQL_persoy = "SELECT" & _
        " itLastPersonel.SICNO" & "," & _
        " 'PERSOY' AS AlanAdi" & "," & _
        " itLastPersonel.PERSOY" & "," & _
        " itNewPersonel.PERSOY" & _
        " FROM itLastPersonel" & _
        " INNER JOIN itNewPersonel ON itLastPersonel.SICNO = itNewPersonel.SICNO" & _
        " WHERE (((itLastPersonel.PERSOY)<>[itNewPersonel].[PERSOY]));"
       
    strSQL = strSQL_perad & " UNION ALL " & strSQL_persoy
   
    Me.Liste0.RowSource = strSQL
    Me.Liste0.Requery
End Sub
ilk Sql de PERAD ikincide "PERSOY" alanlarının eski ve yeni değerleri karşılaştırılıp farklı olanlar listeleniyor
bu sadece iki alan için böyle Oysa ki tabloda en az 30 alan var 
herbir alanın değişip değişmediğini kontrol edip listelemek lazım
çok farklı yolları olabilir ama ben tablo alanlarını döngü içerinde Sql satırına eklemek istiyorum
nasıl yapmam lazım

Kod:
Dim l As Integer

For l = 0 To CurrentDb.TableDefs("tbl_Name").Fields.Count - 1
  Debug.Print CurrentDb.TableDefs("tbl_Name").Fields(l).name
Next l
bunu nasıl kullanabilirim
24/04/2020, 15:41

alicimri

sql server kullanma olanağın varsa except komutu işini döngüsüz halledebilirsin.
24/04/2020, 15:49

alicimri

sqlite de kullanılabiliniyormuş.
https://www.sqlitetutorial.net/sqlite-except/
24/04/2020, 17:07

berduş

Her 2 tablonunda tum alan adlari ve alan ozellikleri ayniysa
Once recordset ile ile ilk tablo baglanir

Dim fld As Field
For each fld in rs.fileds
.... fld.name
Next fld
Bu kod ile tüm alanların adı alinabilr, gerisi bu alan adları sorguda kullanmak
24/04/2020, 17:19

accessman

teşekkürler
bir türlü şu değişkenleri Sql içine yazamadım
Kod:
lastTableName = "itLastPersonel"
newTableName = "itNewPersonel"
lastColumnName = "PERSOY"
newColumnName = "PERSOY"


SQL = SQL & " WHERE itLastPersonel.PERSOY <> itNewPersonel.PERSOY;"
24/04/2020, 19:06

berduş

SQL = Sql & " WHERE itLastPersonel.[" & fld.name & "]<> itNewPersonel.[" & fld.name & "];"
Şeklinde deneyebilirsiniz.
1 2 3 4