Makale dizimizin bu bölümünde Tablo sahaları ile işlemlerin nasıl yapılacağı hakkında bilgi vereceğiz. DBNavigator kullanmadan tablonun kayıtları arasında dolaşmak,tabloda bir kayıt aramak yakın kayıtları bulmak ve onların üzerinde konumlanmak hakkında bilgi vereceğiz. Ayrıca kayıtları bookkmark ile işaretlemek ve o kayıda tekrar ulaşamayı da anlatacağız. Bu bölümü tüm Delphi programcılarının bir kez daha gözden geçirmelerini tavsiye ederim.
Tablo Kayıtlarında gezinmek:
Bir tabloda kayıtlar arasında gezinmek eğer DBGrid kullanıyorsanız çok kolaydır. Fakat Eğer DBEdit vb. tek bir sahayı düzenleyen kontroller kullanıyorsanız bu pekte kolay olmayabilir. Bunun için DBNavigator kullanmak bir zorunluluktur ama eğer DBNavigator kullanmak istemiyorsanız buna Table nesnesinin yordamları ile kolayca erişebilirsiniz ve sahalarda kolayca gezinebilirsiniz.
Aşağıdaki örnekte bunun nasıl yapılacağı anlatılmıştır.
procedure TForm1.FormShow(Sender: TObject);
begin
if Table1.RecordCount<2 then //Eğer ikiden az kaydı varsa tüm buttonlar pasif olacak
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
end
else
begin
if Table1.Bof then
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end
else
begin
if Table1.Eof then
begin
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
table1.First;
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
table1.Last;
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
table1.Next;
if Table1.Eof then
begin
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
table1.Prior;
if Table1.Bof then
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
begin
if Table1.RecordCount<2 then //Eğer ikiden az kaydı varsa tüm buttonlar pasif olacak
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
end
else
begin
if Table1.Bof then
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end
else
begin
if Table1.Eof then
begin
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
table1.First;
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
table1.Last;
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
table1.Next;
if Table1.Eof then
begin
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
table1.Prior;
if Table1.Bof then
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
Yukarıdaki örnekte gördüğünüz gibi Table1.Next Yordamı birsonraki kayda gitmesini Table1.Prior Bir önceki kayda gitmesini Table1.First İlk kayda gitmesini Table1.Last ise son kayda gitmesini sağlar.
BOF(Begin Of File) eğer tablonun ilk kaydında ise TRUE değerini alır. EOF(End Of File) Eğer tablonun son kaydında ise TRUE değerini alır.
Tablonun Sahalarını Aramak:
Bir tabloda gezinmemizin sebebi muhtemelen bir kayda ulaşmak olacaktır.Bu iş ise Onbinlerce kaydın bulunduğu bir tabloda tam bir işkence haline dönüşebilir. Bunun için Table nesnesi aradığınız kayıtta yada aradığınıza yakın bir kayıtta konumlanmak için yordamlar içerir.Fakat bunların kullanımı tek bir yordamın yazılması ile olmaz. Bu yordamın çalışması için yordamını kullanımından önce bir iki satırın daha yazılması gerekir.
Eğer bir kaydı tablonuzda aramak istiyorsanız GotoKey fonksiyonundan yararlanmalısınız. GotoKey fonksiyonu kullanıldığında eğer aradığınız sahaya uygun bir kayıt bulursa o kaydın üzerinde konumlanır.Eğer bulamazsa FALSE değeri üretir.
Eğer aradığınız kayda yakın bir kayıt arıyorsanız GotoNearest yordamından yararlanmalısınız. GotoNearest yordamı kullanıldığında eğer aradığınız sahaya yakın bir kayıt bulursa o kaydın üzerinde konumlanır.
Aşağıdaki örneğe yukarıdaki örneğimize ek olarak iki BitBtn ve bir metin kutusu daha ekledim.Edit1'e yazılan değerin aynısını tabloda bulup üzerinde konumlanmak için Kayda Git düğmesine; yakın bir kayda konumlanmak için En Yakınını Buldüğmesine basacağız.
Tabi ki yukarıdaki örneğimizde birde yapısal değişiklik yapacağız.Bu yapısal değişiklik sayesinde her butonda ktablo kaydının durumunu ayrı ayrı kontrol etmeyeceğiz.
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
table1.First;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
table1.Last;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
table1.Next;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
table1.Prior;
end;
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
Table1.Setkey;
Table1.FieldByName('Custno').AsInteger:=strtoint(Edit1.text);
Table1.GotoNearest;
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
Table1.Setkey;
Table1.FieldByName('Custno').AsInteger:=strtoint(Edit1.text);
if not table1.GotoKey then
begin
Application.MessageBox('Müşteri Numarası Bulunamadı','Saha Arama Hatası',48+0);
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then key:=#0;
end;
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if Table1.RecordCount<2 then //Eğer ikiden az kaydı varsa tüm buttonlar pasif olacak
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
end
else
begin
if (Table1.Bof)or (Table1.RecNo=1) then
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end
else
begin
if (Table1.Eof) or (Table1.RecNo=Table1.RecordCount) then
begin
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
end;
end;
begin
table1.First;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
table1.Last;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
table1.Next;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
table1.Prior;
end;
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
Table1.Setkey;
Table1.FieldByName('Custno').AsInteger:=strtoint(Edit1.text);
Table1.GotoNearest;
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
Table1.Setkey;
Table1.FieldByName('Custno').AsInteger:=strtoint(Edit1.text);
if not table1.GotoKey then
begin
Application.MessageBox('Müşteri Numarası Bulunamadı','Saha Arama Hatası',48+0);
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then key:=#0;
end;
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if Table1.RecordCount<2 then //Eğer ikiden az kaydı varsa tüm buttonlar pasif olacak
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
end
else
begin
if (Table1.Bof)or (Table1.RecNo=1) then
begin
bitbtn1.Enabled:=False;
bitbtn2.Enabled:=False;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end
else
begin
if (Table1.Eof) or (Table1.RecNo=Table1.RecordCount) then
begin
bitbtn3.Enabled:=False;
bitbtn4.Enabled:=False;
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
end
else
begin
bitbtn1.Enabled:=True;
bitbtn2.Enabled:=True;
bitbtn3.Enabled:=True;
bitbtn4.Enabled:=True;
end;
end;
end;
end;
Setkey:Setkey yordamı field öğesine bir arama yapılacağını belirtir. dsSetKey bölümünüe bir veri setini yerleştirmek ve aktif key bufferinin içeriğini temizlemek içim kullanılır.Bu yordam kullanıldıktan sonra field öğesine yazacağınız değer GotoKey GotoNearest yordamları ile aratılır.
Eğer bir sahaya konumlanmak istemiyorsanız sadece bulmak istiyorsanız FindKey ve FindNearest yordamlarını kullanmalısınız.Bu yordamların kullanılması Goto yordamlarının kullanılmasına benzer. Nearest yakın olanını Key ise var olanı bulmaya çalışır. Aşağıda bu yordamların kullanımına örnekler verilmiştir.
Table1.FindNearest([Edit1.text]);
//-------------------------------//
if Table1.Findkey([Edit1.text]) then
begin
Application.MessageBox('Kayıt Bulunamadı','Arama Hatası',48+0);
end;
begin
Application.MessageBox('Kayıt Bulunamadı','Arama Hatası',48+0);
end;
Yukarıdaki örnekte find yöntemleri bir anahtarlar dizisi kullanır.Bu dizi elementi indekslenmiş bir alana işaret eder. Eğer indeksinizde 3 adet saha varsa Table1.FindNearest([Edit1.text,Edit2.text,Edit3.text]); gibi yazılmalıdır.
BookMark:Bir tabloda eğer rasgele kayıtlar arasında dolaşmıyorsanız, bir önceki kayda dönmek için Table1.Prior yordamı yeterli olmayacaktır. Bunu yerine eğer tabloda bulunduğunuz yere bir bookmark koyarsanız ve daha sonra gideceğiniz bir sonraki kayda giderseniz, daha önceki kayda ulaşmanız daha kolay olacaktır.Bu tıpkı Internet Exporer'daki geri butonu gibi kullanılabilir.
Eğer bir bookmark tanımlamak istiyorsanız bir kaç işlem takip etmelisiniz.Bunlar yeni bir bookmark'ın tanımlanması ve bu bookmark'a tablonun o kaydının atanmasıdır.Aşağıdaki örnekte bookmarkın nasıl atanacağı anlatılmıştır.
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
bookmarkprior:TBookMark;
begin
bookmarkprior:=Table1.GetBookmark;
end;
var
bookmarkprior:TBookMark;
begin
bookmarkprior:=Table1.GetBookmark;
end;
Bookmark ilk önce TBookMark cinsinden bir değişken tanımlanmalıdır. Daha sonra Bookmark değişkenine Getbookmark fonksiyonu ile atanarak işlem tamamlanır.
Eğer bookmark atanan kayda geri dönmek istiyorsanız.
Table1.GotoBookmark(bookmarkprior);
Eğer bookmarkı temizlemek istiyorsanız Table1.FreeBookmark(bookmarkprior); kullanmalısınız.