Ş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}


Paradox tablosuna şifre koyma

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 nedir?

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 Alternatifleri

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.


dbGrid'e checkBox eklemek

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;

Renkleri veritabanına kaydetmek

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. 


AutoInc bir alanda silinen kayıtlar için yeniden sıralama yapmak istiyorum

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.

Bu hatanın oluşmasına sebep olan 8 neden tespit edilmiş. Aşağıdaki linkten detaylara bakabilirsiniz :

http://bdn.borland.com/article/0,1410,15209,00.html


"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

dosyasını indirin. Bu Borland'ın paradox tablolarındaki problemleri düzeltmek için yayınladığı bir dll.

http://www.borland.com/devsupport/bde/files/tutil32d.zip

bu dosyayı da indirin. Bunda da hem dll'in nasıl kullanılacağını gösteren kaynak kod var, hem de exe dosya olarak direk çalışabilir hali var. Tablolarınızı kurtarıp, daha sonra bu dll ile programınıza index düzeltme seçeneği koyabilirsiniz.

NOT : çalıştırmadan önce yedek almayı unutmayın.


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. 


Interbase için ODBC Driver

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.
* EMS Interbase Manager :
www.ems-hitech.com

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