Programlama yapalım ve Öğrenelim. - Delphi Eğitim95
  Ana Sayfa
  .NET Eğitim Notları
  Visual C# .NET Örnek Kodları
  VisualBasic.NET Örnek Kodları
  J# Örnekleri
  ASP.NET Örnek Kodları
  Delphi Eğitim
  => Delphi Eğitim1
  => Delphi Eğitim2
  => Delphi Eğitim3
  => Delphi Eğitim4
  => Delphi Eğitim5
  => Delphi Eğitim6
  => Delphi Eğitim7
  => Delphi Eğitim8
  => Delphi Eğitim9
  => Delphi Eğitim10
  => Delphi Eğitim11
  => Delphi Eğitim13
  => Delphi Eğitim14
  => Delphi Eğitim15
  => Delphi Eğitim16
  => Delphi Eğitim17
  => Delphi Eğitim18
  => Delphi Eğitim19
  => Delphi Eğitim20
  => Delphi Eğitim21
  => Delphi Eğitim22
  => Delphi Eğitim23
  => Delphi Eğitim24
  => Delphi Eğitim25
  => Delphi Eğitim26
  => Delphi Eğitim27
  => Delphi Eğitim28
  => Delphi Eğitim29
  => Delphi Eğitim30
  => Delphi Eğtim31
  => Delphi Eğitim32
  => Delphi Eğitim33
  => Delphi Eğitim34
  => Delphi Eğitim35
  => Delphi Eğitim36
  => Delphi Eğitim37
  => Delphi Eğitim38
  => Delphi Eğitim39
  => Delphi Eğitim40
  => Delphi Eğitim41
  => Delphi Eğitim42
  => Delphi Eğitim43
  => Delphi Eğitim44
  => Delphi Eğitim45
  => Delphi Eğitim46
  => Delphi Eğitim47
  => Delphi Eğitim48
  => Delphi Eğitim49
  => Delphi Eğitim50
  => Delphi Eğitim51
  => Delphi Eğitim52
  => Delphi Eğitim53
  => Delphi Eğitim54
  => Delphi Eğitim55
  => Delphi Eğitim56
  => Delphi Eğitim57
  => Delphi Eğitim58
  => Delphi Eğitim59
  => Delphi Eğitim60
  => Delphi Eğitim61
  => Delphi Eğitim62
  => Delphi Eğitim63
  => Delphi Eğitim64
  => Delphi Eğitim65
  => Delphi Eğitim66
  => Delphi Eğitim67
  => Delphi Eğitim68
  => Delphi Eğitim69
  => Delphi Eğitim70
  => Delphi Eğitim71
  => Delphi Eğitim72
  => Delphi Eğitim73
  => Delphi Eğitim74
  => Delphi Eğitim75
  => Delphi Eğitim76
  => Delphi Eğitim77
  => Delphi Eğitim78
  => Delphi Eğitim79
  => Delphi Eğitim80
  => Delphi Eğitim81
  => Delphi Eğitim82
  => Delphi Eğitim83
  => Delphi Eğitim84
  => Delphi Eğitim85
  => Delphi Eğitim86
  => Delphi Eğitim87
  => Delphi Eğitim88
  => Delphi Eğitim89
  => Delphi Eğitim90
  => Delphi Eğitim91
  => Delphi Eğitim92
  => Delphi Eğitim93
  => Delphi Eğitim94
  => Delphi Eğitim95
  => Delphi Eğitim96
  => Delphi Eğitim97
  => Delphi Eğitim98
  => Delphi Eğitim99
  => Delphi Eğitim100
  => Delphi Eğitim101
  => Delphi Eğitim102
  => Delphi Eğitim103
  => Delphi Eğitim104
  => Delphi Eğitim105
  => Delphi Eğitim106
  => Delphi Eğitim107
  => Delphi Eğitim108
  => Delphi Eğitim109
  => Delphi Eğitim110
  => Delphi Eğitim111
  => Delphi Eğitim112
  => Delphi Eğitim113
  => Delphi Eğitim114
  => Delphi Eğitim115
  => Delphi Eğitim116
  => Delphi Eğitim117
  => Delphi Eğitim118
  => Delphi Eğitim119
  => Delphi Eğitim120
  => Delphi Eğitim121
  => Delphi Eğitim122
  => Delphi Eğitim123
  => Delphi Eğitim124
  => Delphi Eğitim125
  => Delphi Eğitim126
  => Delphi Eğitim127
  => Delphi Eğitim128
  => Delphi Eğitim129
  => Delphi Eğitim130
  => Delphi Eğitim131
  => Delphi Eğitim132
  => Delphi Eğitim133
  => Delphi Eğitim134
  => Delphi Eğitim135
  => Delphi Eğitim136
  => Delphi Eğitim137
  => Delphi Eğitim138
  => Delphi Eğitim139
  => Delphi Eğitim140
  => Delphi Eğitim141
  => Delphi Eğitim142
  => Delphi Eğitim143
  => Delphi Eğitim144
  => Delphi Eğitim145
  => Delphi Eğitim146
  => Delphi eğitim147
  => Delphi Eğitim148
  => Delphi Eğitim149
  => Delphi Eğitim150
  => Delphi Eğitim151
  => Delphi Eğitim152
  => Delphi Eğitim153
  => Delphi Eğitim154
  => Delphi Eğitim155
  => Delphi Eğitim156
  => Delphi Eğitim157
  => Delphi Eğitim158
  => Delphi Eğitim159
  => Delphi Eğitim160
  => Delphi Eğitim161
  => Delphi Eğitim162
  => Delphi Eğitim164
  => Delphi Eğitim165
  => Delphi Eğitim166
  => Delphi Eğitim167
  => Delphi Eğitim168
  => Delphi Eğitim169
  => Delphi Eğitim170
  => Delphi Eğitim171
  => Delphi Eğitim172
  => Delphi Eğitim173
  => Delphi Eğitim174
  => Delphi Eğitim175
  => Delphi Eğitim176
  => Delphi Eğitim177
  => Delphi Eğitim178
  => Delphi Eğitim179
  => Delphi Eğitim180
  => Delphi Eğitim181
  => Delphi Eğitim182
  => Delphi Eğitim183
  => Delphi Eğitim184
  => Delphi Eğitim185
  => Delphi Eğitim186
  => Delphi Eğitim187
  => Delphi Eğitim188
  => Delphi Eğitim189
  => Delphi Eğitim190
  => Delphi Eğitim191
  => Delphi Eğitim192
  => Delphi Eğitim193
  => Delphi Eğitim194
  => Delphi Eğitim195
  => Delphi Eğitim196
  => Delphi Eğitim197
  => Delphi Eğitim198
  => Delphi Eğitim199
  => Delphi Eğitim200
  => Delphi Eğitim201
  => Delphi Eğitim202
  => Delphi Eğitim203
  => Delphi Eğitim204
  => Delphi Eğitim205
  => Delphi Eğitim206
  => Delphi Eğitim207
  => Delphi Eğitim208
  => Delphi Eğitim209
  => Delphi Eğitim210
  => Delphi Eğitim211
  => Delphi Eğitim212
  => Delphi Eğitim213
  => Delphi Eğitim214
  => Delphi Eğitim215
  => Delphi Eğitim216
  => Delphi Eğitim217
  => Delphi Eğitim218
  => Delphi Eğitim219
  => Delphi Eğitim220
  => Delphi Eğitim221
  => Delphi Eğitim222
  => Delphi Eğitim223
  => Delphi Eğitim224
  => Delphi Eğitim225
  => Delphi Eğitim226
  => Delphi Eğitim227
  => Delphi Eğitim228
  => Delphi Eğitim229
  => Delphi Eğitim230
  => Delphi Eğitim231
  => Delphi Eğitim232
  => Delphi Eğitim233
  => Delphi Eğitim234
  => Delphi Eğitim235
  => Delphi Eğitim236
  => Delphi Eğitim237
  => Delphi Eğitim238
  => Delphi Eğitim239
  => Delphi Eğitim240
  => Delphi Eğitim241
  => Delphi Eğitim242
  İletişim

