Şifreli bir table için
programın şifre istememesi için
Table'ın Active özelliğini False yapın ve Form'un OnCreate olayına aşağıdaki kodu ekleyin
Session.AddPassword('şifre'); Table1.Active:=True;
Bir DBGrid’de birden fazla seçilen kayıtlara ulaşmak
Eğer grid’in MultiSelect özelliği True yapılmışsa ve grid’den rastgele iki veya daha fazla kayıt seçilmişse seçilen kayıtlara aşağıdaki kod yardımıyla ulaşabilirsiniz.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Liste: TBookMarkList;
i: integer;
Kayit: TBookMark;
begin
Liste:=DBGrid1.SelectedRows;
for i:=0 to Liste.Count-1 do begin
Kayit:=TBookMark(Liste.Items[i]);
Table1.GotoBookmark(Kayit);
end;
end;
Table'mı yoksa Query'imi
kullanmalıyım
Lokal bir veritabanı ile çalışırken (Paradox, dBase gibi) Table kullanın. Client/Server bir veritabanı (Oracle, Interbase, SQL Server, Sysbase gibi) ile çalışıyorsanız Query kullanın.
Bir
tablodaki kayıtların StrinGrid bileşenine doldurulması
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,row:integer;
begin
Table1.First;
row := 0;
StringGrid1.RowCount :=
Table1.RecordCount;
while not Table1.EOF do
begin
for i := 0
to Table1.FieldCount-1 do
StringGrid1.Cells[i,row]
:= Table1.Fields[i].AsString;
Inc (row);
Table1.Next;
end;
end;
{Bu ipucu Abdurrahman Sinanoğlu tarafından gönderilmiştir}
Bir
tablonun alanlarını (field) bulma
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Open;
Table1.GetFieldNames(Listbox1.Items);
end;
{Bu ipucu Abdurrahman Sinanoğlu tarafından gönderilmiştir}
Bir paradox dosyasına şifre koymak için :
1. Database Desktop'u açın.
2. Şifre koymak istediğiniz paradox tablosunu açın.
3. Table menüsünde Restructure komutunu verin.
4. Gelen ekranda sağ üst köşedeki Table Properties kısmından Password Security'i
seçin.
5. Define tuşuna basarak şifrenizi girin.
6. Yaptığınız değişiklikleri kaydedin.
Bir
tablonun tüm alanları üzerinde işlem yapma
for i:=0 to Table1.FieldCount-1 do
....
Bir
tabloyu baştan sona tarama
Table1.First;
while not Table1.EOF do
begin
...
Table1.Next;
end;
Mevcut
alias'ların listesini alma
uses kısmına DBTables ekleyin. Combobox1'e mevcut listeyi almak için :
Session.GetDatabaseNames(Combobox1.Items);
Bir
alias'taki tabloların listesini alma
Session.GetTableNames(Combobox1.Text, '', True, False, ListBox1.Items);
Parametreler sırasıyla veritabanının adı, filtre (sadece lokal veritabanları için), tablo dosya uzantıları olacak mı?, sistem tabloları gösterilecek mi? (sadece SQL veritabanları) ve listenin getirileceği yer.
Bir
sonraki kayıt yerine 3 kayıt birden atlamak isterseniz
Table1.MoveBy(3);
Bir
Paradox tablosunda en fazla kaç alan olabilir
En fazla 255 alan (field) olabilir.
BDE ile Oracle9i'yi
kullanabilir miyim?
BDE artık gelişitirilmiyor. Son versiyonu 5.2 ise Oracle 8.0.4'ten 8.1.6'ya kadar destekliyor. Oracle 9i için dbExpress kullanmalısınız.
dbGO'nun diğer bir ismi ADO. Delphi 5 Enterprise ve Delphi 6 ve sonrasında Professional ve Enterprise sürümlerinde yer alıyor. Delphi 5 Professional'a da ayrıca kurulabiliyor. Diğer bir ismi de ADO Express.
dbExpress ile hangi
veritabanlarına ulaşabilirim, Paradox, dBase tablolarına erişebilirmiyim?
dbExpress şu anda DB2, Interbase, MySQL, Oracle ve Informix ile
çalışabiliyor. Delphi 7 ile birlikte SQL Server 2000'de bu listeye dahil oldu.
dbExpress ile Paradox, dBase ve FoxPro tablolarını kullanamazsınız.
Geçici
işlemler için tablo kullanma (memory table)
Bazen programda bilgilerinizi geçici olarak saklama ihtiyacı duyarsınız. Memory Table'lar bu iş için biçilmiş kaftan. Şu an piyasadaki en iyi memory table bileşeni kbmMemTable ve bedava. Bileşeni sitesinden indirebilirsiniz : www.components4developers.com
Paradox tek kullanıcılı programlarda pek fazla problem çıkarmazken, ağ ortamında eğer dikkatli kullanılmazsa tam bir başbelası. Ayrıca BDE'nin artık geliştirilmiyor olması ayrı bir dezavantaj. Paradox yerine çeşitli 3. parti veritabanları kullanabilirsiniz. Delphi veritabanı desteği yönünden çok geniş, ancak ben çok tutulan 2 bileşeni aşağıda belirttim.
- dbIsam ( www.elevatesoft.com ): Çok kullanıcı desteği var, ODBC desteği var, SQL desteği var, teknik desteği çok iyi. dbIsam parayla satılıyor, sitesinden deneme sürümünü indirip deneyebilirsiniz.
- Easy Table ( www.aidaim.com ) : SQL desteği var, hızlı. Easy Table da parayla satılıyor, sitesinden deneme sürümünü indirip deneyebilirsiniz.
NOT : Bir de bedava bir çözüm olan TurboPower FlashFiler var. İyi bir veritabanı, bedava olması ve BDE gerektirmemesi de avantajları. Sitede 3. parti bileşenler kısmında, TurboPower yazısında detayları ve linki var.
Paradox
veritabanına verileri yazdığım halde kayboluyor
- Paradox tablosuna yazdığınız veriler anında dosyaya kaydedilmez. Anında kayıt olmasını istiyorsanız BDE Administrator'dan Local Share özelliğini True yapın. (BDE Administrator - Configuration - System - INIT).
- Eğer cachedUpdates çalışmıyorsanız, Tablonun CachedUpdates özelliği False'mu dikkat edin.
- Bunların ikisi de işe yaramaz ise Table/Query bileşenini silip yeni bir bileşen koyup, onu ayarlayın.
dbGrid'te bir alanın değerine göre satırı renklendirme
Aşağıdaki kodla bu işi yapabilirsiniz. NO alanının değeri 100'den küçükse satır sarı, 100 ile 200 arası ise yeşil, 200 ile 300 arası ise kırmızı olur.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var MyValue: integer; begin if gdSelected in State then Exit; MyValue := DBGrid1.DataSource.DataSet.FieldByName('NO').AsInteger; if MyValue <100 then DBGrid1.Canvas.Brush.Color := clYellow else if MyValue <200 then DBGrid1.Canvas.Brush.Color := clGreen else if MyValue <300 then DBGrid1.Canvas.Brush.Color := clRed; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
dbExpress ile SqlTable nesnesi ile veriyi değiştiremiyorum, "can not modify read only data set" hatası veriyor
SQL
Table unidirectional bir dataset'tir. Yani birden fazla kayıtı hafızadaki
buffer'da tutmaz. Bunlar da First ve Next metoduyla kayıtlar arasında
gezebilirsiniz. Raporlama gibi işlemler için oldukça kullanışlıdır.
Eğer veriyi güncellemek istiyorsanız SQL komutları : UPDATE kullanmanız lazım.
Delphi Yardımda detaylı bilgiler var, inceleyebilirsiniz.
Bir
tablodaki kayıt sayısını bulma
Table kullanıyorsanız: RecordCount ile, Query kullanıyorsanız Count(*) ile
tablodaki toplam kayıt sayısını bulabilirsiniz. Burda dikkat etmeniz gereken SQL
veritabanlarında Table bileşeni ve RecordCount komutunu kullanmayın. Çünki bu
durumda tablodaki tüm veriler client'a yüklenecek, gereksiz yavaşlama ve ağ
trafiği oluşacaktır.
Table : Table1.RecordCount;
Query : SELECT COUNT(*) FROM TABLO_İSMİ
Paradox'ta
silinen bir kaydı kurtarabilir miyim?
Paradox'ta silinen kayıtlar geri kurtarılamıyor. Silinen kayıtların üzerine boş
bilgiler yazılıp yeni bir kayıt için ayrılıyor.
Paradox ile çalışıyorsanız, iyi bir yedekleme sistemi kurmalısınız.
1. Forma
bir TcheckBox bileşeni koyun ve visible'ını False yap. Verdiğim kodda TcheckBox'ın ismi :
Dbck
2. DBGrid1DrawColumnCell olayını aşağıdaki gibi ayarlayın.
3. DBGrid1ColExit olayını aşağıdaki gibi ayarlayın.
4. DBCheck.Click olayını aşağıdaki gibi ayarlayın.
procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
If (gdFocused in State) then
begin
// EXPRECORD is the name of the field to apply checkbox to
If(Uppercase(Trim(Column.FieldName)) = 'EXPRECORD' ) Then
begin
DBCk.Visible:=True;
DBCk.SetBounds(Rect.Left + DBGrid1.Left + 1,
Rect.Top + DBGrid1.Top + 1,
Rect.Right -Rect.Left,
Rect.Bottom - Rect.Top);
DBCk.Checked:=TBWorkingExpRecord.Value;
end;
end;
procedure Tform1.DBGrid1ColExit(Sender: TObject);
begin
DBCk.Visible:=False;
end;
procedure Tform1.DBCkClick(Sender: TObject);
begin
// Set field value in table equivalent to the check
// We used TCheckbox instead of TDBCheckbox due to null
// value handling
Try
TBWorking.Edit;
TBWorkingExpRecord.Value:=DBCk.Checked;
TBWorking.Post;
Except
On E:EDatabaseError do Showmessage(E.Message);
End;
end;
Veritabanına jpeg
resimleri kaydetme/okuma
Veritabanına aşağıdaki kodları kullanarak TImage ile jpeg'i kaydedip, tekrar
okuyabilirsiniz. TDBImage jpeg ile çalışamaz!
jpeg'i
kaydetme :
procedure TForm1.loadPic; var jpeg: TJPEGImage; Stream: TMemoryStream; BlobField: TBlobField; begin BlobField := table1.DataSet.FieldByName('Bild') as TBlobField; jpeg := TJPEGImage.Create; try if (Image1.Picture.Graphic is TJPegImage) then begin jpeg.Assign (ImageFoto.Picture.Bitmap); end; Stream := TMemoryStream.Create; try jpeg.SaveToStream (Stream); DataSourceForm.DataSet.Edit; BlobField.LoadFromStream (Stream); finally Stream.Free; end; finally jpeg.Free; end; end;
Veritabanındaki jpeg'i TImage'a alma
procedure TForm1.Table1AfterScroll(DataSet: TDataSet); var MS: TMemoryStream; J1: TJPEGImage; begin J1 := TJPEGImage.Create; MS := TMemoryStream.Create; try TBlobField(DataSet.Fieldbyname('myBlob')).SaveToStream(MS); MS.Seek(0,soFromBeginning); with J1 do begin PixelFormat := jf24Bit; Scale := jsFullSize; Grayscale := False; Performance := jpBestQuality; ProgressiveDisplay := True; ProgressiveEncoding := True; LoadFromStream(MS); end; if MS.Size >0 then Image1.Picture.Assign(J1) else Image1.Picture.Assign(nil); finally J1.Free; MS.Free; end; end;
I. Yol : Renkleri integer tipinde bir alana kaydedebilirsiniz.
Veritabanına kaydetmek için : Table1.FieldByName('ColorField').AsInteger := Integer(AColor);
Veritabanından okumak için : AColor := TColor(
Table1.FieldByName('ColorField').AsInteger);II.Yol : StringToColor ve ColorToString döünüşümlerini yaparak string bir alana kaydedebilirsiniz.
DataModule kullanıyorum, "Access Violation" hatası alıyorum
Access Violation olmayan, henüz oluşturulmamış bir nesneye ulaşmak isterseniz
çıkar. Mesela 10 öğeli bir dizide 11. öğeye ulaşmaya çalışırsanız, bu
hata çıkar. 11. öğe yok çünki.
Bu hata, büyük ihtimalle ana formu datamodule'den önce create ettiğiniz için oluşuyor.
Project -> View Source ile dpr dosyasını açıp, datamodule'ü en üstte taşıyın,
ilk
önce data module oluşturulsun.
SQL sorgusu ile
tablomdan NO isimli alanı seçerken problem çıkıyor
Alan isimlerini verirken, NO, NOT vb. ayrılmış kelimeleri (reserved words) kullanmamalısınız. Bu kelimelerin tamamını kullandığınız veritabanının dökümanlarından öğrenebilirsiniz.
Bu hiç uygun bir yol değil. Hele ki bu auto increment alanları key olarak
kullanıyorsanız, zaten AutoInc alanlara müdahele edemezsiniz.
Kullanıcı sıraladığında bir atlayarak gözüksün, ne farkeder. Bence pek farkeden
birşey olmaz. Kullanıcı sizden bu tip isteklerde bulunuyorsa yönlendirmeniz
lazım, olmaz diye. Zaten çoğu yerde göstermenize bile gerek yok. Genelde takip
için başka alanlar olduğu için ben genelde bu alanları grid'te ve formda
gizlerim. Öğrenciyse okul no, çalışansa sicil no vs. gibi.
Bu tip alanları autoinc yerine kendiniz artırıyor olsanız bile, yeniden sıralama
yoluna gitmeyin. Giderseniz başınız ağrıyabilir.
Programımı hızlandırmak
için neler yapabilirim
1. Sorgulama, Sıralama ve gruplama için çok kullandığın alanları indeksle.
Mesela genelde kayıtlarını tarih'e göre süzüyorsan, Tarih alanını indeksle.
2. Sadece gerekli alanları seç. Mesela bir tabloda 15 alan var ve sana sadece 4
tanesi yetiyor ise, "SELECT *" ile tüm alanları seçmek yerine, "SELECT ALAN1,
ALAN2, ALAN3, ALAN4" gibi sadece gerekli alanları seç.
3. BLOB alan kullanıyorsan sorguda bunları seçmemeye gayret et.
4. ve en önemlisi ne kadar az kayıt seçebiliyorsan o kadar iyi ve hızlı olur.
Mesela fatura girişi yaparken tüm fatura tablosunu seçmek yerine sadece 1 kayıt
seçebilirsin.
5. Eğer veritabanınız destekliyorsa mümkün olduğu kadar veritabanı bazlı çalışın, trigger ve stored procedure kullanın.
Table'daki bir blob alanın büyüklüğünü bulma
function GetBlobSize(Field: TBlobField): Longint;
begin
with TBlobStream.Create(Field, bmRead) do
try
Result := Seek(0, 2);
finally
Free;
end;
end;
Kullanılışı : Edit1.Text := IntToStr(GetBlobSize(Notes));
DBGrid'de Aktif Satırın İstenen Renge Boyanması
var
Form1: TForm1;
implementation
type
TCustomDBGridCracker = class(TCustomDBGrid); // datalink'i kullanabilmemiz
için şart
{$R *.dfm}
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TCustomDBGridCracker(DBGrid1) do
if DataLink.ActiveRecord = Row - 1 then
Canvas.Brush.Color := clRed
else
Canvas.Brush.Color := clWhite;
DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
dBase Kullanırken Oluşan Temp Dosyalar
Veritabanı olarak dBase kullanıyorsanız ve _qsql000.dbf , _qsql213.dbf bunlar gibi temp dosyalar oluşabilir. Eğer tablolara query'lerle ulaşıyorsan bu tip temp tabloların oluşması normaldır. Program normal şekilde sonlandırıldığında silinmeleri gerekir. Yoksa programı kapatırken o tip dosyaları aratıp sildirebilirsiniz.
Paradox Tablosunda "index out of range" Hatası
index out of date hatası, tablodaki veri ile index arasında uyşmazlık olduğu zaman meydana çıkan bir hata. Bu durumu düzeltmek için indexi kaldırıp tekrar oluşturun.
"Capability not supported" hatası
Bu mesajı genelde büyük veritabanlarından farklı
özellikteki sql ifadelerini database desktop gibi bir uygulamada çalıştırmak
istediğinizde karşınıza çıkar. Böyle bir durumla karşılaşmamak için
uygulamanızda kullandığınız database'in toolları ile denemek istediğiniz şeyleri
yapabilirsiniz (Sql Server-Query Analyzer, Oracle-Sql Plus veya 3rd parti
programlar)
Programınız içinde BDE kullanıyorsanız Database nesnesini eksik etmeyin...
Paradox'ta Bozulan Indekslerin Düzeltilmesi
http://www.borland.com/devsupport/bde/files/tutil50.zip
Query'de Sonuçlar Salt Okunur (Read Only) Dönüyor
Query nesnesinde sonuçlar salt okunur olarak döner (AdoQuery hariç!). Eğer SQL cümleciğiniz basit ise Query'nin RequestLive özelliğini True yaparak, Query'i yazma/okuma durumuna alabilirsiniz. Ancak karmaşık SQL cümlelerinde bu işe yaramayacaktır. Bunun için TUpdateSQL bileşenini kullanmalısınız.
http://www.ibphoenix.com/ adresinden Main Downloads kısmına girin. ODBC kısmından IBPhoenix Open Source ODBC Driver'a tıklayın.
ADO'da Sorgu Çalışırken İptal Etme
1. Query'de ExecuteOptions =[eoAsyncFetchNonBlocking]
yapın.
2. OnFetchProgressEvent olayında aşağıdaki komutu yazın.
DataSet.Recordset.Cancel;
NOT : tabii Application.ProcessMessagess komutunu vermeyi unutmayın.
View nedir ve niçin kullanılır?
view'lar bir veya birden fazla tablodan verileri
çekmek için; bir SQL cümlesi ile oluşturulan sanal bir tablodur. Bu tablo veya
tablolara kayıt eklendikçe, ilgili view'da kayıtları görebilirsiniz. View'daki
bilgiler veritabanında depolanmaz, ilgili tablolardan alınır. Ne işe yarar:
1. Birden fazla tablodan kolayca veri çekmek için. Mesela Rapor oluşturmak veya
acemi programcıların işini kolaylaştırmak için.
2. Bazı bilgileri gizlemek için. Mesela personel tablonuz var. Tüm alanlar
görünsün ancak maaş kısmı görünmesin istiyorsunuz. Bu tip durumlarda faydalı
olur.
3. Tabloyla birlikte bir takım bilgiler göstermek için kullanışlı olabilir. Mesela bazı alanları toplamı veya bu alanlardan en büyüğü, en küçüğünü göstermek gibi.
Query'deki SQL cümlesini kontrol etmek
Eğer SQL cümlesini kod ile oluşturyorsanız, bir hata durumunda oluşan SQL cümleciğini görüp, hatayı tespit etmek isteyebilirsiniz. Bu durumda kodda SQL cümlesini ekledikten sora Open/ExecSQL komutunu vermeden şu satırı yazın. Bu size Query'nin içinde oluşan SQL cümlesini gösterir.
ShowMessage(Query1.SQL.Text);
DBGrid'te satır numarası oluşturma
Bunun için kullandığınız table'da bir calculated alan oluşturun, mesela
SIRANO olsun. Daha sonra Table'ın OnCalcFields olayına
aşağıdaki kodu yazın:
Table1.FieldByName('SIRANO').AsInteger := Table1.RecNo + 1;
FireBird/Interbase veritabanı ve tabloları oluşturma
Bunun için veritabanı ile birlikte gelen IB Console programını kullanabilirsiniz. Ancak bu pek kullanışlı değildir. Piyasada bu işi yapan birçok araç var. Bunlardan en iyileri :
* IB Expert : www.ibexpert.com - Personal sürümü ücretsiz.
Bu araçlar ile veritabanı, tablo, index oluşturma, kayıtları görme vs. gibi komple veritabanı yönetim işlemlerini yapabilirsiniz.
dBase ve paradox tablolarının pack edilmesi
dBase'de bir kayıtı sildiğiniz zaman fiziksel olarak silinmez, dosya da kalır. Pack işlemi silinen ama hala dosyada duran kayıtları fiziksel olarak siler ve dosyanın boyutunu küçültür.
Paradox'ta da kayıt silindiği zaman fiziksel olarak silinmez ancak sonraki yapılan kayıtlar, bu silinen kayıtların üzerine kaydedildiğinden paradox tablolarında, pack işlemi pek gerekli değildir.
dBase'de pack işlemini, Borland'ın yayınladığı kodlarla yapabilirsiniz. Şu iki dosyayı indirin :
http://www.borland.com/devsupport/bde/delphi_controls/table_pack/tablpack.zip
http://www.borland.com/devsupport/bde/delphi_controls/table_pack/packex.zip
Paradox için BDE Alias'ı Oluşturma
* BDE Administrator'ü açın. Denetim Masası veya Delphi
linklerinden
* Object -> New komutunu verin
* Database Driver Name'de STANDART seçili olsun, OK'a basın
* Alias'a istediğiniz bir isim verin, enter'a basın
* Path kısmından tabloların olduğu klasörü seçin
* Object -> Apply komutunu verin.
Datamodule nedir ve Niçin Kullanılır
Datamodule özel bir formdur ve görünmeyen (non visual) bileşenleri birden fazla formdan ortak kullanmak için tercih edilir. Bunlarda genelde veritabanı bileşenleridir. Mesela bir datamodüle koyduğunuz bir table bileşenini birçok formdan kullanabilirsiniz. Tabi illa veritabanı bileşeni olması gerekmiyor. Diğer görünmeyen bileşenleride datamodule'e koyabilirsiniz.
Paradox'ta Bilgilerin Kaybolması
Elektirik kesintisi gibi durumlarda paradox tablosundaki verilerin kaybını önlemek için :
Uses a BDE ekleyin ve her table veya query nin
afterpost olayına aşağıdaki kodu yaz. Bir daha elektrik kesilmesinden
etkilenmezsin ve index bozulmalarıda yaşamazsınız.
try
DBISaveChanges((DataSet As TBDEDataSet).Handle)
except
On EDatabaseError do
ShowMessage('Tabloya Kaydetme hatası !...');
end;
DisableControls-EnableControls
Mesela bir tabloda kayıtları baştan sonra tarıyorsanız, bu kodları yazmazsanız, geçerli kayıtın bilgileri bağlı DBEdit, DBGrid vs. de güncellenir. Bu hem görüntü açısından hoş olmuyor, hem de işlemi yavaşlatıyor. Bu kodları yazarsanız bağlı bileşenlerle irtibat kesiliyor ve bu olumsuzluklar olmuyor, tekrar bağlıyorsunuz.
Open ile
ExecSql arasındaki fark nedir?
Delphi'de Query'ler iki şekilde açılabilir : Open veya ExecSql. Peki ne zaman Open, ne zaman ExecSql kullanılır? Bu çalıştırdığınız SQL cümlesine bağlı. Eğer SQL cümlesi sonuçta size kayıt(lar) döndürüyorsa Open kullanmalısınız. Mesela SQL cümleniz "SELECT *..." gibi ise. Eğer SQL cümleniz hiçibr kayıt döndürmüyorsa, ExecSQL kullanmalısınız. Mesela UPDATE, INSERT, DELETE gibi bir sql cümlesi yazmışsanız.
Database'i açtığım anda Login ekranı çıkmasın
TDatabase nesnesi veya benzer işlevi gören (mesela TAdoConnection) bir bileşeni açtığınız zaman karşınıza Login ekranı gelir ve sizden kullanıcı ismi ile şifre girmeniz istenir. Bu ekranın çıkmaması için LoginPrompt özelliğini False yapın.
DBLookupComboBox'ın içerisini temizlemek
Delphi'de temel kural olarak, DB bileşenlere (DBEdit, DBLookupComboBox vs) atama yapmayın, ilgili field'a atama yapın. DBLokupComboBox'ın içeriğini temizlemek için KeyValue'sinin değerini null yapın. Örneğin PERSONEL tablosunda BOLUM_NO alanına karşılık BOLUM_ADINI getiriyorsanız :
PERSONELBOLUM_NO.Clear;
Tekrarlanan kayıtları tespit etme
Bazı kayıtlardan çift ise problem çıkartabilir. Bu tip kayıtları SQL ile çok kolay bir şekilde tespit edebilirsiniz. Mesela PERSONEL tablosunda, birden fazla aynı isme sahip kayıtları dökmek için :
SELECT AD_SOYAD, COUNT(*)
FROM TABLO_ADI
GROUP BY AD_SOYAD
HAVING COUNT(*)>1
bimeks borland component database delphi delphi.net delphi dersleri firebird help interbase makale oracle
seminer software sybase veritabanı web