@
feraz beyin belirttiği gibi.....
teorik olarak önerebileceğim şey tüm formdan çağırabileceğiniz bir dizi oluşturmak
alanlara değer atarken bu değerleri diziye yüklemek
ve son aşamada eski-yeni kıyaslaması yaparken bu dizi değerini çağırmak olabilir
Option Compare Database
satırının altına
Dim EskDgr() As Variant
satırını ekleyerek diziyi tanmladık
ilk değeri almak için gerekli kodlar
'hy_______________________________________________ ilk değeri alma
Dim ctl As Control
x = 0
For Each ctl In Me.Controls
Select Case ctl.ControlType 'Tüm kontrolleri gözden geçirelim..
Case acTextBox, acComboBox, acCheckBox, acOptionGroup
ReDim Preserve EskDgr(x)
EskDgr(x) = Nz(ctl)
x = x + 1
End Select
Next ctl
'hy__________________________________________________
kontrol sırasında çalıştırılacak kod
kırmızı olanlar eklenmiş
yeşil olanlar değiştirilmiştir
'________________________________________________________________________________________________
x=0
For Each Kontrol In frm
Select Case Kontrol.ControlType 'Tüm kontrolleri gözden geçirelim..
Case acTextBox, acComboBox, acCheckBox, acOptionGroup
'Boş verilere değer atayalım..
EskiData =
nz(EskDgr(x))
YeniData =
nz(kontrol)
If EskiData <> YeniData Then
'Diğer değişkenleri tanımyalım
Tablo = frm.RecordSource
kllnc = AktifKullanici
Zmn = Now()
Msj = "Kayıt Değiştirildi"
'Değişiklikleri kaydedelim..
Sorgu = "INSERT INTO TGuncellemeKaydi ([Tablo], [KayitNo], [FormAdi], [DenetimAdi], " _
& "[EskiVeri], [YeniVeri], [Kullanici], [Zaman],[Silinme]) " _
& "VALUES ('" & Tablo & "', '" & KayitKimligi & "', '" & frm.name & "', " _
& "'" & Kontrol.name & "', '" & EskiData & "', '" & YeniData & "', " _
& "'" & kllnc & "', '" & Zmn & "', '" & Msj & "')"
CurrentDb.Execute Sorgu
End If
x=x+1
End Select
Next Kontrol
'__________________________________________________
gerisi size kalmış
Not: diziye değer atama mantığı for each döngüsünün nesneleri aynı sırayla aldığı varsayımı üzerine kurulu
hatalı bir varsayım olabilir o durumda diziye nesne adı ve değeri atanıp tekrar döngüyle kontrol edilebilir