veritabanı ipuclari

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 Ş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 DBGridde birden fazla seçilen kayıtlara ulaşmak

 

Eğer gridin MultiSelect özelliği True yapılmışsa ve gridden 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

 

Delphi - .....................................

 

tarih-saat fonksiyonlari

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 

TARİH VE SAAT (DateTime) FONKSİYONLARI

 

Delphi her türlü tarih fonksiyonu içeren DateUtils unitini içerir.

 Aşağıda bu fonksiyonlardan en çok ihtiyacınız olacağınızı düşündüklerimi açıkladım.

 Her fonksiyondan sonra, bir örnek ve örneğin döndüreceği değeri yazdım.

 Böylelikle konu daha açık anlaşılacaktır.

 

 

Günün tarihini "03/09/2002" Salı, saatini ise "11:05:03" olarak kabul ettim.

Bu fonksiyonları kullanırken uses kısmına DateUtils'i eklemeyi unutmayın.

 

 

-*- CompareDate : verilen iki tarihi karşılaştırır. 1. tarih büyükse 1, küçükse -1,

    eğer iki tarihte aynı ise 0 değerini döndürür.

 

            CompareDate(Date -2 , Date) = -1

 

    NOT : Tarihler üzerinde direk toplama ve çıkarma işlemi yapabilirsiniz. "Date -2" iki

    gün öncesinin tarihini verecektir.

 

-*- CompareDateTime : verilen iki tarih ve saat içeren datetime değerini karşılaştırır.

     1. değer büyükse 1, küçükse -1, her iki tarihsaat değeri aynı ise 0 döndürür.

     Burada değerin aynı olması demek yıl'dan başlayark saliseye kadar tüm değerlerin aynı olması demektir.

 

-*- CompareTime : verilen iki saat değerini karşılaştırır. 1. değer büyükse 1, küçükse -1,

    iki değerde aynı ise 0 döndürür.

 

-*- CurrentYear : Geçerli yıl bilgisini 4 karakter olarak döndürür. 2002 gibi.

 

            CurrentYear = 2002

 

-*- Date : Geçerli tarihi döndürür.

 

            Date = 03/09/2002

 

-*- DateOf : Bir datetime değerini alarak bunun sadece tarih kısmını döndürür.

     Aslında burada saat bilgisi silinmez, "00:00:00" yani geceyarısını gösterecek şekilde değiştirilir.

    Yani tarih ve saat ayrılmaz ikilidir. Sürekli beraberdirler.

 

            DateOf ( Now ) = 03/09/2002

 

-*- DateTimeToStr : Verilen bir DateTime değerini string'e çevirir.

 

            DateTimeToStr ( Now ) = '03/09/2002 11:05:03'

 

-*- DateTimeToString : Verilen bir DateTime değerini istediğiniz formatta string'e çevirir.

 

            var

              Str : String;

 

              DateTimeToString(Str, 'd mmmm yyyy dddd, hh:nn', Now);

              ShowMessage ( Str );  = 3 Eylül 2002 Salı, 11:05

 

-*- DateToStr : verilen bir DateTime değerini string'e çevirir. Sonuçta sadece tarih verisi bulunur,

                saat olmaz.

 

            DateToStr ( Date) = '03/09/2002'

 

-*- DayOf : Verilen bir DateTime değerindeki günü döndürür. Yani sonuç 1 ile 31 arasında bir değer olabilir.

 

            DayOf ( Date ) = 3

 

-*- DayOfTheMonth : DayOf fonksiyonu ile tamamen aynıdır.

 

            DayOfTheMonth ( Date ) = 3

 

