Accessle ilgili bir soru

Kodla Büyü

botett

Süper Üye
Süper Üye
Seçkin Üye
Mesajlar
1,089
Access te iki dosya arasındaki ilişki nasıl kurulur diye bir soru var cevabı ne olabilir ki....
Ben soruyu anlamadım gerçi...
 
Access te tablolar arasında ilişki kurmanın ne amaçla kullanıldığını basit bi şekilde açıklayabilecek varmı arkadaşlar?
birde ilişki kurarken bilgi tutarlılığını zorla, ilişki alanları ardarda güncelle, ilişkili kayıtları ardarda sil seçeneklerinin anlamları?
 
Hocam örnek olarak 3 tablomuz olsun birinde öğrenci bilgileri, ikinci tabloda dersler, üçüncü tabloda öğrencinin notları tutulsun.

OgrBilgi
Id
ogrno*
ogradi
ogrsoyaadi

Dersler
Id
Derskodu**
Dersadi

OgrNotlar
Id
ogrno*
derskodu**
vize1
vize2
final

Hocam büyük veritabanlarında bilgiler birbirine karışmasın, veritabanında bilgiler boş yere tekrar etmesin ve şişmesin diye her bilgi ilgili tabloda tutulur. Bu şekilde tablo yapısı oluşturmaya normalizasyon denir. Normalizasyon yapabilmek için tablolar arasında ilişkiler kurmanız lazım. Yukarıdaki örnekte öğrenci bilgileri, dersler ve öğrenci notları farklı tablolarda olduğu için aralarındaki ilişki * ve ** koyduğum alanlarla sağlanmaktadır. Gelelim sorularınıza;

1) Bilgi Tutarlılığı: Bir öğrencinin notunu gireceğiniz zaman öğrenci bilgileri tablosunda olmayan bir öğrenci numarasına ait not giremezsini, aynı şekilde dersler tablosunda bulunmayan bir ders için not giremezsini. Bilgi tutarlılığı bu demektir. Yani siz 3. tabloya veri girerken diğer tablodaki ilişkili alanları kontrol eder.

2) İlişkili alanları ard arda güncelle: Diyelim ki bir dersin kodunu değiştirmek zorunda kaldınız. siz dersler tablosundaki ders kodunda değişiklik yaptığınızda, öğrenci notları tablosundaki tüm ders kodları otomatik olarak güncellenecekter.

3) ilişkili kayıtları ard arda sil: Örneğin bir öğrenci okuldan ayrıldı, notlarının silinmesi gerekiyor, notlar tablosunda işlem yapmanıza gerek yok. Öğrenci bilgileri tablosundan o öğrenciyi silidğinizde ilişkili tablo olan öğrenci notları tablosundaki o öğrenciye ait tüm notlar silincektir.

Elimden geldiği kadar açıklamaya çalıştım, yine anlamadığınız bir yer olursa cevaplamaya çalışırım.
 
çok teşekkürler fluent hocam cevabınız ve ilginiz için.

bir veritabanı kaç tane kayıt alır acaba, belli sayısı varmıdır?
yaptığım programda her ürün için ayrı tablomu yapsam yoksa bütün ürün hareketlerini aynı tablodamı tutsam karar veremedim.
 
Hocam yaptığınız programdan biraz bahsederseniz fikir verebilirim belki, yalnız her ürün için ayrı bir tablo yapamazsınız sanırım. Çünkü programı kullanan şahıs yeni bir ürün eklemek istediğinde veritabanına nasıl tablo ekleyecek, bunun içinde program içinden veritabanında tablo oluşturtmanız lazım bu mümkünse eğer. biraz bilgi verirseniz yaptığınız program hakkında, veritabanı yapısı hakkında fikir verebiliriz burdan
 
fluent' Alıntı:
Hocam yaptığınız programdan biraz bahsederseniz fikir verebilirim belki, yalnız her ürün için ayrı bir tablo yapamazsınız sanırım. Çünkü programı kullanan şahıs yeni bir ürün eklemek istediğinde veritabanına nasıl tablo ekleyecek, bunun içinde program içinden veritabanında tablo oluşturtmanız lazım bu mümkünse eğer. biraz bilgi verirseniz yaptığınız program hakkında, veritabanı yapısı hakkında fikir verebiliriz burdan

