Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Ghaldszar' ın Access soruları köşesi


ghaldszar

Öne çıkan mesajlar

Formlarda Malzeme ismini gireceğin kutucuğu combo box yaparsan girme sırasında var olanları bastığın her karaktere göre eliyerek sunacaktır zaten access. Yani malzeme ismi kutusuna geldiğinde hiçbir karakter girmezsen MalzemeID'deki tüm kayıtlar, z'ye bastığında zil, zincir, zar, zurna, sonra i'ye bastığında zil ve zincir, n'ye bastığında da sadece zinciri gösterecektir.

MalzemeID'de olmayan bir kayıtı girmek istediğinde kurduğun ilişkilendirmeye göre, MalzemeID'de böyle bir kayıt yok diye bir uyarı alman ve de orada olan bir kaydı seçinceye kadar ilerleyememen ya da MalzemeID'de değil ama talep tablosunda görünecek bir şekilde yeni bir Malzeme ismi girmen olası. Peki bu fark nasıl oluşur diye sorarsan Relations'da kurduğun ilişkiyi simgeliyen çizgi üzerinde sağ tıklarsan ilişkileri düzenleyebileceğin bir menü açılır. Aynı olay ilişki kurulurken de açılır gerçi. Neyse burada Enforce Referential Integrity'yi seçtiğinde kurulan ilişki anlam kazanır. (LOL bu ne be yav, güzin abla gibi hissettim kendimi)

İşte bu aşamada ilk belirttiğim durum yani MalzemeID tablosunda olmayan bir malzeme ismi vermen durumunda access'in yolunu kesip hayıır illa bunlardan birini seçeceksin demesi gerçekleşir. Zira artık ilişki one to many yani MalzemeID'lerinden sadece 1 tanesi birden fazla talepde kullanılabilir ilişkisini oluşturmuş olursun. Bu aslında kıl bir durumdur ama inanılmaz düzenlidir. MalzemeID'de olmayan bir ürünün talebini asla gerçekleştiremezsin. Dahası eğer Enforce Referential Integrity'nin altındaki Cascede Update ve Delete Related Fields ve records'ların yanındaki tikler de seçili ise tadından yenmez. Neden mi? Çünki Malzeme tablosunda MalzemeID'lerde yapacağın değişiklik ve/veya kayıt silinmesi durumunda talep tablosu da güncellenir.

Ancak bu tad "bitter sweet" bir taddır. Neden? Çünki Malzeme ID'de bir kaydın silinmesi o talebin de silinmesi anlamına gelir. Ama ayarlanabilir bir seçenek yani istersen böyle bir olayın önüne o tiki kaldırarak geçebilirsin. (Evet burayı çok iğrenç anlattım ama idare et artık)

Peki diğer durum? Diğer durum ilişkilerin senin resmini de koyduğun halde kurulması durumunda oluşur. MalzemeID olarak istediğini girebilirsin. Farklı girilmiş malzeme adı sadece talep tablosunda görünür. Ancak Malzeme tablosunda bulunan MalzemeID'lerini de görüp kullanabilirsin. Yeni girdiğin kayıt Malzeme tablosuna işlenmez.

Sonuç itibarı ile birinci durumu tercih etmen daha mantıklı. Düzen önemli. Ayrıca Malzeme tablosunu güncellemiyorsak yeni malzemenin sadece talepde görünmesinin bize bir faydası yok. Malzeme tablosunu babasının hayrına oluşturmadık herhalde. O zaman referential integrity'yi devreye sokacağız ve olmayan bir malzemenin girilmesi gerektiğinde malzeme bilgileri giriş ekranını çağırmamız gerekecek.

Bu aşamada yine VB kodu üretmek gerekiyor. Malzeme ismini girdin ancak bu malzeme Malzeme tablosunda bulunmuyor, bunu Access ne zaman fark ediyor? Tabiki odak kaybolunca. Dolayısı ile Eventlerden Lost Focus'a bir VB kodu derlemen gerekecek. Kod basit olarak şöyle olabilir;

Dim uyar As Variant

If IsNull(MalzemeID.Value) Or MalzemeID.Value = DLookup("[MalzemeID]", "Malzemeler", "[MalzemeID] = MalzemeID.Value") Then
Else
uyar = MsgBox("Malzeme yok. Yeni malzeme olarak tanımlar mısın?", vbQuestion + vbYesNo, "Malzeme Yok")
If warn = vbYes Then
Dim stDocName As String

stDocName = "Macro1" //Macro1'de Malzeme giriş formunu açmayı tanımlayacaksın.
DoCmd.RunMacro stDocName
Else
MsgBox "Hayırı seçtiniz allah kolaylık versin, ben inatçıyım olmayan malzemeyi seçmeden devam edemezsin.", vbOKOnly, "Malzeme Yok"
End If
End If

Bu kod ile olmayan malzeme girilme teşebbüsü olursa onun tanımlanmasını sağlarsın. Tanımlayıp yeni malzeme giriş ekranını kapadığında talep formuna geri dönüp yeni malzemeni kullanabilirsin.

İlişkiler tablon gayet iyi, başlangıç için. En azından mantığını anladın sanırım. İlişkilerine anlam verirsen daha iyi olacak, ve tabiki daha karmaşık ve zor.[signature][hline]In God I Trust
For Rest I Just Test
Link to comment
Sosyal ağlarda paylaş

  • 3 hafta sonra ...
Valla bir kitaptan çok fazlası var burada.
10 post sonra tek eser olacak bence Access uzerine.
Kaç tane kitap aldım burada anlatılanların onda biri olsa simdiye coktan bitirmiştim

Bu aralar acayip acayip işler veriyorlar yoksa oturup bitiricem ama
Neyse her bos anımda biraz daha ilerleyip sorularım devam edecek haberiniz olsun yani.
Link to comment
Sosyal ağlarda paylaş

Bu sene üni de database dersinde SQL için ACCESS görüyoruz (mühendis olarak iş bulamazsak sekreter oluruz diye herhalde). Daha işin başında olsam da elimden geldiğince sorularını cevaplayayım, hala ihtiyacın varsa tabii[signature][hline]Double, double, toil, and trouble
Fire burn and caldron bubble
Link to comment
Sosyal ağlarda paylaş

Hala ihityacim var valla.
Aslinda çoktan bitmesi gerekirdi
fakat
sagolsunlar üstüme acayip acayp işler yıkıyorlar ki kıçım 2 dakika yer görmüyor.
Bu işe de her başlamak 1 saat alıyor. Nasıl devasm edicek bilmiyorum ama etmesi gerek çünkü o yapacağım dosyanın yapacağı şeyler benden direk beklenen şeyler. Maalesef bu malzeme bilgimle ve bu iş angaryaları arasında aklımdan yapılması bekleniyor ki benim için imkansız. O yüzden bu access dosyası olmazsa olmazlardan.

Not: Özel mesaj sistemine bazı problemler yüzünden haftada bir kere girebiliyorum kullandığım bilgisayarların bazı abuklukları yüzünden. O yüzden mesajlarınızı görmem ve cevap vermem pek mümkün olmuyor. Yardım teklifinde bulunanlara teşekkür ediyorum. Fakat özel mesaj yerine u topici kullanırsanız daha çok sevinirim çünkü özellikle işyerinde hiç bir şekilde özel mesajları göremiyorum.
Bu arada her tür yardıma açığım sormanıza bile gerek yok. Ölmüşüm ağlayanım yok durumlarındayım zaten.
Link to comment
Sosyal ağlarda paylaş

×
  • Yeni Oluştur...