-*- DayOfTheWeek : Haftanın kaçıncı günü olduğunu döndürür. Pazartesi ise 1, Salı ise 2, ...

                  Pazar ise 7 döndürür.

 

            DayOfTheWeek ( Date ) = 2

 

-*- DayOfTheYear : Yılın kaçıncı günü olduğunu döndürür.

 

            DayOfTheYear ( Date ) = 246

 

-*- DayOfWeek : Haftanın kaçıncı günü olduğunu döndürür. Bu fonksiyonun farkı Pazar günü ilk gün sayılır.

                Yani Pazar ise 1, Pazartesi 2 ... Cumartesi ise 7 döndürür.

 

            DayOfWeek ( Date ) = 3

 

-*- DaysBetween : verilen iki DateTime arasındaki geçen gün sayısını döndürür.

                 Bu fonksiyonda saatte önemlidir. 24 saat geçmiş olmalıdır.

                 Yani "02/09/2002 11:54:00" ile "03/09/2002 11:53:59" arasındaki gün sayısı 24

                 saat dolmadığı için 0 dır.

 

-*- DaysInAMonth : Verilen yıl ve aydaki gün sayısını döndürür.

 

            DaysInAMonth (2002, 5) = 31

 

-*- DaysInAYear : Verilen yılda kaç gün olduğunu döndürür.

 

            DaysInAYear ( 2002 ) = 365

 

-*- DaysInMonth : Verilen tarihteki ayın kaç gün olduğunu hesaplar. Yani yıl ve ay

                 değerini verdiğiniz tarihten alır.

 

            DaysInMonth ( Date ) = 30

 

-*- DaysInYear : Verilen tarihteki yılda kaç gün olduğunu döndürür.

                 Yani yıl değerini verdiğiniz tarihten alır.

 

            DaysInYear ( Date ) = 365

 

-*- DaySpan : Verilen iki DateTime değeri arasındaki gün farkını bulur.

             DaysBetween fonksiyonundan farkı, küsratlı değerler döndürür.

             Yani iki tarih arasında 1 gün 23 saat ve 58 dakika fark varsa DaySpan : "1,998611"

             değerini döndürür, DaysBetween gün tamamlanmadığı için 1 değerini döndürür.

 

-*- DecodeDate : Verilen DateTime değerini yıl, ay ve gün değerlerini döndürür.

 

            var

              Yil, Ay, Gun : word;

 

            DecodeDate ( Date, Yil, Ay, Gun);

 

-*- DecodeDateDay : Verilen DateTime değerinin yıl ve verilen tarihinde yılın kaçıncı günü

                  olduğunu döndürür. 2002 ve 246. gün gibi.

 

-*- DecodeDateTime : Verilen DateTime değerinin yıl, ay, gün, saat, dakika, saniye,

                    salise değerlerini döndürür.

 

            var

              yil, ay, gun, saat, dakika, saniye, salise : Word;

 

            DecodeDateTime ( Now, yil, ay, gun, saat, dakika, saniye, salise);

 

-*- DecodeDateWeek : Verilen DateTime değerinin yılını, yılın kaçıncı haftası olduğunu ve

                    haftanın kaçıncı günü olduğunu döndürür.

 

-*- DecodeTime : Verilen DateTime değerinin saat, dakika, saniye ve salise değerlerini döndürür.

 

            var

              saat, dakika, saniye, salise : Word;

 

            DecodeTime ( Now, saat, dakika, saniye, salise);

 

-*- EncodeDate : Verilen yıl, ay, gün değerlerini birleştirip oluşan tarih değerini döndürür.

 

            var

              Tarih : TDateTime;

 

            Tarih := EncodeDate (2002, 10, 5); = 05/10/2002

 

-*- TryEncodeDate : Verilen yıl, ay, gün değerlerini birleştirip oluşan tarih değerini döndürür.

                  Eğer yanlış değerler verilmişse fonksiyon False değerini geri döndürür,

                  tarih başarıyla birleştirilmişse True değerini döndürür.

 

            var

              Tarih : TDateTime;

 

            if TryEncodeDate(2002, 10, 5, Tarih) then

              ShowMessage (' tarih başarıyla birleştirildi!');

 

-*- EndOfAMonth : Verilen yıl ve ayın son günü ve son anını döndürür.

 

            EndOfAMonth (2002, 5) = 31/05/2002 23:59:59

 

-*- FormatDateTime : Verilen DateTime değerini istediğiniz formatta göstermek için kullanılır.

 

            FormatDateTime ('d mmmm yyyy', Date) = '3 Eylül 2002'

 

-*- HourOf, HourofTheDay : Verilen DateTime değerinin saatini döndürür. Yani sonuç 0 ile 23 arasındadır.

 

            HourOf (Now) = 11

 

-*- HoursBetween : Verilen iki DateTime değeri arasında geçen saati döndürür. Fonksiyon 60

                  dakika tamamlanınca değeri arttırır. Yani 12:00:00 ile 12:59:59 arasındaki fark 0 (sıfır)

                   dır, ancak 13:00:00 olduğunda 1 döndürür.

 

-*- HourSpan : Verilen iki DateTime değeri arasında geçen saati döndürür.

             Yukarıdaki fonksiyondan farkı saat tam olmasa bile değeri küsuratlı olarak döndürür.

             Mesela 12:00:00 ile 12:59:59 arasındaki saat farkı 0,9998 saat gibi.

 

-*- IncMonth : Verilen tarihi, istenilen ay kadar artırır veya azaltır.

      o Eğer parametre - verilirse önceki ayları döndürür. Örneğin -1 verilirse bir ay önceki tarihi döndürür.

      o Eğer parametre 1 den büyük bir değer verilirse o kadar ay sonrasını döndürür.

      o Eğer tarih arttırıldığı zaman verilen gün o ay içerinde yoksa, o ayın son günü döndürülür. Mesela 31/01/2002 tarihini bir ay artırırsanız şubat ayında 31. gün olmadığı için sonuç 28/02/2002 olacaktır.

 

            IncMonth ( Date ) = 03/10/2002

 