fluent hocam bir lastik şirketi için lastik stok takibi ve müşteri hesaplarını tutacak bir program yapıyorum.
her lastik için lastik hareketlerini, her müşteri için müşteri hareketlerini tutacak birer tablomu mantıklı yoksa ortak bir tablomu? tablodaki verilerin yerleri kendi kendine değişiyor bu normalmi acaba?

http://office.microsoft.com/tr-tr/access-help/HA010341462.aspx
adresinde 32768 nesne alabileceği yazıyor en fazla kafama bu takıldı.

birde Metin alanındaki karakter sayısı en fazla 255 yazıyor, yani bir alana maksimum 255 karakterlik bilgi depolanabilir anlamınamı geliyor bu?
 
Ayrı ayrı tablolar daha mantıklı olacaktır. Ve veri tabanı yönetiminde düzenli ve mantıklı bölmek önemlidir...

32768 nesne alır zaten acces belli bir kayıt sayısından sonra malesef saçmalamaya başlar, büyük projeler için uygun değildir...

Sizin alanlarınız Metin türünde olmak zorunda değil, NOT yaparsınız Metinle Aynı karakterleri alır ancak daha geniştir alanın içeriği...

Tam olarak yapılacak işlemleri anlatırsanız tablolarınızın oluşturulmasına yardım edebiliriz... Programda yapacağınız işlemler neler?

Kolay gelsin...
 
s_kajmeran' Alıntı:
Ayrı ayrı tablolar daha mantıklı olacaktır. Ve veri tabanı yönetiminde düzenli ve mantıklı bölmek önemlidir...

32768 nesne alır zaten acces belli bir kayıt sayısından sonra malesef saçmalamaya başlar, büyük projeler için uygun değildir...

Sizin alanlarınız Metin türünde olmak zorunda değil, NOT yaparsınız Metinle Aynı karakterleri alır ancak daha geniştir alanın içeriği...

Tam olarak yapılacak işlemleri anlatırsanız tablolarınızın oluşturulmasına yardım edebiliriz... Programda yapacağınız işlemler neler?

Kolay gelsin...

kajmeran hocam dediğiniz gibi access benim işimi görmeyecek, çünkü tablodaki kayıtların yerleri kendiliğinden değişiyor.
şimdi paradox tablolarla ilgili kaynak buldum ona çalışıyorum hocam. 250000 veri girdim tabloya tık yok.
araç lastikleri hakkında bilginiz varmı hocam ona göre yapmaya çalıştığım programı anlatmaya çalışacağım.
 
hocam ben tabloları oluşturmaya çalıştım ama firma hakkında detaylı bilgimiz olsa daha güzel bişey çıkar ortaya. Bu arada paradox delphi ve c++ builder ile kurulan database destkop ile yönetilen bir veritabanıdır ve ben accessten daha gelişmiş olduğunu dnüşnümüyorum hocam. Bence kaç adet kayıt aldığı önemli değil birazda, ne kadar veri depolayabildiği önemli. bir tane alan oluşturup hep a yazmak var, 10 tane alan oluşturup hep uzun tamsayı yazmak var.

Eğer .net kullanıyorsanız sqlserver, delphi kullanıyorsanız interbase yi inceleyebilirsiniz hocam. bu arada şöle bir tablo yapısı çıkardım ama çok mu karışık oldu ki. Hatalar, eksikler veya yanlış düşünülmüş bişe varsa düzeltelim arkadaşlar.

