append
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
append
ben anvigator kullanıyorum navigatorın onclikine
if (button=nbinsert) then
begin
table1.append;
abort;
end;
en son satırda insert açılıyor tableın post unu tetikliyor ben işlem yapmadan daha post ediyor nednini anlamadım...
if (button=nbinsert) then
begin
table1.append;
abort;
end;
en son satırda insert açılıyor tableın post unu tetikliyor ben işlem yapmadan daha post ediyor nednini anlamadım...
Ölümden öteye köy yok!
Navigator de Insert butonuna basınca Append et demişsin. Insert ile Append zaten aynı şeydir
Table1 dediğin aynı tablo ise kodun bu kısmı mantıksız. Zaten yeni bir kayıt eklemişsin tekrar ekleyince bir öncekini post eder
Mantığı hatalı kurmuşsun sanırım 



Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Insert ile Append aynı şey değildir.
Insert: Bulunduğun kaydın hemen altına yeni kayıt açar
Append: Dosyanın en sonuna yeni kayıt açar.
Bu fark kimi durumlarda önemli sorunlara yol açabiliyor.
Barol arkadaşım. Table'ın postunu tetikliyor demişsin ama BeforePost mu AfterPost mu belirtmemişsin.
Ayrıca bu işlemi OnClick event'i yerine BeforeAction event'ine yazman daha uygun olur gibime geliyor.
Insert: Bulunduğun kaydın hemen altına yeni kayıt açar
Append: Dosyanın en sonuna yeni kayıt açar.
Bu fark kimi durumlarda önemli sorunlara yol açabiliyor.
Barol arkadaşım. Table'ın postunu tetikliyor demişsin ama BeforePost mu AfterPost mu belirtmemişsin.
Ayrıca bu işlemi OnClick event'i yerine BeforeAction event'ine yazman daha uygun olur gibime geliyor.
Ufuk TOGAY
Kod: Tümünü seç
if (button=nbinsert) then
begin
table1.append;
abort;
end;
BeforePost mu AfterPost mu tetiklenir sorusunun cevabı; er ikiside.
Yani. Yoksa aynı şey için iki farklı metod niye olsun.Insert ile Append aynı şey değildir.
Insert: Bulunduğun kaydın hemen altına yeni kayıt açar
Append: Dosyanın en sonuna yeni kayıt açar.
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
tablonun beforeinsert olayına
yazman işini görecektir. böylelikle navigatör + tuşuna basınca insert çalıştırdığında önce insert işlemi iptal edilecek sonra append olacaktır.. umarım öyle olur 
saygılar..
Kod: Tümünü seç
begin
abort;
table1.append;
end;

saygılar..
Bir kere DBNavigator un OnClikck inde olay/action bitmiştir. Dolaysıyla Abort işlemi çalışmaz
BeforeAction da olabilir, fakat Abort tan sonra da Append yapamazsınız 




Her iki event ın kodları aşağıdadır. İndeksli bir tabloda araya kayıt girme veya sona kayıt ekleme diye bir şeyden söz edilemez. İndekse göre uygun yere eklenirMersian yazdı:Insert ile Append aynı şey değildir.
Insert: Bulunduğun kaydın hemen altına yeni kayıt açar
Append: Dosyanın en sonuna yeni kayıt açar.
Bu fark kimi durumlarda önemli sorunlara yol açabiliyor.
...