-*- IncDay : Verilen tarihi istenilen gün kadar artırır veya azaltır. Parametre + verilirse artırır,

                                                                                - verilirse azaltır.

 

            IncDay ( Date ) = 04/09/2002

            IncDay ( Date, 3 ) = 06/09/2002

            IncDay ( Date, -1) = 02/09/2002

 

-*- IncHour : Verilen DateTime değerinin saatinin istenilen değer kadar artırır veya azaltır.

             Benzer şekilde IncMinute, IncMilisecond, IncSecond fonksiyonları da vardır.

 

-*- IncWeek : Verilen tarihi istenilen hafta sayısı kadar artırır veya azaltır. Parametre + verilirse artırır,

                                                                                          - verilirse azaltır.

 

            IncWeek ( Date ) = 10/09/2002

 

-*- IncYear : Verilen tarihin senesini istediğinz kadar artırır veya azaltır. Parametre + verilirse artırır,

                                                                                        - verilirse azaltır.

 

            IncYear ( Date ) = 03/09/2003

            IncYear ( Date, -2) = 03/09/2000

 

-*- IsInLeapYear : Verilen tarihin artık bir senede ubat'ın 29 gün olduğu) olup olmadığını test eder.

 

            if IsInLeapYear (Date) then

              ShowMessage (' 2002 senesi artık yıl olmadığı için, bu mesajı asla göremezsiniz!');

-*- IsLeapYear : Verilen senenin artık sene ubat'ın 29 gün olduğu) olup olmadığını test eder.

 

            if IsLeapYear ( CurrentYear ) then

              ShowMessage (' Bu sene Şubat ayı 29 gün çekiyor');

 

-*- IsToday : Verilen tarihin bugünün tarihi olup olmadığını test eder. Aynı gün ise True döndürür.

 

            if IsToday ( Date ) then

              ShowMessage ( 'Date bugünün tarihini verdiği için bu mesajı görürsünüz');

 

-*- IsValidDate : Verilen yıl, ay, gün değerlerinin geçerli bir tarih olup olmadığını test eder.

                  Örneğin ay 2 ve gün 30 ise, Şubat hiç bir zaman 30 gün olamayacağı için False döndürür.

 

            if IsValidDate (2002, 10, 1) then

              ShowMessage ('geçerli bir tarihtir');

 

-*- IsValidDateTime : Verilen yıl, ay, gün, saat, dakika, saniye, salise değerlerinin geçerli bir

                    DateTime değeri olup olmadığın test eder. Geçerli ise True, değilse False döndürür.

 

            if not IsValidDateTime ( 2002, 13, 5, 11, 11, 11, 11 ) then

              ShowMessage (' ay hiç bir zaman 13 olamaz, 1 ile 12 arası bir değer olamlıdır!');

 

-*- IsValidTime : Verilen saat, dakika, saniye, salise değerlerinin geçerli bir saat değeri olup

                 olmadığın test eder. Geçerli ise True, değilse False döndürür.

 

            if not IsValidTime (30, 11, 10, 1) then

              ShowMessage (' saat 23'' ten büyük olamayacağı için geçersiz bir tarihtir');

 

-*- MinutesBetween : Verilen iki tarih arasındaki dakika farkını verir.

                    Dakika tam olduğu zaman değeri artırır. Örneğin 9:00:00 ile 9:00:59 arasındaki

                    farkı 0 (sıfır) olarak döndürür.

 

-*- MinuteSpan : Verilen iki tarih arasındaki dakika farkını verir. Dakika tam olmasa bile küsuratlı

           olarak değeri döndürür. Örneğin 9:00:00 ile 9:00:59 arasındaki farkı 0,998 dakika gibi döndürür.

 

-*- MonthOf : Verilen tarihin ayını döndürür. Yani sonuç 1 ile 12 arasında bir değer olmalıdır.

 

            MonthOf ( Date ) = 9

 

-*- MonthsBetween : Verilen iki tarih arasındaki ay farkını verir.

                   Ayların uzunlukları eşit olmadığı için bir ay 30.4375 gün olarak belirlenmiştir.

                   Her 30.4375 gün için değer 1 arttırılır.

 

-*- MonthSpan : Verilen iki tarih arasındaki ay farkını verir. 1 ay yine 30.4375 gün olarak belirlenmiştir.

               Süre tamalanmasa bile küsuratlı olarak değeri döndürür.

 

-*- Now : Geçerli tarih ve saati döndürür.

 

            Now = 03/09/2002 11:05:03

 

-*- NthDayOfWeek : Verilen tarihteki günün, o ay içindeki kaçıncı iş günü olduğunu döndürür.

                 Mesela gün Salı ve ayın ikinci Salısı ise 2 döndürür.

 

            NthDayOfWeek ( Date ) = 1

 

-*- StartOfAMonth : Verilen yıl ve aydaki ilk günün ilk anını döndürür.

 

            StartOfAMonth (2002, 5) = 01/05/2002 00:00:00

 

-*- StrToDate: Verilen stringi tarih değerine çevirir.

 

            StrToDate ('01/01/2002') = 01/01/2002

 

-*- StrToDateTime : Verilen stringi DateTime değerine çevirir.

 

            StrToDateTime ('01/01/2002 05:22:00') = 01/01/2002 05:22:00

 

-*- Time : Geçerli saati döndürür.

 

            Time = 11:05:03

 

-*- TimeToStr : Verilen saat değerini stringe çevirir.

 

            TimeToStr ( Time ) = '11:05:03'

 

-*- Today : Bugünün tarihini döndürür.

 

            Today = 03/09/2002

 

-*- Tomorrow : Ertesi günün (yarın) tarihini döndürür.

 

            Tomorrow = 04/09/2002

 

-*- YearOf : Verilen tarihin yılını döndürür.

 

            YearOf ( Date ) = 2002

 

-*- YearsBetween : Verilen iki tarih arasındaki yıl farkını döndürür.

 