Lastik Tablosu: (Lastikid*, lastikmarka, çap, en, boy, uretimyili, tipi, vs.... ) //Çok sayıda lastik markası var ise lastikmarka isimleri başka bir tabloda tutulabilir.
Jant Tablosu: (Jantid*, jantmarka, çap, uretimyili, tipi vs...) //Çok sayıda jant markası var ise jantmarka isimleri başka bir tabloda tutulabilir.
LastikStok Tablosu: (Lastikstokid*, Lastikid**, alistarihi, alisfiyat, satisfiyat, adet vs...)
JantStok Tablosu: (Jantstokid*,Jantid**,alistarihi, alisfiyat,satisfiyat,adet vs..)
satis Tablosu: (satisid*,urunid**,satisadedi,satistarihi,uruntip,musteriid**)
Musteri tablosu: (musteriid*, adi, soyadi, adres, tel, vs...)

Tam anlamıyla firma nasıl çalışıyor bilgimiz olursa daha basit veya karışık bişeyde çıkabilir hocam. Müşteriler peşin mi alacak, yoksa taksitlere mi bölünecek vs..

Bu arada hesap hareketleri için ayrı bir tablo oluşturmadım, zaten stok ve satış tablolarında ürünün ne kadara kaç tane alındığı, kime hangi üründen kaç tane satıldığı mevcut. Kasa hareketlerini sorgularla çekmek daha mantıklı yer kaplamaması açısından diye düşünüyorum. Birde satış tablosunda lastik mi satılıyor yoksa jant mı onu anlamak için satis tablosundaki uruntip kısmına lastik için 0, jant için 1 bilgisini girerseniz hangi ürün satıldığını anlayabilirsiniz hocam.
 
access daha iyi olabilir belki ama tablodaki satırların yerleri kendiliğinden değişiyor hocam, bi bakmışsın son eklenen veri ortalarda bi yerde, en baştaki başka bi yerde. paradox tablo kullanılan programı başka bilgisayarda çalıştırmak için database desktop kurulumu olması gerekiyor?
 
@fluent, hocam sizin yaptığınız veritabanı yapılandırmasında şöyle düzenlemeler olursa daha iyi olur bence...
lastik ve jant tabloları tek tabloda "urun" tablosu adı altında birleştirilsin, "tur" diye bir alan açarsak ürünün tipini burada saklayabiliriz
stok tabloları kaldırılsın, urun tablosunun altında "stok" alanı açılsın
 
fluent' Alıntı:
hocam ben tabloları oluşturmaya çalıştım ama firma hakkında detaylı bilgimiz olsa daha güzel bişey çıkar ortaya. Bu arada paradox delphi ve c++ builder ile kurulan database destkop ile yönetilen bir veritabanıdır ve ben accessten daha gelişmiş olduğunu dnüşnümüyorum hocam. Bence kaç adet kayıt aldığı önemli değil birazda, ne kadar veri depolayabildiği önemli. bir tane alan oluşturup hep a yazmak var, 10 tane alan oluşturup hep uzun tamsayı yazmak var.

Eğer .net kullanıyorsanız sqlserver, delphi kullanıyorsanız interbase yi inceleyebilirsiniz hocam. bu arada şöle bir tablo yapısı çıkardım ama çok mu karışık oldu ki. Hatalar, eksikler veya yanlış düşünülmüş bişe varsa düzeltelim arkadaşlar.

Lastik Tablosu: (Lastikid*, lastikmarka, çap, en, boy, uretimyili, tipi, vs.... ) //Çok sayıda lastik markası var ise lastikmarka isimleri başka bir tabloda tutulabilir.
Jant Tablosu: (Jantid*, jantmarka, çap, uretimyili, tipi vs...) //Çok sayıda jant markası var ise jantmarka isimleri başka bir tabloda tutulabilir.
LastikStok Tablosu: (Lastikstokid*, Lastikid**, alistarihi, alisfiyat, satisfiyat, adet vs...)
JantStok Tablosu: (Jantstokid*,Jantid**,alistarihi, alisfiyat,satisfiyat,adet vs..)
satis Tablosu: (satisid*,urunid**,satisadedi,satistarihi,uruntip,musteriid**)
Musteri tablosu: (musteriid*, adi, soyadi, adres, tel, vs...)

Tam anlamıyla firma nasıl çalışıyor bilgimiz olursa daha basit veya karışık bişeyde çıkabilir hocam. Müşteriler peşin mi alacak, yoksa taksitlere mi bölünecek vs..

