Primary key hakkında

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba Arkadaşlar, Hepinize selam olsun.

Sorunum hala devam ediyor. Gece ikiye kadar ve şimdi devam ediyorum. Tablolarımda PK oluşturmamıştım sonra sizlerden gerekli olduğunu anladım ve yeni oluşturduğum tabloya IDNO alanı olarak PK oluşturdum ve bu alanı ibex ile generator, tragier ve procedure olaylarına creat işaretleyerek oluşturdum. Eski ve içinde veriler olan tabloma da sonradan ilave olarak IDNO alanı ekledim. Haliyle yeni oluşturulan tablo gibi PK oluşturamadığımdan bunu constaints sekmesinde new diyerek IDNO alanının PK olarak belirledim ve alanı gen, triger ve procedur olarak işaretledim.

İbPump ile veri aktarımı yapma olayına geldiğimde IDNO alanları (içinde veri olan eski tabloda) boş olduğu için yeni tabloya aktarma işlemini yapmadı. error hatası (kayıt sayısı kadar) vererek duruyor.

Bu olayı gece uğraşmamda IDNO alanlırının not null değerlerini null olarak değiştirdiğimde verileri aktardığını gördüm fakat IDNO alanları boş olarak aktarıyor bu seferde generator olayı olmayacak sanırım.

aslında tablolarımda kesin girilmesi gereken ve boş kalmayacak alanlarım var buraları PK yapabilirim ama bazı tablolarımda ki alanlar varchar olarak belirli ve ikinci, üçüncü.... sefer aynı adla girilebilirliği var.

Lafı uzatıyorum herhalde, burada öğrenmek istediğim eski tabloya sonradan eklediğim PK_IDNO alanlarını kod ile rakam doldurmam sorunumu çözermi, çözer ise bu rakam doldurma işini nasıl yapabilirim?

Rakam doldurduktan sonra yeni tabloya aktarınca oradaki gen olayı tablonun en son ve en büyük rakamından itibaren mi çalışmaya başlar.

Gerçekten acemiliğinde verdiği ağırlıkla beni yordu ve uyuyup uyandığım halde başım ağrıyordu.

Teşekkür ve saygılarımla
Hayırlı mesailer
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

paradox tablonda haliyle otomatik artan bir pk alan olmadıgı icin ,firebird deki alan sayıları uyusmuyor ve kayıt sayısı kadar hata veriyor.
hic pk alan (IDNO falan) olmadan ibpump ile Firebird e al gerisi kolay
bu tabloya t1 diyelim
t1 ini ddl ini kopyala ve t2 isimli bir bos tablo olustur.
t2 de pk alanı triggerları vs. ekle (trigger kullanıyorsan ayrıca procedure ile generator den ID almaya gerek yok)

su basit SQL ile
Inser Into t2 select null,alan1,alan2,alan3 from t1 //alanların hepsini ekle

gerekli aktarmayı yapacaksın
hadi kolay gelsin
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Gökmen abi değerli vaktini ayırdığın için teşekkürler.

Dbase ile hazırladığım çalışma kullanımda. Firebird e olan tavsiyelerle Firebirde geçmeyi düşündüm ve aynı çalışmayı firebirdde yaptım. sonra ibpump ile verileri db den fb ye aytardım. akşam eve getirdim çalışmayı daha da geliştireyim ve internetten makaleleri de okuyayım diye. PK alan gerekliliğini öğrenince işler karıştı. Neyse Yeni tablo yaptım aynından herşeyi aynı sadece PK IDNO ekledim. Eski tabloda Firebird di (ibeX le oluşturulmuş) onada PK olarak IDNO ekledim. İşler iyice karıştı.

Ddl yi kopyalama olarak tedbir açısından olarak anlıyorum. Yeni tablo oluşturacağım(ibex te) ve hiç PK alan olmayacak DBaseden verileri aktaracağım Sonra ikinci bir tablo oluşturacağım (ibex te) ve burada PK IDNO diye alanım olacak GEN VE TRIGER ayarlarını yaptıktan sonra buradan sonrasını karıştıracağa benzerim verdiğin kodu nereye yazmalıyım açıkçası bilmiyorum. Böle durumlarda hep bön bön bakıyorum. Çünkü nereye yazılır tam olarak bilmiyorum. pek çok yerde sql yazılan yer olduğu için Delphi de tabloda vs.

Emin olki sizlere sorulan sorularla ve benim sorduğum sorularla makaleleri okuyarak bu işi öğrenmeye çalışıyorum. o yüzden kusuruma bakma.

Belki diyeceksin eskisi çalışıyor yenisi niye. Öğrenmek, öğrenmek, öğrenmek başka bişi diğil. En iyisini yapmaya gayret etmek ve öğrendikten sonra bana öğrettikleri gibi başkalarına faydalı olabilmek.

Kolay gele
Cevapla