-*- Yesterday : Bir önceki günün (dün) tarihini döndürür.

 

            Yesterday = 02/09/2002

 

Delphi - .....................................

 

tarih-saat fonksiyonlari

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 

TARİH VE SAAT (DateTime) FONKSİYONLARI

 

Delphi her türlü tarih fonksiyonu içeren DateUtils unitini içerir.

 Aşağıda bu fonksiyonlardan en çok ihtiyacınız olacağınızı düşündüklerimi açıkladım.

 Her fonksiyondan sonra, bir örnek ve örneğin döndüreceği değeri yazdım.

 Böylelikle konu daha açık anlaşılacaktır.

 

 

Günün tarihini "03/09/2002" Salı, saatini ise "11:05:03" olarak kabul ettim.

Bu fonksiyonları kullanırken uses kısmına DateUtils'i eklemeyi unutmayın.

 

 

-*- CompareDate : verilen iki tarihi karşılaştırır. 1. tarih büyükse 1, küçükse -1,

    eğer iki tarihte aynı ise 0 değerini döndürür.

 

            CompareDate(Date -2 , Date) = -1

 

    NOT : Tarihler üzerinde direk toplama ve çıkarma işlemi yapabilirsiniz. "Date -2" iki

    gün öncesinin tarihini verecektir.

 

-*- CompareDateTime : verilen iki tarih ve saat içeren datetime değerini karşılaştırır.

     1. değer büyükse 1, küçükse -1, her iki tarihsaat değeri aynı ise 0 döndürür.

     Burada değerin aynı olması demek yıl'dan başlayark saliseye kadar tüm değerlerin aynı olması demektir.

 

-*- CompareTime : verilen iki saat değerini karşılaştırır. 1. değer büyükse 1, küçükse -1,

    iki değerde aynı ise 0 döndürür.

 

-*- CurrentYear : Geçerli yıl bilgisini 4 karakter olarak döndürür. 2002 gibi.

 

            CurrentYear = 2002

 

-*- Date : Geçerli tarihi döndürür.

 

            Date = 03/09/2002

 

-*- DateOf : Bir datetime değerini alarak bunun sadece tarih kısmını döndürür.

     Aslında burada saat bilgisi silinmez, "00:00:00" yani geceyarısını gösterecek şekilde değiştirilir.

    Yani tarih ve saat ayrılmaz ikilidir. Sürekli beraberdirler.

 

            DateOf ( Now ) = 03/09/2002

 

-*- DateTimeToStr : Verilen bir DateTime değerini string'e çevirir.

 

            DateTimeToStr ( Now ) = '03/09/2002 11:05:03'

 

-*- DateTimeToString : Verilen bir DateTime değerini istediğiniz formatta string'e çevirir.

 

            var

              Str : String;

 

              DateTimeToString(Str, 'd mmmm yyyy dddd, hh:nn', Now);

              ShowMessage ( Str );  = 3 Eylül 2002 Salı, 11:05

 

-*- DateToStr : verilen bir DateTime değerini string'e çevirir. Sonuçta sadece tarih verisi bulunur,

                saat olmaz.

 

            DateToStr ( Date) = '03/09/2002'

 

-*- DayOf : Verilen bir DateTime değerindeki günü döndürür. Yani sonuç 1 ile 31 arasında bir değer olabilir.

 

            DayOf ( Date ) = 3

 

-*- DayOfTheMonth : DayOf fonksiyonu ile tamamen aynıdır.

 

            DayOfTheMonth ( Date ) = 3

 

-*- DayOfTheWeek : Haftanın kaçıncı günü olduğunu döndürür. Pazartesi ise 1, Salı ise 2, ...

                  Pazar ise 7 döndürür.

 

            DayOfTheWeek ( Date ) = 2

 

-*- DayOfTheYear : Yılın kaçıncı günü olduğunu döndürür.

 

            DayOfTheYear ( Date ) = 246

 

-*- DayOfWeek : Haftanın kaçıncı günü olduğunu döndürür. Bu fonksiyonun farkı Pazar günü ilk gün sayılır.

                Yani Pazar ise 1, Pazartesi 2 ... Cumartesi ise 7 döndürür.

 

            DayOfWeek ( Date ) = 3

 

-*- DaysBetween : verilen iki DateTime arasındaki geçen gün sayısını döndürür.

                 Bu fonksiyonda saatte önemlidir. 24 saat geçmiş olmalıdır.

                 Yani "02/09/2002 11:54:00" ile "03/09/2002 11:53:59" arasındaki gün sayısı 24

                 saat dolmadığı için 0 dır.

 

-*- DaysInAMonth : Verilen yıl ve aydaki gün sayısını döndürür.

 

            DaysInAMonth (2002, 5) = 31

 

-*- DaysInAYear : Verilen yılda kaç gün olduğunu döndürür.

 

            DaysInAYear ( 2002 ) = 365

 

-*- DaysInMonth : Verilen tarihteki ayın kaç gün olduğunu hesaplar. Yani yıl ve ay

                 değerini verdiğiniz tarihten alır.

 

            DaysInMonth ( Date ) = 30

 

-*- DaysInYear : Verilen tarihteki yılda kaç gün olduğunu döndürür.

                 Yani yıl değerini verdiğiniz tarihten alır.

 

            DaysInYear ( Date ) = 365

 

-*- DaySpan : Verilen iki DateTime değeri arasındaki gün farkını bulur.

             DaysBetween fonksiyonundan farkı, küsratlı değerler döndürür.

             Yani iki tarih arasında 1 gün 23 saat ve 58 dakika fark varsa DaySpan : "1,998611"

             değerini döndürür, DaysBetween gün tamamlanmadığı için 1 değerini döndürür.

 

-*- DecodeDate : Verilen DateTime değerini yıl, ay ve gün değerlerini döndürür.

 

            var

              Yil, Ay, Gun : word;

 

            DecodeDate ( Date, Yil, Ay, Gun);

 

-*- DecodeDateDay : Verilen DateTime değerinin yıl ve verilen tarihinde yılın kaçıncı günü

                  olduğunu döndürür. 2002 ve 246. gün gibi.

 

-*- DecodeDateTime : Verilen DateTime değerinin yıl, ay, gün, saat, dakika, saniye,

                    salise değerlerini döndürür.

 

            var

              yil, ay, gun, saat, dakika, saniye, salise : Word;

 

            DecodeDateTime ( Now, yil, ay, gun, saat, dakika, saniye, salise);

 

-*- DecodeDateWeek : Verilen DateTime değerinin yılını, yılın kaçıncı haftası olduğunu ve

                    haftanın kaçıncı günü olduğunu döndürür.

 

-*- DecodeTime : Verilen DateTime değerinin saat, dakika, saniye ve salise değerlerini döndürür.

 

            var

              saat, dakika, saniye, salise : Word;

 

            DecodeTime ( Now, saat, dakika, saniye, salise);

 

-*- EncodeDate : Verilen yıl, ay, gün değerlerini birleştirip oluşan tarih değerini döndürür.

 

            var

              Tarih : TDateTime;

 

            Tarih := EncodeDate (2002, 10, 5); = 05/10/2002

 

-*- TryEncodeDate : Verilen yıl, ay, gün değerlerini birleştirip oluşan tarih değerini döndürür.

                  Eğer yanlış değerler verilmişse fonksiyon False değerini geri döndürür,

                  tarih başarıyla birleştirilmişse True değerini döndürür.

 

            var

              Tarih : TDateTime;

 

            if TryEncodeDate(2002, 10, 5, Tarih) then

              ShowMessage (' tarih başarıyla birleştirildi!');

 

-*- EndOfAMonth : Verilen yıl ve ayın son günü ve son anını döndürür.

 

            EndOfAMonth (2002, 5) = 31/05/2002 23:59:59

 

-*- FormatDateTime : Verilen DateTime değerini istediğiniz formatta göstermek için kullanılır.

 

            FormatDateTime ('d mmmm yyyy', Date) = '3 Eylül 2002'

 

-*- HourOf, HourofTheDay : Verilen DateTime değerinin saatini döndürür. Yani sonuç 0 ile 23 arasındadır.

 

            HourOf (Now) = 11

 

-*- HoursBetween : Verilen iki DateTime değeri arasında geçen saati döndürür. Fonksiyon 60

                  dakika tamamlanınca değeri arttırır. Yani 12:00:00 ile 12:59:59 arasındaki fark 0 (sıfır)

                   dır, ancak 13:00:00 olduğunda 1 döndürür.

 

-*- HourSpan : Verilen iki DateTime değeri arasında geçen saati döndürür.

             Yukarıdaki fonksiyondan farkı saat tam olmasa bile değeri küsuratlı olarak döndürür.

             Mesela 12:00:00 ile 12:59:59 arasındaki saat farkı 0,9998 saat gibi.

 

-*- IncMonth : Verilen tarihi, istenilen ay kadar artırır veya azaltır.

      o Eğer parametre - verilirse önceki ayları döndürür. Örneğin -1 verilirse bir ay önceki tarihi döndürür.

      o Eğer parametre 1 den büyük bir değer verilirse o kadar ay sonrasını döndürür.

      o Eğer tarih arttırıldığı zaman verilen gün o ay içerinde yoksa, o ayın son günü döndürülür. Mesela 31/01/2002 tarihini bir ay artırırsanız şubat ayında 31. gün olmadığı için sonuç 28/02/2002 olacaktır.

 

            IncMonth ( Date ) = 03/10/2002

 

-*- IncDay : Verilen tarihi istenilen gün kadar artırır veya azaltır. Parametre + verilirse artırır,

                                                                                - verilirse azaltır.

 

            IncDay ( Date ) = 04/09/2002

            IncDay ( Date, 3 ) = 06/09/2002

            IncDay ( Date, -1) = 02/09/2002

 

-*- IncHour : Verilen DateTime değerinin saatinin istenilen değer kadar artırır veya azaltır.

             Benzer şekilde IncMinute, IncMilisecond, IncSecond fonksiyonları da vardır.

 

-*- IncWeek : Verilen tarihi istenilen hafta sayısı kadar artırır veya azaltır. Parametre + verilirse artırır,

                                                                                          - verilirse azaltır.

 

            IncWeek ( Date ) = 10/09/2002

 

-*- IncYear : Verilen tarihin senesini istediğinz kadar artırır veya azaltır. Parametre + verilirse artırır,

                                                                                        - verilirse azaltır.

 

            IncYear ( Date ) = 03/09/2003

            IncYear ( Date, -2) = 03/09/2000

 

-*- IsInLeapYear : Verilen tarihin artık bir senede ubat'ın 29 gün olduğu) olup olmadığını test eder.

 

            if IsInLeapYear (Date) then

              ShowMessage (' 2002 senesi artık yıl olmadığı için, bu mesajı asla göremezsiniz!');

-*- IsLeapYear : Verilen senenin artık sene ubat'ın 29 gün olduğu) olup olmadığını test eder.

 

            if IsLeapYear ( CurrentYear ) then

              ShowMessage (' Bu sene Şubat ayı 29 gün çekiyor');

 

-*- IsToday : Verilen tarihin bugünün tarihi olup olmadığını test eder. Aynı gün ise True döndürür.

 

            if IsToday ( Date ) then

              ShowMessage ( 'Date bugünün tarihini verdiği için bu mesajı görürsünüz');

 

-*- IsValidDate : Verilen yıl, ay, gün değerlerinin geçerli bir tarih olup olmadığını test eder.

                  Örneğin ay 2 ve gün 30 ise, Şubat hiç bir zaman 30 gün olamayacağı için False döndürür.

 

            if IsValidDate (2002, 10, 1) then

              ShowMessage ('geçerli bir tarihtir');

 

-*- IsValidDateTime : Verilen yıl, ay, gün, saat, dakika, saniye, salise değerlerinin geçerli bir

                    DateTime değeri olup olmadığın test eder. Geçerli ise True, değilse False döndürür.

 

            if not IsValidDateTime ( 2002, 13, 5, 11, 11, 11, 11 ) then

              ShowMessage (' ay hiç bir zaman 13 olamaz, 1 ile 12 arası bir değer olamlıdır!');

 

-*- IsValidTime : Verilen saat, dakika, saniye, salise değerlerinin geçerli bir saat değeri olup

                 olmadığın test eder. Geçerli ise True, değilse False döndürür.

 

            if not IsValidTime (30, 11, 10, 1) then

              ShowMessage (' saat 23'' ten büyük olamayacağı için geçersiz bir tarihtir');

 

-*- MinutesBetween : Verilen iki tarih arasındaki dakika farkını verir.

                    Dakika tam olduğu zaman değeri artırır. Örneğin 9:00:00 ile 9:00:59 arasındaki

                    farkı 0 (sıfır) olarak döndürür.

 

-*- MinuteSpan : Verilen iki tarih arasındaki dakika farkını verir. Dakika tam olmasa bile küsuratlı

           olarak değeri döndürür. Örneğin 9:00:00 ile 9:00:59 arasındaki farkı 0,998 dakika gibi döndürür.

 

-*- MonthOf : Verilen tarihin ayını döndürür. Yani sonuç 1 ile 12 arasında bir değer olmalıdır.

 

            MonthOf ( Date ) = 9

 

-*- MonthsBetween : Verilen iki tarih arasındaki ay farkını verir.

                   Ayların uzunlukları eşit olmadığı için bir ay 30.4375 gün olarak belirlenmiştir.

                   Her 30.4375 gün için değer 1 arttırılır.

 

-*- MonthSpan : Verilen iki tarih arasındaki ay farkını verir. 1 ay yine 30.4375 gün olarak belirlenmiştir.

               Süre tamalanmasa bile küsuratlı olarak değeri döndürür.

 

-*- Now : Geçerli tarih ve saati döndürür.

 

            Now = 03/09/2002 11:05:03

 

-*- NthDayOfWeek : Verilen tarihteki günün, o ay içindeki kaçıncı iş günü olduğunu döndürür.

                 Mesela gün Salı ve ayın ikinci Salısı ise 2 döndürür.

 

            NthDayOfWeek ( Date ) = 1

 

-*- StartOfAMonth : Verilen yıl ve aydaki ilk günün ilk anını döndürür.

 

            StartOfAMonth (2002, 5) = 01/05/2002 00:00:00

 

-*- StrToDate: Verilen stringi tarih değerine çevirir.

 

            StrToDate ('01/01/2002') = 01/01/2002

 

-*- StrToDateTime : Verilen stringi DateTime değerine çevirir.

 

            StrToDateTime ('01/01/2002 05:22:00') = 01/01/2002 05:22:00

 

-*- Time : Geçerli saati döndürür.

 

            Time = 11:05:03

 

-*- TimeToStr : Verilen saat değerini stringe çevirir.

 

            TimeToStr ( Time ) = '11:05:03'

 

-*- Today : Bugünün tarihini döndürür.

 

            Today = 03/09/2002

 

-*- Tomorrow : Ertesi günün (yarın) tarihini döndürür.

 

            Tomorrow = 04/09/2002

 

-*- YearOf : Verilen tarihin yılını döndürür.

 

            YearOf ( Date ) = 2002

 

-*- YearsBetween : Verilen iki tarih arasındaki yıl farkını döndürür.

 

-*- Yesterday : Bir önceki günün (dün) tarihini döndürür.

 

            Yesterday = 02/09/2002

 

Delphi - .....................................

 

registry

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

Registry Windows'un tüm ayarlarını sakladığı veri deposudur. Registry'nin önemi hafife alınmamalıdır.

Registry sistem donanım konfigürasyonu, Denetim Masası (Control Panel) ayarları gibi önemli bilgiler içerir. Sizde programlarınızla ilgili ayarları ve bazı verilerinizi Registry'de saklayabilirsiniz. Registry hakkında herhangi bir bilginiz yoksa bilgisayar dergilerine bakmanızı tavsiye ederim. Ayrıca Internet üzerinden PcWorld Dergisinin Windows 95 köşesine bakarsanız burda Registry ile ilgili bilgi bulabilirsiniz.

 

Delphi ile Registry'e bilgi yazmak ve Registry'den bilgi okumak son derece kolaydır.

Delphi'de Registry kullanımına iki yaklaşım bulunur: TRegistry ve TRegIniFile. TRegIniFile sınıfı

TRegistry sınıfının bir alt sınıfıdır ve TIniFile sınıfının yöntem ve özelliklerini kullanır,

ancak ini dosyalar yerine Registry'ye kaydeder. TRegistry sınıfını kullanmak için genellikle ilk

olarak bir anahtarı açmanız ve daha sonra değer ve alt anahtarlarıyla birlikte verilere ulaşmanız gerekir.

 

Benim yaptığım bir örnek programı (regist1.zip) esas alarak yapılan işlemleri adım adım açıkladım.

 

Registry ile ilgili komutları kullanmak için uses kısmına "Registry" ifadesini eklemelisiniz.

 

- İlk önce

var

Reg1:TRegistry;

 

ile TRegistry türünden bir değişken tanımlayın. Reg1 yerine Delphi'deki isimlendirme kuralları dahilinde

istediğiniz ismi verebilirsiniz.

 

- Daha sonra

 

    Reg1:=TRegistry.Create;

 

ile uygulama için bir Registry objesi oluşturun.

 