Bu arada hesap hareketleri için ayrı bir tablo oluşturmadım, zaten stok ve satış tablolarında ürünün ne kadara kaç tane alındığı, kime hangi üründen kaç tane satıldığı mevcut. Kasa hareketlerini sorgularla çekmek daha mantıklı yer kaplamaması açısından diye düşünüyorum. Birde satış tablosunda lastik mi satılıyor yoksa jant mı onu anlamak için satis tablosundaki uruntip kısmına lastik için 0, jant için 1 bilgisini girerseniz hangi ürün satıldığını anlayabilirsiniz hocam.

tablo yapılarını o kadar emekle yazmışsınız teşekkürler ama benden istenen programda bu kadar detaya gerek yok hocam.
daha basit bir yapı;
önce stok isimleri 165/80/13 Lassa, 165/80/13 Michelin, 175/70/13 Lassa, 22,5x900 jantsa (jant lastik akü diye ayırmaya gerek yok çünkü markadan ne olduğu anlaşılıyor) şeklinde kaydedilecek.

daha sonra her ürün için giriş-çıkış-fatura tarihleri , fatura no, alıcı-satıcı bilgileri kaydedilecek.
her müşteri içinde stok kartları olacak, aldığı ürün, adet fatura no vb şeklinde.
yardımlarınız için gerçekten minnettarım.
 
Rüzgara Karşı'' Alıntı:
@fluent, hocam sizin yaptığınız veritabanı yapılandırmasında şöyle düzenlemeler olursa daha iyi olur bence...
lastik ve jant tabloları tek tabloda "urun" tablosu adı altında birleştirilsin, "tur" diye bir alan açarsak ürünün tipini burada saklayabiliriz
stok tabloları kaldırılsın, urun tablosunun altında "stok" alanı açılsın

stok alanı gerekiyor haklısınız hocam yalnnız türe gerek yok çünkü lastik, jant, akü, zincir üreticileri farklı, yani isimden zaten ne olduğu anlaşılır kullananlar tarafından.

Değerli hocalarım, benim asıl takıldığım nokta hangi veritabanı kullanacağım buna karar veremedim. ben delphide yazıyorum interbase mi kullanmalıyım?
 
wertyu6' Alıntı:
Rüzgara Karşı'' Alıntı:
@fluent, hocam sizin yaptığınız veritabanı yapılandırmasında şöyle düzenlemeler olursa daha iyi olur bence...
lastik ve jant tabloları tek tabloda "urun" tablosu adı altında birleştirilsin, "tur" diye bir alan açarsak ürünün tipini burada saklayabiliriz
stok tabloları kaldırılsın, urun tablosunun altında "stok" alanı açılsın

stok alanı gerekiyor haklısınız hocam yalnnız türe gerek yok çünkü lastik, jant, akü, zincir üreticileri farklı, yani isimden zaten ne olduğu anlaşılır kullananlar tarafından.

Değerli hocalarım, benim asıl takıldığım nokta hangi veritabanı kullanacağım buna karar veremedim. ben delphide yazıyorum interbase mi kullanmalıyım?
hocam arkadaşın yaptığı tabloda jant ve lastiğin farklı alanları vardı, bu durumda "tur" alanı gerekiyor.
 
Rüzgara Karşı'' Alıntı:
@fluent, hocam sizin yaptığınız veritabanı yapılandırmasında şöyle düzenlemeler olursa daha iyi olur bence...
lastik ve jant tabloları tek tabloda "urun" tablosu adı altında birleştirilsin, "tur" diye bir alan açarsak ürünün tipini burada saklayabiliriz
stok tabloları kaldırılsın, urun tablosunun altında "stok" alanı açılsın

Tşk ederim hocam düzeltme için ama, hocam veritabanında yer sıkıntısı çekiyor maksadıyla stokları iki tablo halinde tutmayı mantıklı bulmuştum ama gerek yokmuş zaten :)

