Programlama yapalım ve Öğrenelim. - Delphi Eğitim225
  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

Veri Tabanı/BDE

Bu başlık altında, Delphi programlarında veri tabanı ve veri erişiminde kullanılan bileşenler ile ilgili püf noktaları ve gerekli kod örnekleri yer almaktadır.

Ttable/TQuery üzerinde arttırarak arama

Tedit kullanarak, Ttable üzerinde arttırmalı arama yapmak için, Tedid bileşeninin OnChange olay yordamına, aşğıdaki kod yazılır.

 

procedure TForm1.Edit1Change(Sender: TObject);

begin

With Edit1 do

if Text <> '' then

Table1.FindNearest([Text]);

end;

 Bu türlü bir arama Tquerry üzerinde yapılacaksa,

procedure TForm1.Edit1Change(Sender: TObject);

begin

With Edit1 do

if Text <> '' then begin

Query1.Filter := 'code = '''+Edit1.Text+'''';

Query1.FindFirst;

end;

end;

veya

procedure TForm1.Edit1Change(Sender: TObject);

begin

With Edit1 do

if Text <> '' then

Query1.Locate('code',Edit1.Text,[loPartialKey]);

end;

Paradox-Tablo yaratılması

Kod içerisinden bir Paradox tablosu şu şekilde yaratılır.

with TTable.create(self) do begin

     DatabaseName := 'C:temp';

     TableName := 'FOO';

     TableType := ttParadox;

     with FieldDefs do Begin

        Add('Age', ftInteger, 0, True);

        Add('Name', ftString, 25, False);

        Add('Weight', ftFloat, 0, False);

     End;

     IndexDefs.Add('MainIndex','IntField', [ixPrimary, ixUnique]);

     CreateTable;

End;

DBMemo içeriğinin başka bir DBMemo bileşenine aktarılması

DBMemo6.Lines:=DBMemo5.Lines.Assign;

TDBNavigator bileşenin, kod içerisinden kontrol edilmesi

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);

var

  BtnName: string;

begin

  case Button of

    nbFirst  : BtnName := 'nbFirst';

    nbPrior  : BtnName := 'nbPrior';

    nbNext   : BtnName := 'nbNext';

    nbLast   : BtnName := 'nbLast';

    nbInsert : BtnName := 'nbInsert';

    nbDelete : BtnName := 'nbDelete';

    nbEdit   : BtnName := 'nbEdit';

    nbPost   : BtnName := 'nbPost';

    nbCancel : BtnName := 'nbCancel';

    nbRefresh: BtnName := 'nbRefresh';

  end;

  MessageDlg(BtnName + ' button clicked.', mtInformation, [mbOK], 0);

end;

DBMemo içerisinde bir metnin aranması

procedure Tform1.FindDialog1Find(Sender: TObject);

var Buff, P, FT : PChar;

    BuffLen     : Word;

begin

   With Sender as TFindDialog do

   begin

      GetMem(FT, Length(FindText) + 1);

      StrPCopy(FT, FindText);

      BuffLen:= DBMemo1.GetTextLen + 1;

      GetMem(Buff,BuffLen);

      DBMemo1.GetTextBuf(Buff,BuffLen);

      P:= Buff + DBMemo1.SelStart + DBMemo1.SelLength;

      P:= StrPos(P, FT);

      if P = NIL then MessageBeep(0)

      else

      begin

                DBMemo1.SelStart:= P - Buff;

           DBMemo1.SelLength:= Length(FindText);

      end;

   FreeMem(FT, Length(FindText) + 1);

   FreeMem(Buff,BuffLen);

   DBMemo1.SetFocus;

   end;

end;

 

Şekil 1 : Form1

 

kod örneği  1 : form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 696

  Height = 445

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object DBMemo1: TDBMemo

    Left = 16

    Top = 152

    Width = 657

    Height = 193

    DataField = 'Notes'

    DataSource = DataSource1

    TabOrder = 0

    OnDblClick = DBMemo1DblClick

  end

  object DBGrid1: TDBGrid

    Left = 16

    Top = 16

    Width = 657

    Height = 120

    DataSource = DataSource1

    TabOrder = 1

    TitleFont.Charset = DEFAULT_CHARSET

    TitleFont.Color = clWindowText

    TitleFont.Height = -11

    TitleFont.Name = 'MS Sans Serif'

    TitleFont.Style = []

  end

  object DBNavigator1: TDBNavigator

    Left = 432

    Top = 352

    Width = 240

    Height = 25

    TabOrder = 2

  end

  object DataSource1: TDataSource

    DataSet = Table1

    Left = 138

    Top = 364

  end

  object Table1: TTable

    Active = True

    DatabaseName = 'dbdemos'

    TableName = 'BIOLIFE.DB'

    Left = 220

    Top = 366

  end

  object FindDialog1: TFindDialog

    OnFind = FindDialog1Find

    Left = 40

    Top = 360

  end

end

kod örneği  2 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Grids, DBGrids, Db, DBTables, DBCtrls, ExtCtrls;

 

type

  TForm1 = class(TForm)

    DBMemo1: TDBMemo;

    DataSource1: TDataSource;

    Table1: TTable;

    DBGrid1: TDBGrid;

    FindDialog1: TFindDialog;

    DBNavigator1: TDBNavigator;

    procedure FindDialog1Find(Sender: TObject);

    procedure DBMemo1DblClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure Tform1.FindDialog1Find(Sender: TObject);

var Buff, P, FT : PChar;

    BuffLen     : Word;

begin

   With Sender as TFindDialog do

   begin

      GetMem(FT, Length(FindText) + 1);

      StrPCopy(FT, FindText);

      BuffLen:= DBMemo1.GetTextLen + 1;

      GetMem(Buff,BuffLen);

      DBMemo1.GetTextBuf(Buff,BuffLen);

      P:= Buff + DBMemo1.SelStart + DBMemo1.SelLength;

      P:= StrPos(P, FT);

      if P = NIL then MessageBeep(0)

      else

      begin

                DBMemo1.SelStart:= P - Buff;

           DBMemo1.SelLength:= Length(FindText);

      end;

   FreeMem(FT, Length(FindText) + 1);

   FreeMem(Buff,BuffLen);

   DBMemo1.SetFocus;

   end;

end;

 

procedure TForm1.DBMemo1DblClick(Sender: TObject);

begin

finddialog1.execute;

end;

 

end.

Bir tablonun alan bilgilerinin elde edilmesi

Ttable bileşeninden yola çıkarak, bağlı olduğu tablonun alan bilgileri "FieldDefs" özelliği sayesinde elde edilebilir. GetFieldNames davranışı alan isimlerini, GetIndexNames davranışı ise tabloda mevcut olan indeks isimlerini döndürür.

Şekil 2 : form1

 

kod örneği  3 : form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 425

  Height = 340

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object Label1: TLabel

    Left = 16

    Top = 136

    Width = 43

    Height = 13

    Caption = 'İndeksler'

  end

  object Label2: TLabel

    Left = 16

    Top = 0

    Width = 32

    Height = 13

    Caption = 'Alanlar'

  end

  object Label3: TLabel

    Left = 232

    Top = 0

    Width = 122

    Height = 13

    Caption = 'Alan isimleri ve uzunlukları'

  end

  object Memo1: TMemo

    Left = 232

    Top = 16

    Width = 169

    Height = 249

    Lines.Strings = (

      'Memo1')

    TabOrder = 0

  end

  object Button1: TButton

    Left = 240

    Top = 272

    Width = 153

    Height = 25

    Caption = 'Alan isimleri ve uzunlukları'

    TabOrder = 1

    OnClick = Button1Click

  end

  object Button2: TButton

    Left = 16

    Top = 272

    Width = 201

    Height = 25

    Caption = 'Alan ve İndeks isimleri '

    TabOrder = 2

    OnClick = Button2Click

  end

  object ListBox1: TListBox

    Left = 16

    Top = 16

    Width = 201

    Height = 113

    ItemHeight = 13

    TabOrder = 3

  end

  object ListBox2: TListBox

    Left = 16

    Top = 152

    Width = 201

    Height = 113

    ItemHeight = 13

    TabOrder = 4

  end

  object Table1: TTable

    DatabaseName = 'dbdemos'

    TableName = 'ANIMALS.DBF'

    Left = 104

    Top = 72

  end

kod örneği  4 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Db, DBTables;

 

type

  TForm1 = class(TForm)

    Memo1: TMemo;

    Table1: TTable;

    Button1: TButton;

    Button2: TButton;

    ListBox1: TListBox;

    ListBox2: TListBox;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

    procedure ShowFields;

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.ShowFields;

var

   i : Word;

begin

   Memo1.Lines.Clear;

   Table1.FieldDefs.Update;

   for i := 0 to Table1.FieldDefs.Count - 1 do

      With Table1.FieldDefs.Items[i] do

       Memo1.Lines.Add(Name + ' - ' + IntToStr(Size));

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

showfields;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  If Table1.State = dsInactive then Table1.Open;

  Table1.GetFieldNames(listbox1.items);

  Table1.GetIndexNames(listbox2.items);

end;

 

 

end.

TDBGrid bileşeni üzerinde, kayıt sıralama

Eğer bir Interbase tablosu ile çalışılıyor ise, Dbgrid üzerinde seçilen kolon başlığına göre verilerin sıralanması mümkündür.

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

  if checkbox1.checked then

  with dbgrid1.datasource.dataset as ttable do

  indexfieldnames:=column.field.fieldname;

end;

Mevcut tablodaki kolonların elenmesi

Bir tablodaki alanların "Visible" özelliğine "False" değeri verilerek, istenmeyen alanların görüntülenmesi engellenir.

Table1.FieldByName(<saklanacak alanb adı>).Visible :=  False;

veya

Table1.Field[<saklanacak alan no>].Visible := false;

Bir tablodaki TMemoField tipli bir alan içeriğinin, TMemo bileşenine aktarılması

Procedure TMemoToTMemoField;

begin

   TMemoField.Assign( TMemo.Lines );

end;

 

Procedure TMemoFieldToTMemo;

VAR aBlobStream : TBlobStream;

Begin

aBlobStream := TBlobStream.Create(tblobfield(table1.fieldbyname('Notes')), bmRead);

   Memo1.Lines.LoadFromStream( aBlobStream );

   aBlobStream.Free;

end;

Bir Paradox tablosuna ikinci İndeks eklenmesi

Table1.AddIndex('<indeks adı>', 'CustNo;CustName', [ixDescending]);

DBGrid kolonları üzerinde dolaşma

dbgrid1.selectedindex:=dbgrid1.selectedindex+1;

dbgrid1.setfocus;

Detayı olan bir tablodan kayıt silme

Master-Detay ilişki içerisindeki tablolarda, detayı olan bir ana kayıt silindiğinde, detaylar ortada kalır. Ana kayıt olmadığına göre detaylara da ihtiyaç yoktur. Bu nedenle ana kayıt silinmeden önce detayları silmek gerekir. Table1 ana tabloya, Table2 de Detay tabloya bağlı kabul edilirse, Table1' den bir kayıt silinmek istendiğinde önce Table2' deki detaylar temizlenecektir aşağıdaki örnek bunu göstermektedir.

procedure TForm1.Table1BeforeDelete(DataSet: TDataset)

begin

   with Table2 do begin

     DisableControls;

     First;

     While not EOF do

        Delete;

     EnableControls;

   end;

end;

DBGrid ve Memo alanlar

DBGrid bileşeninde Memo/Blob alanlar  <memo> olarak gösterilir.

Aşağıdaki örnekte bu tür alanların da metin olarak görüntülenmesi sağlanmaktadır. Table bileşeni üzerine yüklenen kolonlardan NOTES alanı MEMO tipindedir. Bu alanın GetText yordamında Blob2Str fonksiyonu kullanılarak, alandaki veri görünür hale getirilmektedir.

procedure TForm1.Table1NotesGetText(Sender: TField; var Text: String;

  DisplayText: Boolean);

begin

Text := Blob2Str(TMemoField(Sender));

end;

Blob2Str fonksiyonu:

function Blob2Str(TheField : TMemoField): String;

var

  Buffer: PChar;

  MemSize: Integer;

  tmp:string;

begin

if TheField.IsNull then

  Result := '' else

  with TBlobStream.Create(TheField, bmRead) do

  begin

      MemSize := Size;

      Inc(MemSize); Buffer := AllocMem(MemSize);

      Read(Buffer^, memsize);

      Free;

   end;

    result:=strpas(buffer);

end;

Tablo içeriğinin TstrinGrid bileşenine doldurulması

Tablo içeriğinin TstrinGrid bileşenine doldurulması şu şekilde olur.

   table.first;

   row := 0;

   grid.rowcount := table.recordCount;

   while not table.eof do begin

      for i := 0 to table.fieldCount-1 do

         grid.cells[i,row] := table.fields[i].asString;

      inc (row);

      table.next;

   end;

TTable veya TQuery üzerinden kayıt numarasının bulunması

Dataset Paradox veya dBASE tablosuna bağlı ise kayıt numarasını bulmak, birkaç BDE fonksiyon kullanmak suretiyle mümkündür. Ancak SQL tabanlı veri tabanı sunumcularında, sunumcunun kendisi buna imkan vermiyorsa, bu bilgi elde edilemez.

Aşağıdaki fonksiyon parametre olarak bir Ttable bileşeni almakta ve gösterdiği Paradox/dBase tablosunudan kayıt numarasını, başarısız olduğunda ise 0 değerini döndürmektedir.

Bu fonksiyonun döndürdüğü kayıt numarası, kaydın tablodaki fiziksel yeri ile ilgilidir. Indeks tanımlanmış bir TTable veya "Order by" ile sıraya sokulmuş bir sorgu kümesi döndüren Tquery bileşeninde, hatalı değer döndüğü sanısına kapılınmamalıdır.

uses

DbiProcs, DbiTypes, DBConsts;

 

function Form1.Recno( oTable: TTable ): Longint;

var

  rError: DBIResult;

  rRecProp: RECprops;

  szErrMsg: DBIMSG;

begin

  Result := 0;

  try

    oTable.UpdateCursorPos;

    rError := DbiGetRecord( oTable.Handle, dbiNOLOCK, nil, @rRecProp );

    if rError = DBIERR_NONE then

      Result := rRecProp.iPhyRecNum

    else

      case rError of

      DBIERR_BOF: Result := 1;

      DBIERR_EOF: Result := oTable.RecordCount + 1;

      else

      begin

        DbiGetErrorString( rError, szErrMsg );

        ShowMessage( StrPas( szErrMsg ));

        end;

      end;

  except

    on E: EDBEngineError do ShowMessage( E.Message );

  end;

end;

Şekil 3 : Form1

 

kod örneği  5 : form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 451

  Height = 250

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object Label1: TLabel

    Left = 112

    Top = 16

    Width = 32

    Height = 13

    Caption = 'Label1'

  end

  object Label2: TLabel

    Left = 32

    Top = 16

    Width = 49

    Height = 13

    Caption = 'Kayıt No : '

  end

  object DBGrid1: TDBGrid

    Left = 16

    Top = 32

    Width = 417

    Height = 120

    DataSource = DataSource1

    TabOrder = 0

    TitleFont.Charset = DEFAULT_CHARSET

    TitleFont.Color = clWindowText

    TitleFont.Height = -11

    TitleFont.Name = 'MS Sans Serif'

    TitleFont.Style = []

  end

  object DBNavigator1: TDBNavigator

    Left = 192

    Top = 168

    Width = 240

    Height = 25

    DataSource = DataSource1

    TabOrder = 1

  end

  object DataSource1: TDataSource

    DataSet = Table1

    Left = 88

    Top = 168

  end

  object Table1: TTable

    Active = True

    AfterScroll = Table1AfterScroll

    DatabaseName = 'dbdemos'

    TableName = 'ANIMALS.DBF'

    Left = 16

    Top = 168

  end

end

kod örneği  6 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;

 

type

  TForm1 = class(TForm)

    DataSource1: TDataSource;

    DBGrid1: TDBGrid;

    DBNavigator1: TDBNavigator;

    Label1: TLabel;

    Label2: TLabel;

    Table1: TTable;

    function  Recno( oTable: Ttable): Longint;

    procedure Table1AfterScroll(DataSet: TDataSet);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

uses

DbiProcs, DbiTypes, DBConsts;

{$R *.DFM}

 

function TForm1.Recno( oTable: Ttable): Longint;

var

  rError: DBIResult;

  rRecProp: RECprops;

  szErrMsg: DBIMSG;

begin

  Result := 0;

  try

     oTable.UpdateCursorPos;

     rError := DbiGetRecord( oTable.Handle, dbiNOLOCK, nil, @rRecProp );

     if rError = DBIERR_NONE then

     Result := rRecProp.iPhyRecNum

    else

     case rError of

          DBIERR_BOF: Result := 1;

          DBIERR_EOF: Result := oTable.RecordCount + 1;

      else

      begin

        DbiGetErrorString( rError, szErrMsg );

        ShowMessage( StrPas( szErrMsg ));

        end;

      end;

  except

    on E: EDBEngineError do ShowMessage( E.Message );

  end;

end;

 

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);

begin

   label1.caption:=inttostr(recno(table1));

end;

 

end.

dBase tablolarından silinmiş kayıtların atılması

Bu işlem için DbiPackTable. İsimli BDE fonksiyonu kullanılır.

Örnek kod şu şekildedir.

uses

DbiProcs, DbiTypes, DBConsts;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Error: DbiResult;

  ErrorMsg: String;

  Special: DBIMSG;

begin

  table1.Active := False;

  try

    Table1.Exclusive := True;

    Table1.Active := True;

    Error := DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdBASE, True);

    Table1.Active := False;

    Table1.Exclusive := False;

  finally

    Table1.Active := True;

  end;

  case Error of

    DBIERR_NONE:

      ErrorMsg := 'Tamam';

    DBIERR_INVALIDPARAM:

      ErrorMsg := 'Tablo belirsiz' +

        'name is NULL';

    DBIERR_INVALIDHNDL:

      ErrorMsg := 'Veri tabanı belirsiz';

    DBIERR_NOSUCHTABLE:

      ErrorMsg := 'Tablo adı belirsiz';

    DBIERR_UNKNOWNTBLTYPE:

      ErrorMsg := 'Tablo tipi belirsiz';

    DBIERR_NEEDEXCLACCESS:

      ErrorMsg := 'Tablo exclusive modda değil';

  else

    DbiGetErrorString(Error, Special);

    ErrorMsg := '[' + IntToStr(Error) + ']: ' + Special;

  end;

  MessageDlg(ErrorMsg, mtWarning, [mbOk], 0);

end;

Uygulama içerisinden BDE Kod Adı (Alias) yaratılması

procedure createalias(aliasname, servername, servertype, filename:string);

var

 List: TStringList;

 lang,

 user,

 pdox : string;

begin

  lang:='ANTURK';

  user:='SYSDBA';

  pdox:='PARADOX';

  List := TStringList.Create;

  with List do

  begin

    Clear;

    if servertype='INTRBASE' then

    begin

      Add(Format('SERVER NAME=%s',[filename]));

      Add(Format('LANGDRIVER=%s',[lang]));

      Add(Format('USER NAME=%s',[user]));

    end;

    if servertype='STANDART' then

    begin

      Add(Format('DEFAULT DRIVER=%s',[pdox]));

      Add(Format('PATH=%s',[filename]));

    end;

  end;

  if session.isalias(aliasname) then

    Session.ModifyAlias(aliasname, List)

  else

    Session.addAlias(aliasname,servertype, List);

  Session.SaveConfigFile;

  List.Free;

end;

BDE Koad adı (alias) parametrelerinin elde edilmesi

Session.GetAliasParams('DBDEMOS',listbox1.items);

Bir dBase (.DBF) tablosundaki silinmiş kayıtların görüntülenmesi

dBase tablolarındaki silinmiş kayıtların görünür hale getirilmesi için DbiSetProp fonksiyonu kullanılır.

procedure SetDelete(oTable:TTable; Value: Boolean);

     var

       rslt: DBIResult;

       szErrMsg: DBIMSG;

     begin

       try

          oTable.DisableControls;

           try

             rslt := DbiSetProp(hDBIObj(oTable.Handle), curSOFTDELETEON,

             LongInt(Value));

             if rslt <> DBIERR_NONE then

               begin

                 DbiGetErrorString(rslt, szErrMsg);

                 raise Exception.Create(StrPas(szErrMsg));

               end;

           except

             on E: EDBEngineError do ShowMessage(E.Message);

             on E: Exception do ShowMessage(E.Message);

           end;

       finally

          oTable.Refresh;

          oTable.EnableControls;

       end;

     end;

 

Şekil 4 : Örnek uygulama form yapısı

 

kod örneği  7: Form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 559

  Height = 293

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object DBGrid1: TDBGrid

    Left = 8

    Top = 8

    Width = 409

    Height = 177

    DataSource = DataSource1

    TabOrder = 0

    TitleFont.Charset = DEFAULT_CHARSET

    TitleFont.Color = clWindowText

    TitleFont.Height = -11

    TitleFont.Name = 'MS Sans Serif'

    TitleFont.Style = []

  end

  object DBNavigator1: TDBNavigator

    Left = 8

    Top = 200

    Width = 240

    Height = 25

    DataSource = DataSource1

    TabOrder = 1

  end

  object Button1: TButton

    Left = 432

    Top = 8

    Width = 113

    Height = 25

    Caption = 'Silinenleri göster'

    TabOrder = 2

    OnClick = Button1Click

  end

  object Button2: TButton

    Left = 432

    Top = 40

    Width = 113

    Height = 25

    Caption = 'Silinenleri sakla'

    TabOrder = 3

    OnClick = Button2Click

  end

  object Table1: TTable

    Active = True

    DatabaseName = 'dbdemos'

    TableName = 'ANIMALS.DBF'

    Left = 440

    Top = 80

  end

  object DataSource1: TDataSource

    DataSet = Table1

    Left = 488

    Top = 80

  end

end

 

kod örneği  8 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;

 

type

  TForm1 = class(TForm)

    Table1: TTable;

    DataSource1: TDataSource;

    DBGrid1: TDBGrid;

    DBNavigator1: TDBNavigator;

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

uses

DbiProcs, DbiTypes, DBConsts;

 

{$R *.DFM}

 

     procedure SetDelete(oTable:TTable; Value: Boolean);

     var

       rslt: DBIResult;

       szErrMsg: DBIMSG;

     begin

       try

          oTable.DisableControls;

           try

             rslt := DbiSetProp(hDBIObj(oTable.Handle), curSOFTDELETEON,

             LongInt(Value));

             if rslt <> DBIERR_NONE then

               begin

                 DbiGetErrorString(rslt, szErrMsg);

                 raise Exception.Create(StrPas(szErrMsg));

               end;

           except

             on E: EDBEngineError do ShowMessage(E.Message);

             on E: Exception do ShowMessage(E.Message);

           end;

       finally

          oTable.Refresh;

          oTable.EnableControls;

       end;

     end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

      SetDelete(Table1, TRUE);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

   SetDelete(Table1, False);

end;

 

end.

Bir tablodaki alan sayısının bulunması

Ttable bileşenini kullanarak, bir tablodaki alan sayısının bulunması için

TableX.fieldcount

Özelliğinden faydalanılabilir. Ancak tablo alanlarının bir kısmı, ttable bileşeni üzerine yüklenmişse fieldcount özelliği sadece yüklenen alan sayısını getirir. Alanları ttable üzerine kısmen yüklenmiş olan bir tablonun, gerçek alan sayısının bulunabilmesi için, aşağıdaki fonksiyon kullanılabilir.

Bu kodun kullanılabilmesi için, form üzerine yerleştirileni ttable bileşenine, bağlandığı tablo alanlarının bir kısmı yüklenmelidir.

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Db, DBTables,

  DbiErrs, DbiTypes, DbiProcs ,bde;

 

type

  TForm1 = class(TForm)

{

Alanlar yüklendiğinde, tanımları buraya yerleşecektir.

}

  Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

function GetFieldCount(T: TTable): Integer;

var

  curProp: CURProps;

  bWasOpen: Boolean;

begin

  Result := 0; {Just in case something goes wrong.}

  bWasOpen := T.Active;

  try

    if not bWasOpen then

      T.Open;

    Check(DbiGetCursorProps(T.Handle, curProp));

    Result := curProp.iFields;

  finally

    if not bWasOpen then

      T.Close;

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

      showmessage(inttostr(table1.fieldcount));

      showmessage(inttostr(GetFieldCount(table1)));

end;

 

end.

Bir tablodaki verinin, başka bir tabloya eklenmesi

Aynı yapıdaki iki ayrı toblo muhteviyatının, birleştirilmesi için kullanılabilecek olan bu fonksiyon, <SourceTable> isimli tablodaki verileri, <DestinationTable>  isimli tabloya kopyalamaktadır. Bu yöntemle veriler, farklı veri tabanları arasında da taşınabilir.

Function AddTables(

           const

           SourceDatabaseName,

           SourceTable,

           DestDatabaseName,

           DestinationTable: string): Boolean;

Var

  BMode : TBatchMode;

Begin

  If IsTableKeyed(DestDatabaseName,DestinationTable) Then

  Begin

    If IsTableKeyed(SourceDatabaseName,SourceTable) Then

    Begin

      BMode := BatAppendUpdate;

    End

    Else

    Begin

      BMode := BatAppend;

    End;

  End

  Else

  Begin

    BMode := BatAppend;

  End;

 

  Result := DBRecordMove(SourceDatabaseName,SourceTable,

DestDatabaseName,DestinationTable,BMode);

End;

Sorgudan tablo yaratılması

Karmaşık sorgular sonucunda toplanan veriler, bu fonksiyon yardımıyla yaratılan bir tablo içerisine doldurulabilir.

Function DBCreateTableFromQuery(

            Query: TQuery;

            NewTableName,

            TableDatabaseName: String): Boolean;

var

  D         : TTable;

  ActiveWas : Boolean;

begin

  D := nil;

  try

    {The Source Table}

    ActiveWas      := Query.Active;

    Query.Active   := true;

D              := TTable.Create(nil);

    D.Active       := False;

    D.DatabaseName := TableDatabaseName;

    D.TableName    := NewTableName;

    D.ReadOnly     := False;

D.BatchMove(Query,batCopy);

    Query.Active := ActiveWas;

    Result := True;

  finally

    D.Free;

  end;

End;

Sorgudan tabloya veri aktarımı

Bir sorgu neticesinde elde edilen veriler, bu fonksiyon kullanılarak, mevcut bir tabloya aktarılabilir.

Procedure DBAddQueryToTable(

      DataSet : TQuery;

      const

      DestDatabaseName,

      DestinationTable: string);

var

  DTable : TTable;

  BMove  : TBatchMove;

begin

  DTable := TTable.Create(nil);

  BMove  := TBatchMove.Create(nil);

  Try

    DataSet.Active         := True;

    DTable.DatabaseName    := DestDatabaseName;

    DTable.TableName       := DestinationTable;

    DTable.Active          := True;

    BMove.AbortOnKeyViol   := False;

    BMove.AbortOnProblem   := False;

    BMove.ChangedTableName := 'CTable';

    BMove.Destination      := DTable;

    BMove.KeyViolTableName := 'KTable';

    BMove.Mode             := batAppend;

    BMove.ProblemTableName := 'PTable';

    BMove.Source           := DataSet;

    BMove.Execute;

  Finally

    DTable.Active            := False;

    DTable.Free;

    BMove.Free;

  End;

End;

Tablodaki bir alana ait verilerin, başka bir alana kopyalanması

Bir tabloda bulunan alanlardan bir içerisinde bulunan veriler, başka bir alana kopyalanacağı zaman, aşağıdaki fonksiyon kullanılabilir.

function DBCopyFieldAToB(

            DatabaseName,

            TableName,

            SourceField,

            DestField: String): Boolean;

var

  Query     : TQuery;

  CursorWas : TCursor;

  Sess      : TSession;

begin

  CursorWas         := Screen.Cursor;

  Sess              := DBSessionCreateNew;

  Sess.Active       := True;

  Query             := TQuery.Create(sess);

  Query.SessionName := Sess.SessionName;

  Sess.Active       := True;

  Query.Active      := False;

  Query.RequestLive := True;

  try

    Result := False;

    Query.DatabaseName := DatabaseName;

    Query.SQL.Clear;

    Query.SQL.Add('Select ');

    Query.SQL.Add(SourceField+',');

    Query.SQL.Add(DestField);

    Query.SQL.Add('From '+TableName);

    Query.Open;

    Query.First;

    While Not Query.EOF Do

    Begin

      ProgressScreenCursor;

      Try

        Query.Edit;

        Query.FieldByName(DestField).AsString :=

          Query.FieldByName(SourceField).AsString;

        Query.Post;

      Except

      End;

      Query.Next;

    End;

    Result := True;

  finally

    Query.Free;

    Screen.Cursor := CursorWas;

    Sess.Active   := False;

  end;

end;

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