Excelden Veri Alma

1 2 3 4 5 6 7 8 9
08/02/2020, 00:41

berduş

tamamı boşaltılınca hata veriyor dediğiniz gibi. Zamanım olduğunda hatanın sebebini bulmaya çalışırım

sorunu buldum eşitsizliğin her 2 tarafına Nz() eklemem gerekiyormuş. Dosyayı güncelledim bakalım başka ne hatalar çıkacak)
teşekkürler.
08/02/2020, 11:11

feraz

Sayın hocam aklıma takılan bir yer vardı onu denedim ve tahmin ettiğim sonuç oldu.

Gifte dikkat ederseniz her işlemden sonra Access dosta boyutu bereketleniyor
Resim boyutu 2Mb den büyük olduğu için başka yere yükledim.

Ayrıyeten koddaki With fDialog altına .InitialFileName = CurrentProject.Path eklenirse dosya içi yolu çıkar dosya açmada.


(08/02/2020, 11:11)feraz yazdı: her işlemden sonra Access dosta boyutu bereketleniyor
accesste yapılan her işlemden sonra VT şişer bunu engellemenin yolu ister otomatik ister elle ara ara VTyi sıkıştır/onar yapmaktır
isterseniz kapatırken kendisi otomatik olarak da onarabilir

08/02/2020, 13:54

feraz

Abey hem sadece güncelle hem sadece veri al excelden ve her ikisini beraber yaptım.
Örnek dosya sütun sayısı fazla 4 sütunluk olsaydı daha iyi olurdu
Kodlar zaten sizin.



Option Compare Database
  Dim varFile As Variant
  Dim yahya As String
  Dim fDialog As Office.FileDialog
  Dim SayRS As New ADODB.Recordset
Dim SaySql As String


Private Sub ExcelAl1_Click()
 
Dim Guncelle As String, al As String
    Guncelle = " 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 ((nz([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],"")<> " & _
              " nz([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],""))) )));"
             
    al = " 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))"
             
             
   
    Call AlVeGuncelle(Guncelle, al, 3)


End Sub

Private Sub ExcelSadeceAl_Click()

Dim SadeceEkle As String

     CurrentDb.Execute "Delete * from tesisler"
     SadeceEkle = " 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))"
   
    Call AlVeGuncelle(SadeceEkle, "", 1)

End Sub

Private Sub ExcelSadeceGuncelle_Click()

    Dim SadeceGuncelle As String
    SadeceGuncelle = " 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 ((nz([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],"")<> " & _
              " nz([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],""))) )));"
   
     Call AlVeGuncelle(SadeceGuncelle, "", 2)

End Sub

Sub AlVeGuncelle(sqlll As String, sql2 As String, kac As Byte)

'Dosya ac -------------------------------------------------------------------------------------------------------
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

  With fDialog
      .AllowMultiSelect = False
        .Title = "Lütfen Aktaraca?ynyz Bilgilerin Bulundu?u Excel Dosyasyny Seçin"
        .InitialFileName = CurrentProject.Path
        .Filters.Clear
        .Filters.Add "All Files", "*.*"
        .Filters.Add "Excel 2003", "*.xls"
        .Filters.Add "Excel 2007", "*.xlsx"


          If .Show = True Then
            For Each varFile In .SelectedItems
                yahya = varFile
            Next
        End If
    End With

    If yahya = "" Or IsNull(yahya) Then
        MsgBox "Dosya secilmedigi icin iptal edildi...", vbCritical, "iptal"
        Set fDialog = Nothing
        Exit Sub
    End If
       
  'Dosya ac sonu -------------------------------------------------------------------------------------------------------

BasZmn = Now
'hy_Geçici_tablo_var_mı_varsa_sil_____
   If Not IsNull(DLookup("Name", "MSysObjects", "Name='TmpTablo'")) Then DoCmd.DeleteObject acTable, "TmpTablo"
'hy_tablo_kontrol____________________Bitti
TestBil = ""

DoCmd.TransferSpreadsheet TransferType:=acLink, _
                          TableName:="TmpTablo", _
                          SpreadsheetType:=10, _
                          FileName:=yahya, _
                          HasfieldNames:=True, _
                          Range:="Sayfa1$B2:N" '"Hy bin 2!B3:E"

'hy Tablo Boş Mu_____________

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

'hy Excel Boş Mu_____________Bitti
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




    If kac = 1 Then
        CurrentDb.Execute "Delete * from tesisler"
        CurrentDb.Execute sqlll
    ElseIf kac = 2 Then
        CurrentDb.Execute sqlll
    ElseIf kac = 3 Then
        CurrentDb.Execute sqlll
        CurrentDb.Execute sql2
    End If



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


Me.tesisler.Requery
    CurrentDb.TableDefs.Refresh
    DoCmd.DeleteObject acTable, "TmpTablo"
BitZmn = Now


TSaniye = DateDiff("s", BasZmn, BitZmn)

LngSn = TSaniye Mod 60
LngDk = (TSaniye \ 60) Mod 60
LngSt = (TSaniye \ 3600) Mod 60

Me.TestBil = "Yöntem : 4 " & vbCrLf & _
             "Transfer bitti       " & vbCrLf & _
             "Güncellenen Kayıt Sayısı : " & GuncellenecekKyt & vbCrLf & _
             "Eklenen  Kayıt Sayısı : " & EklenecekKyt & vbCrLf & _
             "Toplam Kayıt Sayısı : " & DCount("*", "tesisler") & vbCrLf & _
             "Başlama Zamanı : " & Format(BasZmn, "hh:nn:ss") & vbCrLf & _
             "Bitiş   Zamanı : " & Format(BitZmn, "hh:nn:ss") & vbCrLf & _
             "Geçen Süre     : " & LngSt & ":" & _
                 LngDk & ":" & _
                 LngSn & " ( " & TSaniye & "sn )"
MsgBox "bitti"
End Sub
teşekkürler sayın @feraz
08/02/2020, 14:12

feraz

Rica ederim.
Benim yaptışı sadece bir örnekti isterseniz silebilirsiniz.
Sadece excelden al butonunda dikkat edilmesi gereken accessteki ilgili tablodaki veriler tüm temizleniyor sonra exceldekiler aktarılıyor if kodıundaki delete satırı kaldırlırsa silinmez.Ben öyle yaptım tercihen.

Süper dosya oldu sayenizde
1 2 3 4 5 6 7 8 9