viewler?
viewler?
merhaba arkadaslar
sitede arama yaptim ama tam bir ornek bulamadim
sorunum su
3 tane table var formumda ben bu table lardaki bazi alanlari alarak tek bir dbgrid uzerinde gostermek istiyorum.sitede view ler le iligili yazilari okudum fakat isin icinden cikamadim.veya bunun baska cozumu olabilirmi
tskler..
sitede arama yaptim ama tam bir ornek bulamadim
sorunum su
3 tane table var formumda ben bu table lardaki bazi alanlari alarak tek bir dbgrid uzerinde gostermek istiyorum.sitede view ler le iligili yazilari okudum fakat isin icinden cikamadim.veya bunun baska cozumu olabilirmi
tskler..
Garibanus
View ler bildiğin SELECT .. cümleciğinin veri tabanında saklanmış halidir. Eğer bahsedilen tablolar birbiri ile ilişkili alanları var ise bu şekilde tek bir tablo gibi davranabilirler. Bu sadece Grid üzerinde göstermek amacıyla yapılacaksa JOIN ile de birbirlerine bağlanabilirler.
VIEW genel yapısı;
Sonuçta burada da tabloları JOIN ile bağlamak gerekiyor
VIEW genel yapısı;
Kod: Tümünü seç
create view new_view ( _fields_ )
as
select _fields_ from _table_name_
where _conditions_
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Re: viewler?
Arkasaşlar uzun süreden beri formu takip ediyorum hatta firebird i buradan öğrendim diyebilirim
1 ay gibi kısa bir sürede öğrendim sanırım hatta bir proje yazdım ve bir firmada kullanılıyor yaklaşık 20 bilgisayar üzerinden internettende kullanım var uzaktan erişim yaptığım en iyi proje diyebilirim.
Bu arda bu gün üye olabilidim daha önceleri kapalıydı üyelik kısmı hatta 2 sene öncede üye olmuştum ama kullanıcı adımı ve mailimi bile hatırlamıyorum şimdi neyse
mesleğim muhasebe ama 20 yıldır da programcılık işi ile amatörce uğrşıyorum son 5 yılı profesyonelce yani para kazanmak için vs.vs.vs.
şimdi projemde hiç wiev kullanmadım ama kullanmam gerekiyor gibime gelbi bir konu var ki sanki ancak bununla çözebilirim. bu nedenle bir kaç sorum olacak sizlere yardımcı olursanız sevinirim.
Delphi 7 kullanıyorum lisanslı bu işe başlar başlamaz lisansını aldım bundan önce bde kullanarak küçük projeler yaptım şimdi FB kullanıyorum
1 wiev lere dışardan parametre göndrebiliyormuyuz
2-wiev leri bir table gibi tekrar sorulayabiliyormuyuz
3-wiev deki datalar ne zaman hazırlanıyor kayıt girerken mi wievi kullandığım andamı ?
şimdiden teşekkürler
1 ay gibi kısa bir sürede öğrendim sanırım hatta bir proje yazdım ve bir firmada kullanılıyor yaklaşık 20 bilgisayar üzerinden internettende kullanım var uzaktan erişim yaptığım en iyi proje diyebilirim.
Bu arda bu gün üye olabilidim daha önceleri kapalıydı üyelik kısmı hatta 2 sene öncede üye olmuştum ama kullanıcı adımı ve mailimi bile hatırlamıyorum şimdi neyse
mesleğim muhasebe ama 20 yıldır da programcılık işi ile amatörce uğrşıyorum son 5 yılı profesyonelce yani para kazanmak için vs.vs.vs.
şimdi projemde hiç wiev kullanmadım ama kullanmam gerekiyor gibime gelbi bir konu var ki sanki ancak bununla çözebilirim. bu nedenle bir kaç sorum olacak sizlere yardımcı olursanız sevinirim.
Delphi 7 kullanıyorum lisanslı bu işe başlar başlamaz lisansını aldım bundan önce bde kullanarak küçük projeler yaptım şimdi FB kullanıyorum
1 wiev lere dışardan parametre göndrebiliyormuyuz
2-wiev leri bir table gibi tekrar sorulayabiliyormuyuz
3-wiev deki datalar ne zaman hazırlanıyor kayıt girerken mi wievi kullandığım andamı ?
şimdiden teşekkürler
Re: viewler?
Merhaba,
View'ları bir select cümlesi gibi düşünebilirsin.
1. Dışardan parametre almazlar.
2. Tekrar sorgulama derken??? İstediğiniz kadar çalıştırabilirsiniz.
3. View'ların sadece metni tutulur. Veriler çalıştırdığınız anda ilgili tablolardan, o an çekilir.
Kolay gelsin.
View'ları bir select cümlesi gibi düşünebilirsin.
1. Dışardan parametre almazlar.
2. Tekrar sorgulama derken??? İstediğiniz kadar çalıştırabilirsiniz.
3. View'ların sadece metni tutulur. Veriler çalıştırdığınız anda ilgili tablolardan, o an çekilir.
Kolay gelsin.
Re: viewler?
ilginiz İçin çok teşekkür ederim
seviyeli bir form olduğunda söylemek isterim
hemen hemen bir çok programcı muhasebe ile ilgili biraz çalışma yapmıştır. muhasebe bilindiği üzere ana hesaplar ve bunlara bağlı alt hesaplar hatta alt hesaplara bağlı başka alt hesaplarda vardır.
yani hesapplanından bahsediyorum.
100 ana hesap
100.01 1 seviye al hesap
100.01.001 2 seviye alt hesap
ve devam edip gidebilir
kaçıncı seviyeye kadar alt hesap olacağı kullanıcıya bağlıdır. bazen alt hesap kullanılmayabilir de
işte bende projemde böyle bir yapı kullandım. buarada bir hesapların tutulduğu tablo var birde buna bağlı hesap hareketlerinin tutulduğu tablo
hesaplarda tüm seviyedeki hesaplar üste hesap alanı ile birbirine bağlı durumda kayıtlııdır ancak hareketler tablosunda sadece en alt seviye hesap bilgisi mevcuttur. konu hakkında bilgisi olmayanlar varsa açıklamak amacı ile anlattım bunları.
şimdi böyle bir yapıda mizan denen bir rapor alınması lazım
bu da anahesaplar ve tüm alt hesaplar listede görünecek ve her hesabın hareket tutarı ilgili üste hesaplara işlenecek bunu triger ile yaptım zaten ama mizan alırken hareketlerde tarih kısıtlamasıverilmesi gerekiyor
bu durumda bütün herketleri bir sorgu ile grup by kullanarak sorguluyoruz ama bu durumu da sadece alt hesaplar geliyor bu işlemin sonucunda oluşan tutarları ilgili üste hesaplara işleyerek üste hesaplarında birlikte görüleceği bir sorgu oluşturmak istiyorum ama bi tirülü yapamadım sorgu ile
boş bir table oluşturup isine tüm hesap planını kayıt edip sonrada gruplandırılmış hareketleri buna kayıt ediyorum ve triger iler üste hesaplara işletiyorum bu işimi çözüyor ama düşünün bu sorguyu günde bir kaç kez aldığınızı table deki bütün değerleri silin sonra yeniden kayıt edip değgerleri işletin ve hesap planının da 50.000 kayıtlı bir kayıt sayısı olsun bu tabi uzun sürüyor ve veri tabanın boyutunu da etkiliyor boyut pek önemli değil ama sorgu ile yapmak varken neden böyle yapayım diye düşündüm ne dersiniz bunu wiev ile yapma imkanımız var mıdır yani bir wiev oluşturup sonrada bun table gibi kullanıp tekrar sorgulama yapmak gibi aklıma böyle geldi bu konuda ne yapabiliriz
şimdiden teşekkürler
seviyeli bir form olduğunda söylemek isterim
hemen hemen bir çok programcı muhasebe ile ilgili biraz çalışma yapmıştır. muhasebe bilindiği üzere ana hesaplar ve bunlara bağlı alt hesaplar hatta alt hesaplara bağlı başka alt hesaplarda vardır.
yani hesapplanından bahsediyorum.
100 ana hesap
100.01 1 seviye al hesap
100.01.001 2 seviye alt hesap
ve devam edip gidebilir
kaçıncı seviyeye kadar alt hesap olacağı kullanıcıya bağlıdır. bazen alt hesap kullanılmayabilir de
işte bende projemde böyle bir yapı kullandım. buarada bir hesapların tutulduğu tablo var birde buna bağlı hesap hareketlerinin tutulduğu tablo
hesaplarda tüm seviyedeki hesaplar üste hesap alanı ile birbirine bağlı durumda kayıtlııdır ancak hareketler tablosunda sadece en alt seviye hesap bilgisi mevcuttur. konu hakkında bilgisi olmayanlar varsa açıklamak amacı ile anlattım bunları.
şimdi böyle bir yapıda mizan denen bir rapor alınması lazım
bu da anahesaplar ve tüm alt hesaplar listede görünecek ve her hesabın hareket tutarı ilgili üste hesaplara işlenecek bunu triger ile yaptım zaten ama mizan alırken hareketlerde tarih kısıtlamasıverilmesi gerekiyor
bu durumda bütün herketleri bir sorgu ile grup by kullanarak sorguluyoruz ama bu durumu da sadece alt hesaplar geliyor bu işlemin sonucunda oluşan tutarları ilgili üste hesaplara işleyerek üste hesaplarında birlikte görüleceği bir sorgu oluşturmak istiyorum ama bi tirülü yapamadım sorgu ile
boş bir table oluşturup isine tüm hesap planını kayıt edip sonrada gruplandırılmış hareketleri buna kayıt ediyorum ve triger iler üste hesaplara işletiyorum bu işimi çözüyor ama düşünün bu sorguyu günde bir kaç kez aldığınızı table deki bütün değerleri silin sonra yeniden kayıt edip değgerleri işletin ve hesap planının da 50.000 kayıtlı bir kayıt sayısı olsun bu tabi uzun sürüyor ve veri tabanın boyutunu da etkiliyor boyut pek önemli değil ama sorgu ile yapmak varken neden böyle yapayım diye düşündüm ne dersiniz bunu wiev ile yapma imkanımız var mıdır yani bir wiev oluşturup sonrada bun table gibi kullanıp tekrar sorgulama yapmak gibi aklıma böyle geldi bu konuda ne yapabiliriz
şimdiden teşekkürler
İzlen
Re: viewler?
ayrıca tekrar sorgulama derken
diyelim ki LISTE isimli bir wiev imiz var (select kodu,adı,borc,alacak from hesap_plani order by kodu) şeklinde olsun sorgusu
bu LISTE isimli wiev i table gibi düşünüp
select kodu,borc,alacak from LISTE group by kodu
şeklinde bir sorguyu bu wiev üstünde çalıştırabilirmiyiz.?
demek istemiştim
Tekrar teşekkürler
diyelim ki LISTE isimli bir wiev imiz var (select kodu,adı,borc,alacak from hesap_plani order by kodu) şeklinde olsun sorgusu
bu LISTE isimli wiev i table gibi düşünüp
select kodu,borc,alacak from LISTE group by kodu
şeklinde bir sorguyu bu wiev üstünde çalıştırabilirmiyiz.?
demek istemiştim
Tekrar teşekkürler
İzlen
Re: viewler?
izlen view olayını anlamamışsın...view falan kullanmana gerek yok....projende....eğer farklı tabloları birleştirip kayıt göstermek istiyorsan şöyle bir sorgu işini görecektir...
"select id,borc,alacak,adi,vergi_no from hesaplar inner join musteriler on musteriler.mid=hesaplar.id"
gibi....
Bunu nasıl kullanacam diyorsan bu sql cümlesini Query'nin SQL özelliğinie yaz....neticeyi tablonda göreceksin....
Yalnız join li Query ler insert,edit yapamaz...sadece sorgularda listelerde kullan ....
"select id,borc,alacak,adi,vergi_no from hesaplar inner join musteriler on musteriler.mid=hesaplar.id"
gibi....
Bunu nasıl kullanacam diyorsan bu sql cümlesini Query'nin SQL özelliğinie yaz....neticeyi tablonda göreceksin....
Yalnız join li Query ler insert,edit yapamaz...sadece sorgularda listelerde kullan ....
Re: viewler?
doğrudur ama benim istediğimi de siz anlamadınız sanırım çünki bir ticari programı kople bitirdim ve çalışır drumda 20 client kullanıyor zaten
sadece bazı şeyleri hızlı yapmak için uğraşıyorum şu sıra yoksa sorgu ile ilgili sorunum yok
15-20 kelimeden ibaret sql yabancı dilini çat pat çözdüm sayılır
şu durumu bir bak istersen
CREATE PROCEDURE MIZAN_OLUSTUR (
IN_KULLANICI_IDX INTEGER,
IN_ILK_TARIH DATE,
IN_SON_TARIH DATE)
AS
DECLARE VARIABLE VR_IDX INTEGER;
DECLARE VARIABLE VR_HESAP_SEVIYESI INTEGER;
DECLARE VARIABLE VR_UST_HESAP_IDX INTEGER;
DECLARE VARIABLE VR_BORC DOUBLE PRECISION;
DECLARE VARIABLE VR_ALACAK DOUBLE PRECISION;
DECLARE VARIABLE VR_GIREN DOUBLE PRECISION;
DECLARE VARIABLE VR_CIKAN DOUBLE PRECISION;
DECLARE VARIABLE VR_HSP_IDX INTEGER;
BEGIN
DELETE FROM MIZAN WHERE MIZAN.KULLANICI_IDX=:IN_KULLANICI_IDX;
FOR SELECT
MUHASEBE_HESAP_PLANI.IDX,
MUHASEBE_HESAP_PLANI.UST_HESAP_IDX,
MUHASEBE_HESAP_PLANI.HESAP_SEVIYESI
FROM MUHASEBE_HESAP_PLANI
ORDER BY MUHASEBE_HESAP_PLANI.IDX
INTO VR_IDX,VR_UST_HESAP_IDX,VR_HESAP_SEVIYESI DO
BEGIN
INSERT INTO
MIZAN (IDX,BORC_TUTARI,ALACAK_TUTARI,GIREN_MIKTAR,CIKAN_MIKTAR,TOPLAM_BORC,TOPLAM_ALACAK,BAKIYE_BORC,BAKIYE_ALACAK,HESAP_SEVIYESI,UST_HESAP_IDX,
ILK_TARIH,SON_TARIH,KULLANICI_IDX)
VALUES (:VR_IDX,'0','0','0','0','0','0','0','0',:VR_HESAP_SEVIYESI,:VR_UST_HESAP_IDX,:IN_ILK_TARIH,:IN_SON_TARIH,:IN_KULLANICI_IDX);
END
FOR SELECT
MUHASEBE_HESAP_HAREKET.HESAP_IDX,
SUM(MUHASEBE_HESAP_HAREKET.BORC_TUTARI),
SUM(MUHASEBE_HESAP_HAREKET.ALACAK_TUTARI),
SUM(MUHASEBE_HESAP_HAREKET.GIREN_MIKTAR),
SUM(MUHASEBE_HESAP_HAREKET.CIKAN_MIKTAR)
FROM MUHASEBE_HESAP_HAREKET
WHERE MUHASEBE_HESAP_HAREKET.ISLEM_TARIHI BETWEEN :IN_ILK_TARIH AND :IN_SON_TARIH
GROUP BY MUHASEBE_HESAP_HAREKET.HESAP_IDX
INTO
VR_HSP_IDX,
VR_BORC,
VR_ALACAK,
VR_GIREN,
VR_CIKAN
DO
BEGIN
UPDATE MIZAN
SET MIZAN.BORC_TUTARI =:VR_BORC,
MIZAN.ALACAK_TUTARI =:VR_ALACAK,
MIZAN.GIREN_MIKTAR =:VR_GIREN,
MIZAN.CIKAN_MIKTAR =:VR_CIKAN
WHERE (MIZAN.IDX = :VR_HSP_IDX) AND (MIZAN.KULLANICI_IDX=:IN_KULLANICI_IDX);
END
UPDATE MIZAN
SET MIZAN.TOPLAM_BORC =MIZAN.BORC_TUTARI,
MIZAN.TOPLAM_ALACAK =MIZAN.ALACAK_TUTARI,
MIZAN.BAKIYE_BORC =CASE WHEN (MIZAN.BORC_TUTARI) > (MIZAN.ALACAK_TUTARI) THEN (MIZAN.BORC_TUTARI) - (MIZAN.ALACAK_TUTARI) ELSE 0 END ,
MIZAN.BAKIYE_ALACAK =CASE WHEN (MIZAN.ALACAK_TUTARI) > (MIZAN.BORC_TUTARI) THEN (MIZAN.ALACAK_TUTARI) - (MIZAN.BORC_TUTARI) ELSE 0 END
WHERE (MIZAN.HESAP_SEVIYESI = 0) AND (MIZAN.KULLANICI_IDX=:IN_KULLANICI_IDX);
SUSPEND;
END^
dikkat ederseniz MIZAN tabalesi var bi tane bilgilerini HESAP HAREKETLERI dosyasından alıp hallediyorum yani düşün 50.000 adet kayıt bulunan bir hesap planınıa update yapmak ki bunun hareketleri ise milyonlarca olabilir hareketin adedi pek önemli değil grup by ile alıyoruz zaten sonuçta hesap planındaki kayıttan daha az bir kayıt sayısı var burda
meseleyi anladınız mi bilmem
mesele MIZAN table sine yaptığım INSERT, UPDATE olayı yerine bu işi sadece bir sorgu ile halletmek
teşekkürler
sadece bazı şeyleri hızlı yapmak için uğraşıyorum şu sıra yoksa sorgu ile ilgili sorunum yok
15-20 kelimeden ibaret sql yabancı dilini çat pat çözdüm sayılır
şu durumu bir bak istersen
CREATE PROCEDURE MIZAN_OLUSTUR (
IN_KULLANICI_IDX INTEGER,
IN_ILK_TARIH DATE,
IN_SON_TARIH DATE)
AS
DECLARE VARIABLE VR_IDX INTEGER;
DECLARE VARIABLE VR_HESAP_SEVIYESI INTEGER;
DECLARE VARIABLE VR_UST_HESAP_IDX INTEGER;
DECLARE VARIABLE VR_BORC DOUBLE PRECISION;
DECLARE VARIABLE VR_ALACAK DOUBLE PRECISION;
DECLARE VARIABLE VR_GIREN DOUBLE PRECISION;
DECLARE VARIABLE VR_CIKAN DOUBLE PRECISION;
DECLARE VARIABLE VR_HSP_IDX INTEGER;
BEGIN
DELETE FROM MIZAN WHERE MIZAN.KULLANICI_IDX=:IN_KULLANICI_IDX;
FOR SELECT
MUHASEBE_HESAP_PLANI.IDX,
MUHASEBE_HESAP_PLANI.UST_HESAP_IDX,
MUHASEBE_HESAP_PLANI.HESAP_SEVIYESI
FROM MUHASEBE_HESAP_PLANI
ORDER BY MUHASEBE_HESAP_PLANI.IDX
INTO VR_IDX,VR_UST_HESAP_IDX,VR_HESAP_SEVIYESI DO
BEGIN
INSERT INTO
MIZAN (IDX,BORC_TUTARI,ALACAK_TUTARI,GIREN_MIKTAR,CIKAN_MIKTAR,TOPLAM_BORC,TOPLAM_ALACAK,BAKIYE_BORC,BAKIYE_ALACAK,HESAP_SEVIYESI,UST_HESAP_IDX,
ILK_TARIH,SON_TARIH,KULLANICI_IDX)
VALUES (:VR_IDX,'0','0','0','0','0','0','0','0',:VR_HESAP_SEVIYESI,:VR_UST_HESAP_IDX,:IN_ILK_TARIH,:IN_SON_TARIH,:IN_KULLANICI_IDX);
END
FOR SELECT
MUHASEBE_HESAP_HAREKET.HESAP_IDX,
SUM(MUHASEBE_HESAP_HAREKET.BORC_TUTARI),
SUM(MUHASEBE_HESAP_HAREKET.ALACAK_TUTARI),
SUM(MUHASEBE_HESAP_HAREKET.GIREN_MIKTAR),
SUM(MUHASEBE_HESAP_HAREKET.CIKAN_MIKTAR)
FROM MUHASEBE_HESAP_HAREKET
WHERE MUHASEBE_HESAP_HAREKET.ISLEM_TARIHI BETWEEN :IN_ILK_TARIH AND :IN_SON_TARIH
GROUP BY MUHASEBE_HESAP_HAREKET.HESAP_IDX
INTO
VR_HSP_IDX,
VR_BORC,
VR_ALACAK,
VR_GIREN,
VR_CIKAN
DO
BEGIN
UPDATE MIZAN
SET MIZAN.BORC_TUTARI =:VR_BORC,
MIZAN.ALACAK_TUTARI =:VR_ALACAK,
MIZAN.GIREN_MIKTAR =:VR_GIREN,
MIZAN.CIKAN_MIKTAR =:VR_CIKAN
WHERE (MIZAN.IDX = :VR_HSP_IDX) AND (MIZAN.KULLANICI_IDX=:IN_KULLANICI_IDX);
END
UPDATE MIZAN
SET MIZAN.TOPLAM_BORC =MIZAN.BORC_TUTARI,
MIZAN.TOPLAM_ALACAK =MIZAN.ALACAK_TUTARI,
MIZAN.BAKIYE_BORC =CASE WHEN (MIZAN.BORC_TUTARI) > (MIZAN.ALACAK_TUTARI) THEN (MIZAN.BORC_TUTARI) - (MIZAN.ALACAK_TUTARI) ELSE 0 END ,
MIZAN.BAKIYE_ALACAK =CASE WHEN (MIZAN.ALACAK_TUTARI) > (MIZAN.BORC_TUTARI) THEN (MIZAN.ALACAK_TUTARI) - (MIZAN.BORC_TUTARI) ELSE 0 END
WHERE (MIZAN.HESAP_SEVIYESI = 0) AND (MIZAN.KULLANICI_IDX=:IN_KULLANICI_IDX);
SUSPEND;
END^
dikkat ederseniz MIZAN tabalesi var bi tane bilgilerini HESAP HAREKETLERI dosyasından alıp hallediyorum yani düşün 50.000 adet kayıt bulunan bir hesap planınıa update yapmak ki bunun hareketleri ise milyonlarca olabilir hareketin adedi pek önemli değil grup by ile alıyoruz zaten sonuçta hesap planındaki kayıttan daha az bir kayıt sayısı var burda
meseleyi anladınız mi bilmem
mesele MIZAN table sine yaptığım INSERT, UPDATE olayı yerine bu işi sadece bir sorgu ile halletmek
teşekkürler
İzlen
Re: viewler?
rsimsek hocam dan bu metni
create view new_view ( _fields_ )
as
select _fields_ from _table_name_
where _conditions_
diger arkadastan da
"select id,borc,alacak,adi,vergi_no from hesaplar inner join musteriler on musteriler.mid=hesaplar.id"
birlestirerek :
tskler
create view new_view ( _fields_ )
as
select _fields_ from _table_name_
where _conditions_
diger arkadastan da
"select id,borc,alacak,adi,vergi_no from hesaplar inner join musteriler on musteriler.mid=hesaplar.id"
birlestirerek :
tskler
Garibanus
Re: viewler?
Ama ben hala bir çözüm bulamadım arkadaşlar yukarıda yazdığım sorguyu tabloya yazdırmadan sorgulamak istiyorum
Re: viewler?
Öncelikle VIEW kullanmak gerekmiyor. Sonuçta VİEW'lar da bir SELECT komutudur. Ama istersen kullanabilirsin.
Şu SELECT komutunu incelersen (bilhassa LIKE fonksiyonunun kullanımını) istediğin sonuca varabilirsin.
İyi çalışmalar.
Şu SELECT komutunu incelersen (bilhassa LIKE fonksiyonunun kullanımını) istediğin sonuca varabilirsin.
Kod: Tümünü seç
SELECT
T1.HESAP_KODU,
(SELECT T2.BORC FROM HESAP_DETAY T2 WHERE T2.HESAP_KODU LIKE T1.HESAP_KODU || '%') AS BORC,
(SELECT T3.ALACAK FROM HESAP_DETAY T3 WHERE T3.HESAP_KODU LIKE T1.HESAP_KODU || '%') AS ALACAK
FROM HESAPLAR T1
Re: viewler?
Evet bu şekilde bir çözüm olabilecek gibi sanırım ama hesap detay kısımında hesabın kodu ile ilgili bir alan yok sadece hesaba ait referans numarası var
İzlen