1 numara karşı birden fazla satır bazında kayıt detail
1 numara karşı birden fazla satır bazında kayıt detail
Simdi bir numara var otomatik oluşturulan........Bu noya detail olarak birden fazla detail bilgi bağlamak istiyorum...
Yani Örneğin Numara 1......Buna ilişkin 8 tane ayrı ayrı satır bazında kayıt yapabilirmiyim....Mümkünse yardımcı olabilirmisiniz.......
Yani Örneğin Numara 1......Buna ilişkin 8 tane ayrı ayrı satır bazında kayıt yapabilirmiyim....Mümkünse yardımcı olabilirmisiniz.......
Ana tabloda ANA_TABLO_NO diye bi alan olsun
misal 1,2
Detay tabloda
DETAY_TABLO_NO, ANA_TABLO_NO, DEGER diye alanlar var.
burda da
65, 1, degeri
66,1, degeri
şeklinde kayıt tutulur.
Ana tabloya bir kayıt ve detay tabloya sekiz kaydı tek bir sql le girmeniz gerekiyorsa procedure kullanmanız gerekir ( en azından ben oyle kullanıyorum).
misal 1,2
Detay tabloda
DETAY_TABLO_NO, ANA_TABLO_NO, DEGER diye alanlar var.
burda da
65, 1, degeri
66,1, degeri
şeklinde kayıt tutulur.
Ana tabloya bir kayıt ve detay tabloya sekiz kaydı tek bir sql le girmeniz gerekiyorsa procedure kullanmanız gerekir ( en azından ben oyle kullanıyorum).
peki birde söle bir problemim var
ana tabloda primary key olan değer benim yaptığım programda sevkiyat no, bu noyu ben 1,2,3 olarak değilde müsteri cari nosuna göre örneğin
10023-001 ilk kayıt için mesela sonraki kayıtları kontrol edip en son hangi kayıt yapılmış 001 kayıt kapatılmış ise 002 geçecek başka bir sevkiyatta
bunun için bana söyleyeceğiniz ve önereceğiniz bir yöntem var mı.
10023-001 ilk kayıt için mesela sonraki kayıtları kontrol edip en son hangi kayıt yapılmış 001 kayıt kapatılmış ise 002 geçecek başka bir sevkiyatta
bunun için bana söyleyeceğiniz ve önereceğiniz bir yöntem var mı.
(Anladığım kadarıyla)
O zaman önce ana tabloya gidip ilgili kaydın NO sunu alacaksınız
sonra da bunu detay tabloya 8 kaydı girerken, detay bilgilere ek olarak sabit bir şekilde kullanacaksınız.
Farzedinki 8 kayıt değilde detay tabloya bir kayıt ekleyeceksiniz
onun sql i nasıl yazılır biliyorsanız, bir şekilde 8 kaydı da eklersiniz.
O zaman önce ana tabloya gidip ilgili kaydın NO sunu alacaksınız
sonra da bunu detay tabloya 8 kaydı girerken, detay bilgilere ek olarak sabit bir şekilde kullanacaksınız.
Farzedinki 8 kayıt değilde detay tabloya bir kayıt ekleyeceksiniz
onun sql i nasıl yazılır biliyorsanız, bir şekilde 8 kaydı da eklersiniz.
biraz eksik bilgi verdim pardon
sql server 2000 çalışan netsis programının üzerindeki table a sipariş tablosunda gerekli bilgiler var örneğin şunlar
fisno cari kodu ürün no adedi
_____________________________
bir sevkiyat no baz alınarak çünkü bir tane sipariş ayrı ayrı sipariş noları ile örneğin 8 adet fisno ile girilebiliyor...Benim yapmak istediğim şu...
Otomatik bir sevkiyat no oluşturmak ama bunu müsterinin cari nosu baz alınarak yani 10023-001 gibi sevkiyat noları oluşturmak istiyorum bu sevkiyat no girildiği zaman hangi ürünler var göreceğim ama bu sevkiyat nosunu böle oluşturmam gerekiyor...Nasıl yapacağımı bilmiyorum tek problemim bu bunu çözersem programı bitireceğim yani...mümkünse kod olarak da yardımcı olursanız sevinirim...Şimdiden teşekkürler
fisno cari kodu ürün no adedi
_____________________________
bir sevkiyat no baz alınarak çünkü bir tane sipariş ayrı ayrı sipariş noları ile örneğin 8 adet fisno ile girilebiliyor...Benim yapmak istediğim şu...
Otomatik bir sevkiyat no oluşturmak ama bunu müsterinin cari nosu baz alınarak yani 10023-001 gibi sevkiyat noları oluşturmak istiyorum bu sevkiyat no girildiği zaman hangi ürünler var göreceğim ama bu sevkiyat nosunu böle oluşturmam gerekiyor...Nasıl yapacağımı bilmiyorum tek problemim bu bunu çözersem programı bitireceğim yani...mümkünse kod olarak da yardımcı olursanız sevinirim...Şimdiden teşekkürler
Evvela bir öncekini siz yazmadan atmıştım.
Eğer elinizde bu detay tablosunun alanlarıyla oynamak gibi bir imkan varsa şöyle düşünülebilir,
musteri_no, siparis_no diye ayrı ayrı iki alan oluşturun
bu tabloya kayıt eklerken once bir bakın bu tabloda 10023 nolu bir musteri nosu geçiyor mu ve eğer geçiyorsa maximum deger_nedir
bu degeri bulduktan sonra buna bir ekleyin
sonuc şoyle olur
10023 | 1
bunuda artık istediğinz sipariş nosu tipine string i biçimlendirerek çevirebilirsiniz.
Sipariş no nun önüne belirli sayıda 0 eklemek için repeat() fonksiyonu kullanılabilir. Hayır bu yok desteklenmiyorsa left() fonksiyonuyla bu sıfırlar oluşturulabilir. İki farklı değeri birleştirirken benim kullandığım db lerde || kullanılıyor bu şekilde faklı bir değerde elde edebilirsiniz.
Eğer elinizde bu detay tablosunun alanlarıyla oynamak gibi bir imkan varsa şöyle düşünülebilir,
musteri_no, siparis_no diye ayrı ayrı iki alan oluşturun
bu tabloya kayıt eklerken once bir bakın bu tabloda 10023 nolu bir musteri nosu geçiyor mu ve eğer geçiyorsa maximum deger_nedir
bu degeri bulduktan sonra buna bir ekleyin
sonuc şoyle olur
10023 | 1
bunuda artık istediğinz sipariş nosu tipine string i biçimlendirerek çevirebilirsiniz.
Sipariş no nun önüne belirli sayıda 0 eklemek için repeat() fonksiyonu kullanılabilir. Hayır bu yok desteklenmiyorsa left() fonksiyonuyla bu sıfırlar oluşturulabilir. İki farklı değeri birleştirirken benim kullandığım db lerde || kullanılıyor bu şekilde faklı bir değerde elde edebilirsiniz.
Peki başka bir soru
table su
alanlarda sunlar
fisno cari no ürün adedi fiyatı bir de siparişin açık mı kapalı mı olduğu oda sipariş field da satır bazında açıksa A Kapalı ise K yazıyor....
Ben burdan bunları nasıl filtreleyebilirim yapamadım bu mevzuyu yani siparişinde açık bölümünde A Yazanları listelemek istiyorum.
alanlarda sunlar
fisno cari no ürün adedi fiyatı bir de siparişin açık mı kapalı mı olduğu oda sipariş field da satır bazında açıksa A Kapalı ise K yazıyor....
Ben burdan bunları nasıl filtreleyebilirim yapamadım bu mevzuyu yani siparişinde açık bölümünde A Yazanları listelemek istiyorum.
Yani müşteri seçildiği zaman otomatik açık siparişleri
yani müşteri seçildiği zaman otomatik açık siparişleri nasıl listeleyebilirim örneğin 20 tane açık siparişi olabilir bunu combobox ta nasıl göstertebilirim....normal bir field taki göstermeyi yapabiliyorum ama nasıl filtreleyeyip bir combobox ta cari kodu seçildiği zaman diğerinde açık sipariş nolarını çıkartabilirim lütfen yardım......
arkadaşım şu şelilde yapabilirsin müşterinin carisine yada ismine göre bir edit koyabilirsin buradanda like yada where gibi komutlarla dbgrid'e aktarabilirsinki bence dbgridde olması daha iyi olur şahsi kanaitimce tabiii
bir de database olarak ne kullanıyorsun bunu belirtirsen iyi olur..
ama genel mantık su bir datasource ve bir query koyup edit'in change olayına like yada başka türlü bir arama ile locate olabilir yada where olabilir ama like bence daha iyi olabilir query ile filtreleyip dbgrid'e aktarabilirsin ....
arama komutlarını forumda bulabilirsin benim su an tam aklımda değil ....
Kolay gelsin....
ha bu arada master-detail kurarsan zaten kullanıcı ismine göre zaten detailini seçiyor ama yukarda yazdığım gibi bunlarıda bir den istersen bence ....
bir de database olarak ne kullanıyorsun bunu belirtirsen iyi olur..
ama genel mantık su bir datasource ve bir query koyup edit'in change olayına like yada başka türlü bir arama ile locate olabilir yada where olabilir ama like bence daha iyi olabilir query ile filtreleyip dbgrid'e aktarabilirsin ....
arama komutlarını forumda bulabilirsin benim su an tam aklımda değil ....
Kolay gelsin....
ha bu arada master-detail kurarsan zaten kullanıcı ismine göre zaten detailini seçiyor ama yukarda yazdığım gibi bunlarıda bir den istersen bence ....
derviş
sunu demek istedim
combobox ta seçilen bir fielda bağlı olarak aynı tabolunun içindeki bazı fieldları editboxlara nasıl atarım bunu demek istedim tam olarak.........
yok ayrıca dbgride atmak istemiyorum
sadece istediğim combobox tan seçilen öğenin satır bazında bazı satırları otomatik editlere atmam bu kadar
ya benim yapmak istediğim şu
bi table var aynen söle
Böyle bir database var siparis durumu denilen yerde K kapalı siparişler H ise açık siparişleri belli ediyor......
1. Benim yapmam gereken ise şu...Buradan siparis durumu H olanları yani açık olanları filtrelemek...
2. Bundan sonra ise firebird de table ları oluşturdum fieldlarıda bir tane sevkiyat no adında fieldım var primarykey...Diğer detail table ise sevkiyatdetay...Bunlar master-detail bağladım...Bunları master detail bağlama şeklim ise sekiyat.fdb SEVK_SIRA_NO Primary Key, SEVKIYAT NO diğer Sevkiyatdetail tabelında ise siparisnumarası fkey...durumda ve geri kalan diğer fieldlar...sipraiş numarası yukarıda yazdiğim fisnosu...
problem...yok...Yani prgramın geri kalan herşeyi tamam ama sadece bu bölümü yapamadım...devam ediyorum.
3. Tam olarak yapmak istediğim...İlk sorum her defasında bu select * from tableadi where fieldadi='H' şeklinde table filtreleyip bir kopyasını oluşturmakmı...ki böyle yaparsak her program çalışınca yapması gerekiyor...Çünkü devamlı sipariş kapanıyor...açılıyor...veya bunları filtreleyip direk işlem yapmak mı..hangisi sağlıklı olur...devam ediyorum.
4. Bu olayı yaptıktan sonra yani açık olan siparişleri bulduktan sonra ki olay 0 dan müşteri cari kodu baz alınarak örneğin 10023 bu nonun yanına 6 digit daha otomatik bir no oluşturmak ve bunu sevkiyat no olarak kaydetmek. Yani 10023-000001 tabiki bu numara firebird de sevkiyat no kayıtlı değil ise oluşturulacak. Sonuç: bu no oluştuktan sonra kayıt işlemi başlıyor ve bu no baz alınarak örneğin 6 adet fis nosu yani 6 adet sipariş numarası bu no baz alınarak kayıt yapılıyor. Ve sevkiyat ile ilgili işler ibitirdikten sonra kayıtları bu sevkiyatı kesin bitir butonu olduğunu düşünelim tıklıyor ve sevkiyat kapanıyor bir daha tekrar açılmamak üzere sadece admin açabilir bunu...Daha sonra aynı müşteriye tekrar sevkiyat no ile siparişleri girileceği zaman sevkiyat noyu kontrol edip bakmalı ki bu müşterinin 10023-000001 var o zaman 10023-000002 açması gerektiğini anlayıp bu noyu açması ve artık diğer siparişlerinde kayıt edilmesi....Başka bir cari nodada aynı uygulamayı yapması....
Gerçekten bunu yapmam gerekiyor ve öle kalakaldım...Filtreliyorum orda kalıyorum...Yardımcı olursanız sevinirim...Teşekkür ederim şimdiden....Hayırlı Geceler
Kod: Tümünü seç
FISNO CARI_KODU STOK_KODU ADEDI FIYATI BIRIMI SIPARISDURUMU
1. Benim yapmam gereken ise şu...Buradan siparis durumu H olanları yani açık olanları filtrelemek...
2. Bundan sonra ise firebird de table ları oluşturdum fieldlarıda bir tane sevkiyat no adında fieldım var primarykey...Diğer detail table ise sevkiyatdetay...Bunlar master-detail bağladım...Bunları master detail bağlama şeklim ise sekiyat.fdb SEVK_SIRA_NO Primary Key, SEVKIYAT NO diğer Sevkiyatdetail tabelında ise siparisnumarası fkey...durumda ve geri kalan diğer fieldlar...sipraiş numarası yukarıda yazdiğim fisnosu...
problem...yok...Yani prgramın geri kalan herşeyi tamam ama sadece bu bölümü yapamadım...devam ediyorum.
3. Tam olarak yapmak istediğim...İlk sorum her defasında bu select * from tableadi where fieldadi='H' şeklinde table filtreleyip bir kopyasını oluşturmakmı...ki böyle yaparsak her program çalışınca yapması gerekiyor...Çünkü devamlı sipariş kapanıyor...açılıyor...veya bunları filtreleyip direk işlem yapmak mı..hangisi sağlıklı olur...devam ediyorum.
4. Bu olayı yaptıktan sonra yani açık olan siparişleri bulduktan sonra ki olay 0 dan müşteri cari kodu baz alınarak örneğin 10023 bu nonun yanına 6 digit daha otomatik bir no oluşturmak ve bunu sevkiyat no olarak kaydetmek. Yani 10023-000001 tabiki bu numara firebird de sevkiyat no kayıtlı değil ise oluşturulacak. Sonuç: bu no oluştuktan sonra kayıt işlemi başlıyor ve bu no baz alınarak örneğin 6 adet fis nosu yani 6 adet sipariş numarası bu no baz alınarak kayıt yapılıyor. Ve sevkiyat ile ilgili işler ibitirdikten sonra kayıtları bu sevkiyatı kesin bitir butonu olduğunu düşünelim tıklıyor ve sevkiyat kapanıyor bir daha tekrar açılmamak üzere sadece admin açabilir bunu...Daha sonra aynı müşteriye tekrar sevkiyat no ile siparişleri girileceği zaman sevkiyat noyu kontrol edip bakmalı ki bu müşterinin 10023-000001 var o zaman 10023-000002 açması gerektiğini anlayıp bu noyu açması ve artık diğer siparişlerinde kayıt edilmesi....Başka bir cari nodada aynı uygulamayı yapması....
Gerçekten bunu yapmam gerekiyor ve öle kalakaldım...Filtreliyorum orda kalıyorum...Yardımcı olursanız sevinirim...Teşekkür ederim şimdiden....Hayırlı Geceler
Sn. a4tech ilk üç sorunuz için birşey diyemeyeceğim
ancak 10023-000001 şeklinde bir değerin nasıl oluşturulabilceği hakkında
veritabanı tarafında şu şekilde bir yol izlenebilir;
firebird için tablo yapısı
siparis_no varchar(30) (PK)
musteri_no int
siparis_tmp
bu tabloya sadece musteri nosunu göndererek yeni bir kayıt eklemek için
insert etmeden önce çalışabiliecek bir trigger tanımlayabilirsiniz;
(substr ve strlen udf içinde mevcut fonksiyonlar)
bu durumda sadece insert into SIPARIS (MUSTERI_NO) values (musteri_no) dediğinizde çalışması lazım
bu kod istediğiniz formatta bir değer üretecektir ancak
program geliştirme tecrübesine sahip olmamakla birlikte benim düşüncem
veriyi bu formatta saklamanıza gerek olmadığı,
bunu delphi tarafında ya da select çekerkende biçimlendirebilirsiniz.
Sağlıcakla kalın
ancak 10023-000001 şeklinde bir değerin nasıl oluşturulabilceği hakkında
veritabanı tarafında şu şekilde bir yol izlenebilir;
firebird için tablo yapısı
siparis_no varchar(30) (PK)
musteri_no int
siparis_tmp
bu tabloya sadece musteri nosunu göndererek yeni bir kayıt eklemek için
insert etmeden önce çalışabiliecek bir trigger tanımlayabilirsiniz;
Kod: Tümünü seç
CREATE TRIGGER SIPARIS_ FOR SIPARIS ACTIVE BEFORE INSERT POSITION 0 AS
begin
select (max(SIPARIS_TMP)+1) from SIPARIS
where MUSTERI_NO = new.MUSTERI_NO into new.SIPARIS_TMP;
if (new.SIPARIS_TMP is null ) then
new.SIPARIS_TMP = 1;
new.SIPARIS_NO = new.MUSTERI_NO || '-' ||
SUBSTR('000000',1,6 - strlen(new.SIPARIS_TMP)) || new.SIPARIS_TMP;
end
bu durumda sadece insert into SIPARIS (MUSTERI_NO) values (musteri_no) dediğinizde çalışması lazım
bu kod istediğiniz formatta bir değer üretecektir ancak
program geliştirme tecrübesine sahip olmamakla birlikte benim düşüncem
veriyi bu formatta saklamanıza gerek olmadığı,
bunu delphi tarafında ya da select çekerkende biçimlendirebilirsiniz.
Sağlıcakla kalın
Çok teşekkür ederim yanlız trigger haricinde bir çözüm
Çok fazla iyi değilim yeniyim ben bu konularda onun için delphi ile alakalı kodlar verebilirseniz memnun olurum...Teşekkürler....