İlle de Append kodu çalıştırılmak istenirse @muratdicle nin önerisi kullanılabilir. Çünkü Abort özellikle DataSet in BeforeInsert, BeforePost, vs. olaylarının sonlanması için kullanılırKod: Tümünü seç
procedure TDataSet.Insert; var Buffer: PChar; OldCurrent: TBookmarkStr; begin BeginInsertAppend; OldCurrent := Bookmark; MoveBuffer(FRecordCount, FActiveRecord); Buffer := ActiveBuffer; InitRecord(Buffer); if FRecordCount = 0 then SetBookmarkFlag(Buffer, bfBOF) else SetBookmarkData(Buffer, Pointer(OldCurrent)); if FRecordCount < FBufferCount then Inc(FRecordCount); InternalInsert; EndInsertAppend; end; procedure TDataSet.Append; var Buffer: PChar; begin BeginInsertAppend; ClearBuffers; Buffer := FBuffers[0]; InitRecord(Buffer); SetBookmarkFlag(Buffer, bfEOF); FRecordCount := 1; FBOF := False; GetPriorRecords; InternalInsert; End

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Tablo index li değil ise ne olacak.İndeksli bir tabloda araya kayıt girme veya sona kayıt ekleme diye bir şeyden söz edilemez. İndekse göre uygun yere eklenir
Yada tablo index li ama ben TTable ı başka bir secondary index e ayarladıysam sonuç ne olur. Append dersem grid te sona gidilir veri girilir sonra POST olunca aktif olan indexe göre veri kümesi sıralanır. Insert dersem grid te aktif kayıdın bir altına boş satır eklenir veri girilir sonra POST olunca aktif olan indexe göre veri kümesi sıralanır. Sonra ikincil indexi TTable dan kapatırsam veri kümesini bu sefer birincil index e göre görürüm.
Tabi bir Tablo ya verinin insert yapa append ile nasıl ekleneceği ilgili veri tabanının tutumuna (yani tasarımına) bağlı sanırım. Fakat indexler daha çok veri kümesinin sıralanması ve bizim onu nasıl bir sırada göreceğimiz ile ilgili sanırım yoksa recordların veritabanı dosyasına nasıl bir sıra ile yazıldığı ile ilgili değil.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Tamam kardeşim sen istediğin gibi yapbLue aLonE yazdı:Indexle ne alakası varO sadece kullanıcıya o şekilde view eder.Gerçekte insert ve append farklı işlemlerdir.Mesele bunu kullanıcıya yansıtmamaksa birçok çözüm üretilebilir vs.
Kolay gele.


Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
abort sessiz exception atar. Onun için aborttan sonraki kod çalışmaz. (büyük ihtimallemuratdicle yazdı:tablonun beforeinsert olayına
yazman işini görecektir. böylelikle navigatör + tuşuna basınca insert çalıştırdığında önce insert işlemi iptal edilecek sonra append olacaktır.. umarım öyle olurKod: Tümünü seç
begin abort; table1.append; end;
saygılar..

Sanırım en doğru cevap bu oldu. Çünkü Abort tan sonra işlem iptal edilip mevcut procedure den exit ile çıkılmış gibi bir sonuç oluşuyor. Dolaysıyla sonraki satırlar işletilmiyor.undefined yazdı:...
abort sessiz exception atar. Onun için aborttan sonraki kod çalışmaz. (büyük ihtimalle)
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Arkadaşlar ilginiz için hepinize ayrı ayrı teşekkür etmek istiyorum öncelikle. Daha sonrada neden boyle bir koda ihtiyaç duyduğumu anlatayım.Benim kullandıgım ekranda grid üzerinden veri girişi yapıyorum.ve navigator kullanarak insert,delete,update işlemlerini gercekleştiriyorum.Sorun da burada çıkıyor.Ben navigator dan insert tuşuna bastıgımda o anda grid de ki kaydın bir satır üstüne boşkayıt açıyor ama ben sürekli grid in en altına boş kaydın açılmasını istiyorum.Bunu da append kodu ile yapabileceğimi oğrendim.fakat append kodunu da kullandıgımda da post event ını tetikledigini gordum.Umarım neden boyle bir kod yazdıgımı anlatabilmişimdir.Eğer bu istediğim işlemi başka yöntemle yada kodla nasıl yapılacagını bilen arkadaşlar varsa lütfen yardımcı olsun.Herkese tekrardan sonsuz teşekkürler...
Ölümden öteye köy yok!