Skip to main content

AccessTr.neT


Veri Aktarma

Veri Aktarma

#31
@berduş hocam sizin için ado ve dizi olayını hız karşılaştırması yaptım 100bin satırlık olay için.Ayrıca biraz daha biligi vereyim ado için.

1. Alttaki koddaki Sql = "SELECT [Baslik 1] FROM [Sayfa2$A1:A] where [Baslik 1]>0" yeri pasif yaptım onu denerseniz satır 100bin olsada 65336 olarak veri getiriyor en fazla.

2.hdr=yes olunca baslıklarda boşluk varsa mesela Baslık 1 gibi ozaman [] kullanılmalı yoksa Baslık1 gibi olursa [] bunlara gerek yok olursatabii daha iyi our diyenlerde olmuştu.
Basit bir örnek hazırladım hız karşılaştırması için.


Sub Aktar()
    Dim Sql As String
    Dim ADO_CN As Object
    Dim ADO_RS As Object
    t = TimeValue(Now)
    ThisWorkbook.Sheets("Sayfa1").Range("A2:A" & Rows.Count).ClearContents
   
    Set ADO_CN = CreateObject("Adodb.Connection")
    Set ADO_RS = CreateObject("adodb.recordset")
'    Sql = "SELECT [Baslik 1] FROM [Sayfa2$A1:A] where [Baslik 1]>0"
    Sql = "SELECT [Baslik 1] FROM [Sayfa2$] where [Baslik 1]>0"
    ADO_CN.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;data source=" & ThisWorkbook.FullName & _
    ";extended properties=""excel 8.0;hdr=yes;imex=1"""
   
    ADO_CN.Open
    ADO_RS.Open SQL, ADO_CN, 1, 1
   
    ThisWorkbook.Sheets("Sayfa1").Range("a2").CopyFromRecordset ADO_RS
   
    ADO_RS.Close
    ADO_CN.Close
    Set ADO_RS = Nothing
    Set ADO_CN = Nothing
    MsgBox CDate(TimeValue(Now) - t), vbInformation
End Sub


Sub Aktar2() 'dizi
    Dim arr(), i As Long, dizi(), say As Long
    t = TimeValue(Now)

    ReDim arr(1 To 100000, 1 To 1)
    ThisWorkbook.Sheets("Sayfa1").Range("B2:B100000").Value = ""
    dizi = ThisWorkbook.Sheets("Sayfa2").Range("A2:A100000").Value
    For i = LBound(dizi) To UBound(dizi)
        If dizi(i, 1) > 0 Then
            say = say + 1
            arr(say, 1) = i
        End If
    Next
    ThisWorkbook.Sheets("Sayfa1").Range("B2:B100000").Value = arr
    MsgBox CDate(TimeValue(Now) - t), vbInformation
    Erase dizi: Erase arr
End Sub
.rar Ado ve dizi karsilastirma.rar (Dosya Boyutu: 318,45 KB | İndirme Sayısı: 7)
Cevapla
#32
açıkçası dizinin bu kadar hızlı olabileceğini düşünmemiştim. az kayıtta hızlı olabilir ama binlerce kayıtta ADO daha hızlıdır diye düşünüyordum)
ADO:17 saniye
Dizi : 1 saniye sürdü
Cevapla
#33
(05/11/2020, 13:23)berduş yazdı: açıkçası dizinin bu kadar hızlı olabileceğini düşünmemiştim. az kayıtta hızlı olabilir ama binlerce kayıtta ADO daha hızlıdır diye düşünüyordum)
ADO:17 saniye
Dizi :  1 saniye sürdü
Abey benim tecrübelerime göre adoyu kapalı Excel için kullanmak gerek.Tabii istisnalar hariç.Normalde ado ile bir sorguda işlem yapılıyorken normal kodlarla bir sürü işlem.
Ado bağlantılı comboboxlar ve listbox filtreleme için hoşuma gidiyor.
Dizi ve scripting ikilisi bir harika hız açısından.Accesste ado süper olabilir çünkü her alanın formatı aynı olmak zorunda bundan dolayı ado ve dao ideal diye düşünüyorum Access için.
Cevapla
#34
Bilgilendime için teşekkürler @feraz bey.

Bu arada aklinizda belli istisnaî durumlar var mı?
Cevapla
#35
(05/11/2020, 10:58)berduş yazdı: Rica ederiz
Iyi calismalar
Peki tarih alanini getirebildiniz mi?


VERİ ALDIĞIH HARİCİ DOSYADAN TARİH yyyymmdd OLARAK GELDİĞİ TARİH AKTARILMIYORMUŞ. VERİ-METNİ SUTUNLARA DÖNÜŞTÜR KISMINDAN dd.mm.yyyy OLARAK DEĞİŞTİRİNCE TARİH GELİYOR
Cevapla
#36
(05/11/2020, 15:49)berduş yazdı: Bilgilendime için teşekkürler @feraz bey.

Bu arada aklinizda belli istisnaî durumlar var mı?
Rica ederim abey.istisna durumlarını nasıl anlatırım bilemiyoru.sql seeverden vei almak yada veri eklemek içinde olabilir.Açıkçası Ado ya fazla güvenemiyorum bazen veriler gelmeyebiliyor imex=1 olduğu halde.Ado kötü demiyorum yerine göre bende kullanıyorum süper lakin dediklerimden ötürü fazla sevmiyorum kendisini Img-grin
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da