wertyu6 hocam markadan ne olduğu anlaşılıyor demişsiniz ama o şekilde daha çok yer kaplayacaktır emin olun. Bu gibi durumlarda ürünleri ayrı, stokları yarı yerlerde tutmak ve tablolar arasında bağlantı kurmak daha mantıklı bence, yine de siz bilirsiniz. Siz hangi programlama dilini kullanıyorsunuz hocam onu yazın, bizde internetten bir araştıralım hangi porgramda hangi veritabanı kullanmak daha mantıklı diye...
 
fluent' Alıntı:
Rüzgara Karşı'' Alıntı:
@fluent, hocam sizin yaptığınız veritabanı yapılandırmasında şöyle düzenlemeler olursa daha iyi olur bence...
lastik ve jant tabloları tek tabloda "urun" tablosu adı altında birleştirilsin, "tur" diye bir alan açarsak ürünün tipini burada saklayabiliriz
stok tabloları kaldırılsın, urun tablosunun altında "stok" alanı açılsın

Tşk ederim hocam düzeltme için ama, hocam veritabanında yer sıkıntısı çekiyor maksadıyla stokları iki tablo halinde tutmayı mantıklı bulmuştum ama gerek yokmuş zaten :)

wertyu6 hocam markadan ne olduğu anlaşılıyor demişsiniz ama o şekilde daha çok yer kaplayacaktır emin olun. Bu gibi durumlarda ürünleri ayrı, stokları yarı yerlerde tutmak ve tablolar arasında bağlantı kurmak daha mantıklı bence, yine de siz bilirsiniz. Siz hangi programlama dilini kullanıyorsunuz hocam onu yazın, bizde internetten bir araştıralım hangi porgramda hangi veritabanı kullanmak daha mantıklı diye...

zaten ürünler farklı stoklar farklı tabloda olacak hocam.
neyse hocalarım sizi bu saatte meşgul ettim hakkınızı helal edin. paradox u bir deneyeceğim hocam teşekkürler tekrar.
 
Hocam okuduğum kadarıyla delphi kullanıyorsan firebird veya interbase. Aslında SQL serverda kullanabilirsin ama programı paketleme aşamasını da düşünmek lazım. Bir araştıralım bakalım.
 
fluent' Alıntı:
http://www.delphiturkiye.com/forum/viewtopic.php?t=5800

Burda interbase ve firebird hakkında yeterli bilgi var hocam. Yine de access i bir araştıralım, kolay gelsin

access te kayıtlar kendiliğinden yer değiştiriyor, bu sorun olmazmı sizce?
 
Hocam acceste bilgilerin yer değiştirmesi sorun olmaz şöyleki...

Kaydı gösterirken sql sorgunuzda id değerlerine göre büyükten küçüğe sıralarsınız (SELECT * FROM tablonuz ORDER BY id ASC) ve girdiğiniz sırada çıkmasını sağlarsınız, sorun olacağını sanmıyorum...
 
s_kajmeran' Alıntı:
Hocam acceste bilgilerin yer değiştirmesi sorun olmaz şöyleki...

Kaydı gösterirken sql sorgunuzda id değerlerine göre büyükten küçüğe sıralarsınız (SELECT * FROM tablonuz ORDER BY id ASC) ve girdiğiniz sırada çıkmasını sağlarsınız, sorun olacağını sanmıyorum...

haklısınız hocam :+1:
yarın devam edeceğim artık, teşekkürler yardımlarınız için, iyi geceler arkadaşlar...
 
s_kajmeran' Alıntı:
Hocam acceste bilgilerin yer değiştirmesi sorun olmaz şöyleki...

Kaydı gösterirken sql sorgunuzda id değerlerine göre büyükten küçüğe sıralarsınız (SELECT * FROM tablonuz ORDER BY id ASC) ve girdiğiniz sırada çıkmasını sağlarsınız, sorun olacağını sanmıyorum...

Hocam veritabanı bağlantısını query ile değilde table nesnesi ile yaparsa order by ile sıralama yapamaz sanırım. DBGrid veya table nesnesinin otomatik sıralama özelliği olabilir ona bakmanız lazım. Ama yine de bende ne kullanırsanız kullanın kayıt sırasının ndeğişmesinin problem olacağını sanmıyorum.
 
Geri
Üst