• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

MS Access SQL Sorgusu: Son 1 Saatte Giriş Çıkış Yapan Personel

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
126
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Merhabalar.

Sentez PDKS uygulamasının parmak izi giriş çıkış verilerini, db'den okuyorum. Gircik adlı tabloda GSaat (Giriş) ve CSaat (çıkış) sütunları var, saat formatı hh:mm şeklinde.

Son 1 saat içinde giriş veya çıkış yapmış personeli listelemek istiyorum. Getdate ve Dateadd konularına baktım ama maalesef çözemedim.

Yardımcı olabilir misiniz?
 
where kısmını aşağıdaki gibi düzenleyip dener misiniz
Kod:
SELECT G.Kartno, G.GSaat, G.CSaat, G.Tarih
FROM Gircik AS G
WHERE (((G.GSaat)>=Format(Now()-TimeValue("01:00:00"),"Short Time") And (G.GSaat)<=Format(Now(),"Short Time")) AND ((G.Tarih)=Date())) OR (((G.CSaat)>=Format(Now()-TimeValue("01:00:00"),"Short Time") And (G.CSaat)<=Format(Now(),"Short Time")) AND ((G.Tarih)=Date()));
 
Son düzenleme:
yada
Kod:
SELECT G.Kartno, G.GSaat, G.CSaat, G.Tarih
FROM Gircik AS G
WHERE ((G.Tarih)=Date()) and 
(((G.GSaat)>=Format(Now()-TimeValue("01:00:00"),"Short Time") And (G.GSaat)<=Format(Now(),"Short Time"))or ((G.CSaat)>=Format(Now()-TimeValue("01:00:00"),"Short Time") And (G.CSaat)<=Format(Now(),"Short Time")) );
 
yada
Kod:
SELECT G.Kartno, G.GSaat, G.CSaat, G.Tarih
FROM Gircik AS G
WHERE ((G.Tarih)=Date()) and
(((G.GSaat)>=Format(Now()-TimeValue("01:00:00"),"Short Time") And (G.GSaat)<=Format(Now(),"Short Time"))or ((G.CSaat)>=Format(Now()-TimeValue("01:00:00"),"Short Time") And (G.CSaat)<=Format(Now(),"Short Time")) );

İkisi de oldu, teşekkür ederim. Dün gece 01:00'de denediğimde saati nasıl tutturacağımı çözemediğim için boş sorgu gelmişti :)
 
Alternatif mantık aynı ama biraz kısa
Kod:
SELECT *
FROM Gircik
WHERE (Date()+[GSaat]>=DateAdd("h",-1,Now()) And Date()+[GSaat]<=Now()) Or (Date()+[CSaat]>=DateAdd("h",-1,Now()) And Date()+[CSaat]<=Now());
 
Son düzenleme:
Date() yerine tarih alanının olması gerekmez miydi hocam (Tarih+[GSaat]>=.... gibi
 
Alternatif mantık aynı ama biraz kısa
Kod:
SELECT *
FROM Gircik
WHERE (Date()+[GSaat]>=DateAdd("h",-1,Now()) And Date()+[GSaat]<=Now()) Or (Date()+[CSaat]>=DateAdd("h",-1,Now()) And Date()+[CSaat]<=Now());

"Ölçüt ifadesinde veri türü uyuşmazlığı"
 
Date() yerine tarih alanının olması gerekmez miydi hocam
Haklısın, baştan öyle idi kafam karışmış.
Kod:
SELECT *
FROM Gircik
WHERE ((([Tarih]+[GSaat])>=DateAdd("h",-1,Now()) And ([Tarih]+[GSaat])<=Now())) OR ((([Tarih]+[CSaat])>=DateAdd("h",-1,Now()) And ([Tarih]+[CSaat])<=Now()));
 
Haklısın, baştan öyle idi kafam karışmış.
Kod:
SELECT *
FROM Gircik
WHERE ((([Tarih]+[GSaat])>=DateAdd("h",-1,Now()) And ([Tarih]+[GSaat])<=Now())) OR ((([Tarih]+[CSaat])>=DateAdd("h",-1,Now()) And ([Tarih]+[CSaat])<=Now()));

Yine aynı hatayı verdi. Veri gg/aa/yyyy biçiminde işleniyor, DateAdd ile çağırdığımız tarih biçimi ise: a/g/yyyy. Sorun bu olabilir mi?
 
[GSaat] ve [CSaat] ifadeleri metin
Yine aynı hatayı verdi. Veri gg/aa/yyyy biçiminde işleniyor, DateAdd ile çağırdığımız tarih biçimi ise: a/g/yyyy. Sorun bu olabilir mi?
aklıma gelen 2 sorun var:
1 - [GSaat] ve [CSaat] alanları metin formatında olduğu için sistem saat olarak yorumlayamamış olabilir
[GSaat] ve [CSaat] yerine timevalue([GSaat]) ve timevalue([CSaat]) kullanmayı deneyebilirsiniz.
2 - [GSaat] ve [CSaat] alanları boş ise timevalue(...) kullansanız bile hatalı dönüşüm yaptığından koşul kısmında soruna sebep olabilir.
not: giriş yada çıkış alanı boş ise bu durumda ne yapılacağı belli değil; varsayılan olarak "00:00:00" verilmesi giriş-çıkış yapmamış birine giriş-çıkış ataması yapılmış olacak. gece yarısı "son 1 saatte kim ne yapmış" gibi bir şey yapmayacaksanız sorun yok
 
Evet saatler kısa metin olarak tanımlı ve timevalue parametresi saati 01:00:00 biçimine çevirdi ama henüz çıkış sütunu boş olduğu için çıkış kısmında hata verdi.
 
Alanları aşağıdaki gibi formatlayarak, mesaj #8 deki sql metnini deneyin

Alan

Veri Türü

Biçim

Tarih

Tarih/Saat

Kısa Tarih

GSaat

Tarih/Saat

Kısa Saat

CSaat

Tarih/Saat

Kısa Saat
 
@alicimri hocamın kodunu aşağıdaki gibi düzenleyip dener misiniz?
SQL:
SELECT G.Id, G.Kartno, G.Tarih, G.GSaat, G.CSaat
FROM Gircik AS G
WHERE (((CDate([G].[Tarih] & ' ' & [G].[GSaat]))>=DateAdd("h",-1,Now()) And (CDate([G].[Tarih] & ' ' & [G].[GSaat]))<=Now())) OR (((CDate([G].[Tarih] & ' ' & [G].[CSaat]))>=DateAdd("h",-1,Now()) And (CDate([G].[Tarih] & ' ' & [G].[CSaat]))<=Now()));
 
Geri
Üst