Aşağıdaki resimde test sonuçları var ne kadar güvenilir emin değilim kendiniz karar verirsiniz ama bana süreyi daha kısa gösteriyor gibi geldi
Testin nasıl yapıldığını anlatayım
ekleme kodları dışında her şeyiyle özdeş 4 çalışma var
testin ilk kısmında boş tablolara excelden 1500 kayıt ekleniyor
(bu 1500 kaydın 750 si asıl exceldeki -3000 kayıtlık - kayıtlarla birebir aynıyken
750 tanesinde sadece 1 alana fazladan a harfi eklenmiş)
2 kısımda ise bu sefer 3000 kayıtlı asıl dosyadan veri almaya çalışıyoruz
yani 2. testte hem ekleme hem de güncelleme yapıyoruz
Transfer Yöntemleri
1. Yöntemde normal ilk kullaılan kod var
Do While Not rs.EOF And Not rs.BOF
If DCount("[kod]", "tesisler", "[kod] = '" & rs(0) & "'") > 0 Then
CurrentDb.Execute _
"UPDATE tesisler SET [kod] = """ & rs(0) & """," & _
"[Kaynak] = """ & rs(1) & """," & _
"[Tarih] = '" & rs(2) & "'," & _
"[tesis] = """ & rs(3) & """," & _
"[bolum] = """ & rs(4) & """," & _
"[Tespit_eden] = """ & rs(5) & """," & _
"[gozlem] = """ & rs(6) & """," & _
"[oneriler] = """ & rs(7) & """," & _
"[sorumlu] = """ & rs(8) & """," & _
"[termin_tarihi] = '" & rs(9) & "'," & _
"[sorumlu_gorusu] = """ & rs(10) & """," & _
"[tamamlama_tarihi] = '" & rs(11) & "'," & _
"[durum] = '" & rs(12) & "'" & _
"WHERE [kod] = """ & rs(0) & """"
say = say + 1
ElseIf DCount("[kod]", "tesisler", "[kod] = """ & rs(0) & """") = 0 Then
CurrentDb.Execute _
"INSERT INTO tesisler" _
& " ([kod], [kaynak], [tarih], [tesis], [bolum],[Tespit_eden],[gozlem],[oneriler],[sorumlu],[termin_tarihi],[sorumlu_gorusu],[tamamlama_tarihi],[durum])" _
& " VALUES ( """ & rs(0) & """ , """ & rs(1) & """ , '" & Format(rs(2), "dd.mm.yyyy") & "', """ & rs(3) & """, """ & rs(4) & """, """ & rs(5) & """, """ & rs(6) & """, """ & rs(7) & """, """ & rs(8) & """, '" & Format(rs(9), "dd.mm.yyyy") & "', """ & rs(10) & """, '" & Format(rs(11), "dd.mm.yyyy") & "', """ & rs(12) & """ );"
say1 = say1 + 1
End If
rs.MoveNext
Loop
2. Yöntemde
3. ve 4. yöntem temelde aynı 3. yöntemde ortak kayıtlar silini exceldekiler tekrar alınırken
4.de ortaklardan farklı olan güncellenip tabloda olmayanlar ekleniyor
3. Yöntem
4. Yöntem
BasZmn = Now
TestBil = ""
DoCmd.TransferSpreadsheet TransferType:=acLink, _
TableName:="TmpTablo", _
SpreadsheetType:=10, _
FileName:=yahya, _
HasfieldNames:=True, _
Range:="Sayfa1$B2:N"
Dim SaySql As String
SaySql = "select * from TmpTablo"
SayRS.Open SaySql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
KytSay = SayRS(0)
Krt = " where [" & SayRS(0).Name & "] Is Not Null"
SayRS.Close
SayRS.Open SaySql & Krt, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If SayRS.RecordCount = 0 Then
DoCmd.DeleteObject acTable, "TmpTablo"
MsgBox "Tabloda veri yok"
Exit Sub
End If
SayRS.Close
SaySql = " SELECT Count([TmpTablo]![KOD]) AS GnclSay " & _
" FROM TmpTablo INNER JOIN tesisler ON TmpTablo.KOD = tesisler.kod " & _
" WHERE ((([tesisler]![kaynak] & [tesisler]![tarih] & [tesisler]![tesis] & [tesisler]![bolum] & " & _
" [tesisler]![tespit_eden] & [tesisler]![gozlem] & [tesisler]![oneriler] & [tesisler]![sorumlu] & " & _
" [tesisler]![termin_tarihi] & [tesisler]![sorumlu_gorusu] & [tesisler]![tamamlama_tarihi] & " & _
" [tesisler]![durum])<>([TmpTablo]![Kaynak] & [TmpTablo]![Tarih] & [TmpTablo]![Tesis] & " & _
" [TmpTablo]![Yer/Bölüm] & [TmpTablo]![Tespit Yapan] & [TmpTablo]![Uygunsuzluk/Ramak Kala/Gözlem] & " & _
" [TmpTablo]![Önerilen Aksiyon] & [TmpTablo]![Sorumlu] & [TmpTablo]![Termin Tarihi] & " & _
" [TmpTablo]![Sorumlu Görüşü/Kararı] & [TmpTablo]![Tamamlama Tarihi] & [TmpTablo]![Durum])));"
SayRS.Open SaySql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
GuncellenecekKyt = SayRS(0)
SayRS.Close
SqlGuncelle = " UPDATE TmpTablo INNER JOIN tesisler ON TmpTablo.KOD = tesisler.kod " & _
" SET " & _
" tesisler.kaynak = [TmpTablo]![Kaynak], " & _
" tesisler.Tarih = [TmpTablo]![Tarih], " & _
" tesisler.tesis = [TmpTablo]![Tesis], " & _
" tesisler.bolum = [TmpTablo]![Yer/Bölüm], " & _
" tesisler.tespit_eden = [TmpTablo]![Tespit Yapan], " & _
" tesisler.gozlem = [TmpTablo]![Uygunsuzluk/Ramak Kala/Gözlem], " & _
" tesisler.oneriler = [TmpTablo]![Önerilen Aksiyon], " & _
" tesisler.sorumlu = [TmpTablo]![sorumlu], " & _
" tesisler.termin_tarihi = [TmpTablo]![Termin tarihi], " & _
" tesisler.sorumlu_gorusu = [TmpTablo]![Sorumlu Görüşü/Kararı], " & _
" tesisler.tamamlama_tarihi = [TmpTablo]![Tamamlama Tarihi], " & _
" tesisler.durum = [TmpTablo]![Durum] " & _
" WHERE (((TmpTablo.KOD) In (SELECT tesisler.kod " & _
" FROM TmpTablo INNER JOIN tesisler ON TmpTablo.KOD = tesisler.kod " & _
" WHERE ((([tesisler]![kaynak] & [tesisler]![tarih] & [tesisler]![tesis] & [tesisler]![bolum] & " & _
" [tesisler]![tespit_eden] & [tesisler]![gozlem] & [tesisler]![oneriler] & [tesisler]![sorumlu] & " & _
" [tesisler]![termin_tarihi] & [tesisler]![sorumlu_gorusu] & [tesisler]![tamamlama_tarihi] & " & _
" [tesisler]![durum])<> " & _
" ([TmpTablo]![Kaynak] & [TmpTablo]![Tarih] & [TmpTablo]![Tesis] & [TmpTablo]![Yer/Bölüm] & " & _
" [TmpTablo]![Tespit Yapan] & [TmpTablo]![Uygunsuzluk/Ramak Kala/Gözlem] & " & _
" [TmpTablo]![Önerilen Aksiyon] & [TmpTablo]![Sorumlu] & [TmpTablo]![Termin Tarihi] & " & _
" [TmpTablo]![Sorumlu Görüşü/Kararı] & [TmpTablo]![Tamamlama Tarihi] & [TmpTablo]![Durum]))) )));"
CurrentDb.Execute SqlGuncelle
SaySql = " SELECT Count(TmpTablo.KOD) AS SayKOD " & _
" FROM tesisler RIGHT JOIN TmpTablo ON tesisler.kod = TmpTablo.KOD " & _
" GROUP BY tesisler.kod " & _
" HAVING (((Count(TmpTablo.KOD)) Is Not Null) AND ((tesisler.kod) Is Null))"
SayRS.Open SaySql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
EklenecekKyt = SayRS(0)
SayRS.Close
SqlEkle = " INSERT INTO tesisler ( kod, kaynak, tarih, tesis, bolum, Tespit_eden, gozlem, oneriler, sorumlu, termin_tarihi, sorumlu_gorusu, tamamlama_tarihi, durum )" & _
" SELECT TmpTablo.KOD, TmpTablo.Kaynak, TmpTablo.Tarih, TmpTablo.Tesis, TmpTablo.[Yer/Bölüm], TmpTablo.[Tespit Yapan], TmpTablo.[Uygunsuzluk/Ramak Kala/Gözlem], TmpTablo.[Önerilen Aksiyon], TmpTablo.sorumlu, TmpTablo.[Termin tarihi], TmpTablo.[Sorumlu Görüşü/Kararı], TmpTablo.[Tamamlama Tarihi], TmpTablo.Durum" & _
" FROM tesisler RIGHT JOIN TmpTablo ON tesisler.kod = TmpTablo.KOD" & _
" WHERE (((TmpTablo.KOD) Is Not Null) AND ((tesisler.kod) Is Null))"
CurrentDb.Execute SqlEkle
Me.tesisler.Requery
CurrentDb.TableDefs.Refresh
BitZmn = Now
TransferKarsilastirma_hy.rar
(Dosya Boyutu: 607,83 KB | İndirme Sayısı: 12)