viewler?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

viewler?

Mesaj gönderen Vital »

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..
Garibanus
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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ı;

Kod: Tümünü seç

create view new_view ( _fields_ )
as
select _fields_ from _table_name_
where _conditions_
Sonuçta burada da tabloları JOIN ile bağlamak gerekiyor :roll:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

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
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7587
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: viewler?

Mesaj gönderen mussimsek »

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.
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

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
İzlen
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

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
İzlen
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: viewler?

Mesaj gönderen Battosai »

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 ....
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

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
İzlen
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: viewler?

Mesaj gönderen Vital »

tskler arkadaslar bu arada olayi cozdum sayenizde :))
Garibanus
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

Nasıl çözdüğünü yazarsan belki diğer arkadaşlara da faydası olur :)
İzlen
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: viewler?

Mesaj gönderen Vital »

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
Garibanus
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

Ama ben hala bir çözüm bulamadım arkadaşlar yukarıda yazdığım sorguyu tabloya yazdırmadan sorgulamak istiyorum :)
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: viewler?

Mesaj gönderen Hakan Can »

Ö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.

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
İyi çalışmalar.
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: viewler?

Mesaj gönderen IZLEN »

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
Cevapla