yusuf1284
Altın Üye
- Katılım
- 17 Ocak 2015
- Mesajlar
- 229
- Excel Vers. ve Dili
- Office Pro 2016 TR
- Altın Üyelik Bitiş Tarihi
- 09-02-2028
33 bin satırlık veri var bu işlem doğru sonucu veriyor fakat işlem uzun sürüyor işlemi tamamıyla ADO ile yapabilir miyiz?
İl merkezinden çıkış yapıp 1 saat içerisinde dönen araçların listesi gerekiyor
İl merkezinden çıkış yapıp 1 saat içerisinde dönen araçların listesi gerekiyor
Plaka | Tarih | Saat | PTS Nokta Adı | Araç Tip | Araç Yıl | Araç Marka | Araç Renk |
OKUNAMADI | 18.06.2023 | 23:59:58 | …. İl Merkezi Çıkış 2-KAMERA \ PTS | ||||
xxxxx | 18.06.2023 | 11:59:58 | …. İl Merkezi Çıkış 1-KAMERA \ PTS | OTOMOBİL-AF Çok amaçlı | 2013 | TOYOTA | BEYAZ (Kar) |
yyyyyy | 18.06.2023 | 00:32:34 | …. İl Merkezi Giriş1-KAMERA \ PTS | OTOMOBİL-AA Sedan | 2014 | VOLKSWAGEN | BEYAZ |
zzzzz | 18.06.2023 | 09:40:55 | …. İl Merkezi Giriş1-KAMERA \ PTS | OTOMOBİL-AA Sedan | 2017 | FIAT | BEYAZ |
Kod:
Sub saatFarki()
'Worksheets("test").Cells.Clear
sh_sonuc.Cells.Delete 'HÜCRELERİN TAMAMINI TEMİZLE
'connection nesne tanımı
Dim con As Object, rs As Object
Dim lastRow As Long
Dim x As String
'değişken tanımlama
Dim query As String, ConStr As String, db_file As String
Dim i As Long, j As Long
Dim plakalar() As Variant
Dim plaka As Variant
Dim cikisSaat As Integer, girisSaat As Integer, saatFarki As Integer
'bağlantı dizesi ifadesinin string türünden tanımı
Set con = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
On Error Resume Next
con.Close
rs.Close
saatFarki = InputBox("Saat farkını girin:") ' Kullanıcıdan saat farkını alın
'dosya konumu belirleme
'db_file = ThisWorkbook.path & "\FoodSales.xlsx"
db_file = ThisWorkbook.FullName
'bağlantı dizesi için gerekli olan ifadenin değişkene aktarılması. (buradaki db_file özelliğini kendi veri yolunuza göre düzenleyebilirsiniz
con.Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
db_file & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
''tüm verileri getir
'query = "SELECT * FROM [ArsivBilgi$A1:H]"
query = "SELECT distinct Plaka FROM [ArsivBilgi$A1:H]"
'query = "SELECT * FROM [ArsivBilgi$] WHERE [Nokta Adı] = 'İl Merkezi Çıkış 2-KAMERA \ PTS' " 'AND [Tarih] = #" & Format(Date, "yyyy-mm-dd") & "# AND [Saat] >= #" & Format(TimeValue("08:00:00 AM"), "hh:mm:ss") & "# AND [Saat] <= #" & Format(TimeValue("09:00:00 AM"), "hh:mm:ss") & "# AND [Plaka] IN (SELECT [Plaka] FROM [Sayfa1$] WHERE [Nokta Adı] = 'İl Merkezi Giriş 2-KAMERA \ PTS' AND [Tarih] = #" & Format(Date, "yyyy-mm-dd") & "# AND [Saat] >= #" & Format(TimeValue("08:00:00 AM"), "hh:mm:ss") & "# AND [Saat] <= #" & Format(TimeValue("09:00:00 AM"), "hh:mm:ss") & "#)"
'query = "SELECT * FROM [ArsivBilgi$]" & _
"WHERE [PTS Nokta Adı] = 'Akbelen-Gözne İl Merkezi Çıkış 2-KAMERA \ PTS' AND [Saat] >= #" & Format(TimeValue("08:00:00 AM"), "hh:mm:ss") & "# AND [Saat] <= #" & Format(TimeValue("09:00:00 AM"), "hh:mm:ss") & "#"
'query = "SELECT * FROM [ArsivBilgi$] WHERE [PTS Nokta Adı] = 'Akbelen-Gözne İl Merkezi Çıkış 2-KAMERA \ PTS' AND DATEDIFF('h', [Saat], (SELECT MIN([Saat]) FROM [ArsivBilgi$] AS sub WHERE sub.[PTS Nokta Adı] = 'Akbelen-Gözne İl Merkezi Çıkış 2-KAMERA \ PTS' AND sub.[Tarih] = [ArsivBilgi$].[Tarih])) = 1"
rs.Open query, con, 3, 1
'Set rs = con.Execute(query)
' Plakaları diziye aktar
If Not rs.EOF Then
rs.MoveFirst
plakalar = rs.GetRows
Else
' Sonuç yok
Exit Sub
End If
rs.Close
' Her plaka için ayrı sorgular yap
For i = LBound(plakalar, 2) To UBound(plakalar, 2)
plaka = plakalar(0, i)
' Ayrı sorgu için plaka değerini kullan
query = "SELECT * FROM [ArsivBilgi$A1:H] WHERE [Plaka] = '" & plaka & "' AND [PTS Nokta Adı] Like '%Çıkış%' "
query = "SELECT * FROM [ArsivBilgi$A1:H] WHERE [Plaka] = '" & plaka & "' "
'AND [Tarih] = #" & Format(Date, "yyyy-mm-dd") & "# AND [Saat] >= #" & Format(TimeValue("08:00:00 AM"), "hh:mm:ss") & "# AND [Saat] <= #" & Format(TimeValue("09:00:00 AM"), "hh:mm:ss") & "#"
' Ayrı sorguyu çalıştır
rs.Open query, con, 3, 1
cikisSaat = 0
girisSaat = 0
' Sonuçları işleme
If Not rs.EOF Then
rs.MoveFirst
Do Until rs.EOF
' Sonuçları kullanarak istediğiniz işlemleri yapabilirsiniz
' Örneğin:
'If rs.Fields("PTS Nokta Adı").Value Like "%Çıkış%" Then
If InStr(1, rs.Fields("PTS Nokta Adı").Value, "Çıkış") > 0 Then 'EĞER Çıkış KELİMESİ VARSA
cikisSaat = Format(rs.Fields("Saat").Value, "HH")
End If
If InStr(1, rs.Fields("PTS Nokta Adı").Value, "Giriş") > 0 Then 'EĞER Çıkış KELİMESİ VARSA
girisSaat = Format(rs.Fields("Saat").Value, "HH")
End If
If cikisSaat - girisSaat = saatFarki Then
rs.Close
query = "SELECT * FROM [ArsivBilgi$A1:H] WHERE [Plaka] = '" & plaka & "' "
rs.Open query, con, 3, 1
If sh_sonuc.Range("a1") = "" Then
For j = 0 To rs.Fields.Count - 1
sh_sonuc.Cells(1, j + 1).Value = rs.Fields(j).Name
Next j
End If
lastRow = sh_sonuc.Cells(sh_sonuc.Rows.Count, "B").End(xlUp).Row + 1
sh_sonuc.Range("A" & lastRow).CopyFromRecordset rs
Exit Do
End If
rs.MoveNext
Loop
Else
' Sonuç yok
End If
' Sorguyu kapat
rs.Close
Next i
lastRow = sh_sonuc.Cells(sh_sonuc.Rows.Count, "B").End(xlUp).Row + 1
sh_sonuc.Range("B2:B" & lastRow + rs.RecordCount).NumberFormat = "dd/mm/yyyy" 'Tarih formatına çevir
sh_sonuc.Range("C2:C" & lastRow + rs.RecordCount).NumberFormat = "HH:MM" 'saat formatına çevir
sh_sonuc.Range("A1").AutoFilter
sh_sonuc.Cells.EntireColumn.AutoFit
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
Son düzenleme: