firebird de alan değeri kendiliğinden otomatik olarak artmaz,genellikle generator kullanılarak before insert trigger ında değer set edilir.
generator dediğimiz şeyi numaratör olarak düşünebiliriz, oracle daki karşılığı sequence dir, bir sayı değeri tutar, next ile bir sonraki değeri alınır ve before insert triggerında generatörden alınan değer yeni kaydın ID alanına set edilir
Before Insert triggerında otomatik ID alanını arttırabilirsin ancak Delphi tarafında IBX bileşen setinde, Query nesnesinde Generator alanını tanıtabilirsin ve kendisi otomatik olarak değer arttırımını yapar. Bence onu tercih edersen daha iyi olur. Çünkü, ileride Master Detail bir tablo yapısı kullandığında, Master alanın ID'sini, Detail tabloya yazman gerekecektir. Eğer Before Insert Trigger'ına yazarsan, Insert, Master Tabloyu Insert edip, commit edip, daha sonra ya refresh etmen gerek ya da kaydettiğin son kaydın ID'sini bulan ekstra bir Query yazman gerekecek. Aynı zamanda, MultiUser bir uygulama yaptığında, ID alanların birbirine girdiğini göreceksin. Sonra ona da yama yapmaya başlayacaksın.
Bunun yerine, IBQuery nesnesindeki Generator Field özelliğini kullan ve OnNewRecord seçeneğini tıkla. Böylelikle, hem DB'ye Post etmeden dahi, elinde Master Tablounun IDsi bulunmuş olur, ayrıca MultiUser durumlarda da ID'lerin birbirine girmesi veya son ID hangisiydi gibi karmaşaya girmezsin.
Tek olumsuz denilebilecek yanı, Eğer kullanıcı kaydı yapmaz vazgeçerse, ID'lerin gidişinde bazı boşluklar oluşur. Bu da çok önemli bir şey değil, hatta hiç önemli bir şey değil. (Benim için)