-Registry'de 6 tane ana anahtar bulunur. Registry objesini oluşturduğunuz zaman (bir önceki adım)

 RootKey (ana anahtar) olarak HKEY_CURRENT_USER atanır. Eğer başka bir ana anahtar'da işlem yapmak

 istiyorsanız "RootKey" özelliğini kullanmalısınız. Mesela biz işlemlerimizi HKEY_LOCAL_MACHINE'de

 yapmak istiyoruz;

 

    Reg1.RootKey:=HKEY_LOCAL_MACHINE;

 

-RootKey olarak HKEY_LOCAL_MACHINE atadık. Daha sonra işlem yapmak istediğimiz anahtarı

 "OpenKey" ile açmalıyız. OpenKey fonksiyonu iki parametre alır. Birincisi açmak istediğimiz anahtar,

 diğeri ise açmak istediğimiz anahtar yoksa bu anahtarın oluşturulup, oluşturulmayacağı. Bu özelliği

 True atarsanız açmak istediğiniz anahtar yok ise bu anahtar oluşturulur.

 

    Reg1.OpenKey('SoftwareMustafaSoftRegDeneme',True);

 

-İşlem yapacağımız anahtarı açtık. (HKEY_LOCAL_MACHINESoftwareMustafaSoftRegDeneme).

 Bu anahtarları rastgele belirlememeniz gerekir. Anahtarlarınızı nereye ekleyeceğinize dair

 bilgileri Windows 95 veya NT ile ilgili Microsoft dokümanlarından elde edebilirsiniz.

 Anahtarı açtıktan sonra çeşitli işlemler yapabilirsiniz:

 

- CreateKey('anahtar_ismi') ile yeni bir anahtar oluşturabilirsiniz.

- DeleteKey('anahtar_ismi') ile mevcut bir anahtarı silebilirsiniz.

- DeleteValue('değer_ismi') ile bir değeri silebilirsiniz.

- GetKeyNames ile geçerli anahtarın alt anahtarlarının listesini elde edebilirsiniz.

 

    Reg1.GetKeyNames(memo1.lines);

 

- GetValueNames ile geçerli anahtardaki değerlerin isimlerinin listesini elde edebilirsiniz.

 

    Reg1.GetValueNames(memo1.lines);

 

- HasSubKeys ile geçerli anahtarın alt anahtarlara sahip olup olamdığını öğrenebilirsiniz.

  Geçerli anahtar en az bir alt anahtara sahip ise bu fonksiyon True, hiç alt anahtarı yoksa

  False değerini döndürür.

- KeyExists('anahtar_ismi') ile belirttiğiniz anahtarın olup olmadığını öğrenebilirsiniz.

- ValueExists('değer_ismi') ile belirttiğiniz değerin olup olmadığını öğrenebilirsiniz.

- RenameValue(eski isim, yeni isim) ile bir değerin ismini değiştirebilirsiniz.

- WriteString('değer_ismi', 'değer') ile bir string ifadeyi yazabilirsiniz. değer String tipinde olmalıdır.

 

    Reg1.WriteString('wstring','Mustafa ŞİMŞEK');

 

- WriteInteger('değer_ismi', 'değer') ile bir integer sayıyı yazabilirsiniz. değer Integer tipinde olmalıdır.

 

    Reg1.WriteInteger('wint',1234);

 

- WriteFloat('değer_ismi', 'değer') ile bir float sayıyı yazabilirsiniz. değer Double tipinde olmalıdır.

 

    Reg1.WriteFloat('wfloat',123.45);

 

- WriteDate('değer_ismi', 'değer') ile bir tarihi yazabilirsiniz. değer TDateTime tipinde olmalıdır.

 

    Reg1.WriteDate('bugun',date);

 

- WriteTime('değer_ismi', 'değer') ile bir saati yazabilirsiniz. değer TDateTime tipinde olmalıdır.

 

    Reg1.WriteTime('wtime',time);

 

- WriteDateTime('değer_ismi', 'değer') ile tarih ve saatten oluşan ifadeyi yazabilirsiniz.

  değer TDateTime tipinde olmalıdır.

 

    Reg1.WriteDateTime('wdt',now);

 

- WriteBool('değer_ismi', 'değer') ile sadece Doğru veya Yanlış değerlerini alabilen bir

  ifadeyi yazabilirsiniz. değer sadece True veya False değerini alabilir.

- WriteCurrency('değer_ismi', 'değer') ile bir para değerini yazabilirsiniz.

  değer Currency tipinde olmalıdır.

 

    Reg1.WriteCurrency('wcurr',1000000.325);

 

 

regedit1.gif (3.402 byte)    Yazma işlemlerinden sonra registry'deki görünüm. Registry'e üç

tip veri kaydedilir. Dize değeri (string), ikili değer (binary) ve dword değeri.

Dword değerleri heksadesimal (onaltılık) veya desimal (ondalık) formdadır.

Şekilde wstring - dize değeri, wint - dword değeri geriye kalanlar ise ikili değer(binary)lerdir.

 

 

 

 

  - ReadString('değer_ismi') ile bir string ifadeyi okuyabilirsiniz.

 

    Reg1.ReadString('wstring')

 

- ReadInteger('değer_ismi') ile bir integer ifadeyi okuyabilirsiniz.

- ReadFloat('değer_ismi') ile bir float sayıyı ifadeyi okuyabilirsiniz.

- ReadDate('değer_ismi') ile bir tarihi okuyabilirsiniz.

- ReadTime('değer_ismi') ile bir saati okuyabilirsiniz.

- ReadDateTime('değer_ismi') ile bir tarih ve saatten oluşan ifadeyi okuyabilirsiniz.

- ReadBool('değer_ismi') ile bir sadece Doğru veya Yanlış değerlerini alabilen bir ifadeyi okuyabilirsiniz.

- İşlemlerimiz bittikten sonra anahtarı kapatmamız ve ayırdığımız kaynakları serbest bırakmamız lazım.

 

    Reg1.CloseKey;

    Reg1.Free;

 

Delphi - .....................................

 

Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol