Tek Seferde Alt Alta Kayıt Ekleme Sorunu

24/08/2018, 15:38

Allback

Merhaba,

Mevcutta kullanmakta olduğumuz matbu formun bir benzerini Access ile yapıp, yapılan harcamaları kayıt altına almak istiyorum.
Matbu formdaki 7 satır gibi alt alta açılan kutularımı ve metin kutularımı oluşturdum.

Buradaki verileri aynı id numarası ile tabloya alt alta eklemek istiyorum ama sadece 1. satırdaki veriler ekleniyor.
Her bir satır için ayrı insert komutu yazıyorum ama olmuyor...
Dolu olan satırların eklenip boş olanların eklenmemesini nasıl sağlayabilirim.
24/08/2018, 17:50

mehmetdemiral

Tablonuzdaki benzersiz alan olan id birimi sadece bir kez tekrarlanabilen bir kayıta izin verir. Oysa siz 7 satır kaydetmek istiyorsunuz. Bu durumda alt form kullanarak bire çok ilişki kullanmalısınız. Yani ana değerlerin kaydolduğu bir ana tablo, bir de bu tabloya id değeri üzerinden bağlanmış bir diğer tablo. Tabi ki bu durumda bir ana form ve ona bağlı bir altform yapmalısınız.
24/08/2018, 21:17

Allback

Bilgisayar basında değilim. O yüzden deneyemiyorum ama benzersiz alan olarak yapmazsam belki o zaman kaydeder
25/08/2018, 02:14

mehmetdemiral

Teorik olarak mantıklı ancak id numarasını her kayıtta arttırmanız lazım. Ama yine söylüyorum, doğru yöntem bu değil. Mantıklı olarak bu tablonun şişmesine neden olursunuz. Zaten şu anda seçilen malzemeleriniz uzun adlarıyla yeniden tabloya kaydediliyor. Oysa sadece kodları ya da varsa id'leri kaydedilmeli ki bu tablo şişmesin. Bir de her kalem malzeme için tüm kriterler birer alt kayıt olarak yeniden kaydedilecek ki, tablo ne zaman göçer bilemem. Oysa bir tabloya sadece benzersiz id no,  form numarası, tarih, talep eden ve onaylayan bilgileri ve toplam tutar bir kez kaydedilse; diğer bağlı tabloya da diğer tablodaki benzersiz id ( ama bu tabloda benzersiz olmasın), grup id'si, malzeme id'si, miktarı, fiatı (sonradan yapılan fiat güncellemelerinde mevcut kayıtlardaki fiatlar değişmesin diye) kaydedilse, bu durumda birbirine bağlı veriler tablolardan sorgularla çekilse.... Doğrusu budur. Bu durumda örnek olarak ana tablonuzdaki veriler şöyle olacaktır:

id: Benzersiz sayı
tarih: 25.08.2018
tutar:  Bu alt tablodaki tüm kayıtların ve miktarın çarpımından elde edilen parasal toplam bedel. 
talep eden: AHMET ÇALIK
Onaylayan : METİN TEKİN

Ben olsam bu kişileri de başka tablolardan çağırıp, onların yerine de tabloya sayısal değerler atardım ya, hadi neyse; o kadar kafanızı karıştırmayayım
BU durumda alt formunuza bağlı tabloda da yapı şöyle olacaktı: Sayı değerleri örnek olarak yazılmıuştır

kayıt_id :Benzersiz sayı (bu her kalem alt malzeme girişine ait id değeridir. Diğer tablodaki benzersiz id değeriyle karıştırmayın)
id: 1 (Bu değer de diğer tablodaki id değerini aynen taşımalı ki, iki tablonun akrabalık bağları burdan yakalansın. Soy ağacı yani )
Grup no: 1  (sayısal değer)
malzeme no:  10  (Malzeme tablonuzdaki no alanı)
fiat: 0,55 (10 nolu malzemenin tablodan gelen fiatı
miktar : 5 (mesela)

Şİmdi diyeceksiniz ki, bazı değerler nerde? E, onlar tabloda var zaten. Bir seçme sorgusu üzerinden sadece malzeme id değeriyşe ambar kodunu da, birim değerini de vs. getirmekte sıkıntı yok. Onları tabloya tekrar kaydetmeye ne gerek var? Bu, tc kimlik numarası getirip tüm işlemleri tek numaradan çağırmak varken, bir dosya sırtlığına ana adı-baba adı- doğum yer, doğum tarihi, sicil no, emekli no gibi her şeyi yazdırıp, tc kimliği de altına ekleten memurun işine döner. Bu tc kimlik numarası aslında tüm bunları yazmamak için bulunmadı mı? Yeniden hepsini yazdıran, utanmadan altına da tc kimliği yazdıran bankacıya anlatmıştım bunu ))
25/08/2018, 08:26

Allback

Mehmet hocam yardımlarınız için çok teşekkürler.
İlk yorumunuzdaki gibi "id" alanından birincil anahtarı kaldırınca sorun çözüldü.

Formun açıldığında olayına ve kaydet butonuna aşağıdaki kodu ekledim.
Böylece id alanını her seferinde 1 arttırarak kayıt ekliyorum.

txid = Nz(DMax("id", "malzeme_istek_tablosu"), 0) + 1


Aslında formun şişeceği düşüncesi benim de kafamda soru işaretleri oluşturmuyor değil.
Ama alt form olayını bilmediğim için pek bulaşmak istemedim.
En azından sorgularla çağırdığım malzeme adlarını sayısal değerler ile kayıt edebilirim. 
Tablonun şişmesi biraz daha azalabilir belki o zaman.