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

PROGRAM BİR KEZ ÇALIŞSIN (Hatta açıksa hiç açılmasın bile)

Arkadaşlar merhabalar bilmeyen arkadaşlar için yazayım dedim, Kodbankta Programın yalnızca bir kez çalışması

ile ilgili,

 

CreateMutex(nil,FALSE,'PROGRAMADI');

if GetLastError = ERROR ALREADY EXISTS then

  begin

   ShowMessage('Program şu an çalışmakta.');

   Halt(0);

  end;

 

 

şeklinde kodlar var ve çok güzelde çalışıyor ancak bazı arkadaşlarımız bunun projenin kaynak kodlarına

eklenmesini söylemişler, bir arkadaşımızda kaynak kod dan çalışmayacağını bu kodun OnCreate yordamına

eklenmesi gerektiğini söylemiş. Şimdi önemli olan Evet bu kod doğru ve çok güzel çalışıyor ancak bir eksik

var o da bu kodlar kaynak koda eklenip çalıştırılabilirler sadece kaynak kodunuzdaki uses alanına

"CreateMutex" fonksiyonunu barındıran "Windows" ve "Showmessage" fonksiyonunu eklemeniz

gerekiyor. Bu şekilde açılış engellemenin en güzel tarafı eğer program açıksa daha form hafızaya alınmadan

program kapatılıyor. Eğerki bu kodu onCreate yordamına eklerseniz, program çalışır, form(lar) yüklenir ve

eğer aynı isimli çalışan program varsa program kapatılır. Umarım bilmeyen arkadaşlara yazdımcı olur...

 

Programın Kaynak Kodunun Son Hali:

 

 

program ABC;

 

 uses

  Forms,Windows,

  Unit1 in 'Unit1.pas' {Form1};

 

{$R *.res}

 

begin

CreateMutex(nil,FALSE,'ABC v1.0'); if GetLastError = ERROR_ALREADY_EXISTS then Halt(0); //isterseniz uyarı felan da

  Application.Initialize;                                                               // gösterebilirsiniz..

  Application.MainFormOnTaskbar := True;

  Application.Title := 'ABC v1.0';

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.

 

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

 

ArSoft : Dosyayı kendi programınızla çalıştırabilirsiniz.

{

ArSoft Yazılım

Kendi dosya formatınızı yapmak istiyorsanız aşağıdaki fonksiyonu kullanabilirsiniz.

Bu fonksiyon parametre olarak gönderilen dosya adını verir. 1 olan değeri değiştirdiğinizde

dosya hakkındaki değişik bilgileri edinebilirsiniz.

 

Program çalışır çalışmaz çift tıklanan dosyayı açmak istiyor iseniz.

1. Dosya türlerine, istediğiniz dosya türünü yazıp birlikte açabileceğiniz yani kendi yazdığınız

programın adını ve adresini yazıp ekliyorsunuz.

2.aşağıdaki kodu programınıza ekleyin.

3. Programı çalıştırın.

4. Belirttiğiniz dosyaya çift tıklayınız.

Kolay gelsin.

}

procedure TAnaForm.FormActivate(Sender: TObject);

begin

  Memo1.Lines.LoadFromFile:=paramstr(1);

end;

 

 

{

Mustafa AKDEMİR

Yazılım Uzmanı

makdemir08@hotmail.com

www.arsoft.com.tr

 

}

 

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

 

Ağdaki bilgisayar adlarını listeleme

{Valla tertemiz kod çok aradım iyisini bulamamıştım belki sizinde işinize yarar}

 

procedure EnumNetResources(List: TStrings);

 

 procedure EnumFunc(NetResource: PNetResource);

 var

   Enum: THandle;

   Count, BufferSize: DWORD;

   Buffer: array[0..16384 div SizeOf(TNetResource)] of TNetResource;

   i: Integer;

   tstr: string;

 begin

   if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetResource,

Enum) = NO_ERROR then

   try

     Count := $FFFFFFFF;

     BufferSize := SizeOf(Buffer);

     while WNetEnumResource(Enum, Count, @Buffer, BufferSize) = NO_ERROR do

       for i := 0 to Count - 1 do

       begin

         if Buffer[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then

         begin

           tstr := Buffer[i].lpRemoteName;

           delete(tstr,1,2);

           List.Add(tstr);

         end;

         if (Buffer[i].dwUsage and RESOURCEUSAGE_CONTAINER) > 0 then

           EnumFunc(@Buffer[i])

       end;

   finally

     WNetCloseEnum(Enum);

   end;

 end;

 

begin

 List.Clear;

 EnumFunc(nil);

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  EnumNetResources(ListBox1.Items);

end;

 

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

 

RichEdit'de Font Ayarlamaları

Seçili Kısmın Kalın olup olamamsı: //Eğer Kalın ise Normal Normal ise Kalın'a çevirir..

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  if fsBold in RichEdit1.SelAttributes.Style then

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style-[fsBold]

  else

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style+[fsBold];

  RichEdit1.SetFocus;

end;

 

Seçili Kısmın Yatıktalik) olup Olmaması: //Eğer Yatık ise Normal Normal ise Yatık'a çevirir.

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  if fsItalic in RichEdit1.SelAttributes.Style then

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style-[fsItalic]

  else

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style+[fsItalic];

  RichEdit1.SetFocus;

end;

 

Seçili Kısmın AltıÇizili olup Olmaması: //Eğer AltıÇizili ise Normal Normal ise AltıÇizili'ye çevirir.

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  if fsUnderline in RichEdit1.SelAttributes.Style then

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style-[fsUnderline]

  else

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style+[fsUnderline];

  RichEdit1.SetFocus;

end;

 

YazıTipi boyutunu Ayarlamak:

 

RichEdit1.SelAttributes.Size:=10; // Seçili Kısmın yazıtipi boyutunu 10 yapar

 

YazıTipi Rengini Ayarlamak:

 

RichEdit1.SelAttributes.Color:=clBlue; // Seçili Kısmın yazıtipi rengini Mavi Yapar

 

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

 

puf noktalar

//yunusnacar

       1.   Ek Bölüm : Delphi'de PÜF Noktaları

PÜF İNDEKSİ

2.    1.    VERI TABANI - BDE (7 - 105)

1)    TTABLE/TQUERY ÜZERINDE ARTTIRARAK ARAMA 7

2)    PARADOX-TABLO YARATILMASI 8

3)    DBMEMO IÇERIĞININ BAŞKA BIR DBMEMO BILEŞENINE AKTARILMASI 8

4)    TDBNAVIGATOR BILEŞENIN, KOD IÇERISINDEN KONTROL EDILMESI 8

5)    DBMEMO IÇERISINDE BIR METNIN ARANMASI 9

6)    BIR TABLONUN ALAN BILGILERININ ELDE EDILMESI 14

7)    TDBGRID BILEŞENI ÜZERINDE, KAYIT SIRALAMA 20

8)    MEVCUT TABLODAKI KOLONLARIN ELENMESI 20

9)    BIR TABLODAKI TMEMOFIELD TIPLI BIR ALAN IÇERIĞININ, TMEMO BILEŞENINE AKTARILMASI 20

10)   BIR PARADOX TABLOSUNA IKINCI İNDEKS EKLENMESI 21

11)   DBGRID KOLONLARI ÜZERINDE DOLAŞMA 21

12)   DETAYI OLAN BIR TABLODAN KAYIT SILME 21

13)   DBGRID VE MEMO ALANLAR 22

14)   TABLO IÇERIĞININ TSTRINGRID BILEŞENINE DOLDURULMASI 23

15)   TTABLE VEYA TQUERY ÜZERINDEN KAYIT NUMARASININ BULUNMASI 23

16)   DBASE TABLOLARINDAN SILINMIŞ KAYITLARIN ATILMASI 29

17)   UYGULAMA IÇERISINDEN BDE KOD ADI (ALIAS) YARATILMASI 30

18)   BDE KOD ADI (ALIAS) PARAMETRELERININ ELDE EDILMESI 31

19)   BIR DBASE (.DBF) TABLOSUNDAKI SILINMIŞ KAYITLARIN GÖRÜNTÜLENMESI 31

20)   BIR TABLODAKI ALAN SAYISININ BULUNMASI 37

21)   BIR TABLODAKI VERININ, BAŞKA BIR TABLOYA EKLENMESI 39

22)   SORGUDAN TABLO YARATILMASI 40

23)   SORGUDAN TABLOYA VERI AKTARIMI 41

24)   TABLODAKI BIR ALANA AIT VERILERIN, BAŞKA BIR ALANA KOPYALANMASI 42

25)   TABLO KOPYALAMA 44

26)   TABLO SILME 49

27)   ALAN ADININ BULUNMASI 50

28)   ORTAK ALAN ISIMLERI 51

29)   TABLODAKI ALAN ISIMLERI 53

 

30)   ALAN NUMARASI 54

31)   ALAN UZUNLUĞU 55

32)   ALAN TIPLERI 56

33)   TABLONUN ANAHTAR ALANLARI 59

34)   LOOKUP YÖNTEMIYLE DEĞER SEÇME DIYALOĞU 60

35)   BIR PARADOX TABLOSUNUN YENIDEN ANAHTARLANMASI 68

36)   TABLO ADININ DEĞIŞTIRILMESI 71

37)   TABLO YAPILARI AYNI MI? 74

38)   BIR TABLO ALANINDAKI DEĞERLERIN SAĞ TARAFINDAKI BOŞLUKLARIN TEMIZLENMESI 75

39)   ARANAN ALAN, TABLODA VAR MI? 76

40)   ALAN ANAHTAR MI? 78

41)   TABLO MEVCUT MU? 81

42)   TABLO MEVCUT VE  ESAS ANAHTARI VAR MI 82

43)   MEVCUT BIR TABLO ILE AYNI YAPIDA BAŞKA BIR TABLO YARATMAK 84

44)   TABLO FILTRELEME 86

45)   ŞIFRELI PARADOX TABLOSUNA OTOMATIK BAĞLANTI 88

46)   SUBSTRING FONKSIYONUNUN SQL CÜMLESINDE KULLANILMASI 88

47)   DBCONTROLGRID KAYDIRMA ÇUBUKLARI 89

48)   TABLODAN DOSYAYA AKTARMA 91

49)   SORGUDAN DOSYAYA AKTARMA 94

50)   ÖZEL BIR DBGRID 98

51)   DBNAVIGATOR BUTONLARINA ERIŞIM 104

3.    2.    AĞ IŞLEMLERI (106 - 115)

52)   AĞ SÜRÜCÜLERI 106

53)   AĞ DA TANIMLI KULLANICILAR KIMLER? 108

54)   TANIMLI AĞ SÜRÜCÜLERI 112

4.    3.    SES VE GRAFIK IŞLEMLERI (114 - 159)

55)   FARKLI ÇIZGILER 115

56)   STRINGGRID IÇERISINDE BMP 116

57)   TONLAMALI(GRADIENT) FORM 119

58)   EKRAN YAKALAMA 120

59)   BIR RESMI, BMP FORMATINDAN JPEG FORMATINA ÇEVIRME 121

60)   DUVAR KAĞIDI DEĞIŞTIRME 121

61)   SISTEMIN KULLANABILECEĞI RENK SAYISININ BULUNMASI 122

 

62)   DBGRID ALANLARININ RENKLENDIRILMESI 122

63)   LISTBOX BILEŞENLERINDE RENKLI SATIRLAR 123

64)   RENK PALETLERININ YARATILMASI VE KULLANIMI 124

65)   MÜZIK CD SI ÇALINIRKEN, TRACK SAYISININ OKUNMASI 128

66)   EKRAN ÇÖZÜNÜRLÜĞÜ DEĞIŞTIRME 130

67)   BMP RESMININ PANOYA YAPIŞTIRILMASI VE PANODAN KOPYALAMASI 135

68)   BIR EXE DEN IKONUN ALINIP BAŞKA BIR YERE ÇIZILMESI 138

69)   İKON RESMININ, BUTON ÜZERINDE KULLANILMASI 139

70)   GRAFIK ÇIZME IŞLEMI 142

71)   HAREKETLI GRAFIK ÇIZIMI 143

72)   PANOYA RESIM KOPYALAMA 146

73)   BIR REMIN ŞEFFAF OLARAK BAŞKA BIR RESIM ÜZERINE YAPIŞTIRILMASI 147

74)   PALET DEĞIŞTIRME 153

75)   PANODAKI METNIN DISKTEKI BIR DOSYAYA KAYDEDILMESI 158

5.    4.    FORM VE PENCERE IŞLEMLERI  (160 - 186)

76)   MASA ÜSTÜNDEKI IKONLARIN SAKLANMASI 161

77)   BÜTÜN AÇIK PENCERELERIN LISTELENMESI 165

78)   FARKLI BIR PENCERE 166

79)   ÜZERINE BIRAKILAN DOSYALARA DUYARLI FORM 167

80)   FORM BAŞLIĞININ SAKLANMASI 169

81)   STANDART DIŞI FORMLAR 169

82)   FORM POZÜSYONU 173

83)   EKRAN ÇÖZÜNÜRLÜĞÜ 174

84)   FORM BAŞLIK ALANI ÜZERINDE SAAT GÖSTERILMESI 176

85)   FORM BAŞLIĞININ GIZLENMESI 177

86)   FORMUN BAŞLIK ALANINA BUTON YERLEŞTIRME 180

87)   AÇILIR-KAPANIR FORM 184

88)   PENCERENIN TAŞINMASI 186

6.    5.    DISK VE DOSYA IŞLEMLERI  (186 - 212)

89)   SÜRÜCÜ LISTESI 186

90)   DISKET SÜRÜCÜSÜNDE DISKET TAKILI MI ? 188

91)   ÇALIŞAN UYGULAMANIN BULUNDUĞU DIZIN 188

92)   WINDOWS'UN STANDART "BROWSEFOLDER" DIYALOG PENCERESININ KULLANILMASI 189

93)   BIR DIZINDEKI DOSYALARIN VE ALT DIZINLERIN TÜMÜNÜN SILINMESI 191

 

94)   DOSYA KOPYALAMA 192

95)   İKILI DOSYADAN OKUMA 194

96)   BIR DOSYANIN SALT OKUNUR OLARAK AÇILMASI 194

97)   SATIR SONU KARAKTERININ ASCII KODU NEDIR? 194

98)   DISK SERI NUMARASI VE ETIKETININ OKUNMASI 194

99)   DOSYANIN SÜRÜKLENIP BIRAKILMASI 203

100)  WINDOWS GEÇICI KLASÖRÜNÜN BULUNMASI 205

101)  WINDOWS SISTEM DIZINININ BULUNMASI 206

102)  DOSYA YARATILMA TARIHI 206

103)  DOSYANIN SON KULLANILDIĞI TARIH 207

104)  DOSYANIN SON DEĞIŞTIRILDIĞI TARIH 208

105)  DIZIN BOŞ MU? 208

106)  DOSYA UZANTISI HANGI PROGRAMLA BAĞLANTILI? 209

107)  GERI DÖNÜŞÜM KUTUSUNA GÖNDER  211

7.    6.    GENEL  (213 - 323)

108)  KARAKTER DIZISI KARŞILAŞTIRMA 213

109)  YÜKLENMIŞ DLL DOSYALARININ HAFIZADAN ATILMASI 215

110)  BIR DOS KOMUTUNUN KULLANILMASI 216

111)  TEDIT METNININ, ONCHANGE OLAYINDA DEĞIŞTIRILMESI 218

112)  TMEMO BILEŞENINDE, IMLEÇ HANGI SATIRDA? 218

113)  ULUSAL AYARLAR 218

114)  TEDITBOX BILEŞENINDEKI METNIN ILK KARAKTERININ, BÜYÜK HARFE ÇEVIRILMESI 219

115)  WINDOWS'UN KAPANMA ANININ TESPITI 219

116)  BIR MEMO VEYA RICHEDIT BILEŞENINDE, IMLECIN ISTENEN YERE GÖNDERILMESI 223

117)  WINDOWS ÇEVIRMELI AĞ BAĞLANTI PENCERESININ ÇAĞIRILMASI 223

118)  OTOMATIK E-MAIL 223

119)  MONITÖRÜN KAPATILMASI/AÇILMASI 223

120)  WINDOWS'UN KAPATILMASI/YENIDEN BAŞLATILMASI 224

121)  SISTEMDE SES KARTI VAR MI? 224

122)  PROGRAMIN ARKA PLANDA ÇALIŞTIRILMASI 225

123)  WINDOWS GÖREV ÇUBUĞUNUN GIZLENMESI/GÖSTERILMESI 228

124)  ÇALIŞAN PROGRAMIN, GÖREV ÇUBUĞU ÜZERINDEN KALDIRILMASI 228

125)  OCX'KULLANIMI 229

126)  EKRAN ÇÖZÜNÜRLÜĞÜNDEKI DEĞIŞIKLIKLERIN TESPITI 231

127)  PANO GÖRÜNTÜLEME 232

128)  CPU BILGILERI 234

129)  ENTER TUŞUNUN TAB YERINE KULLANILABILECEĞI BIR TEDIT BILEŞENI 251

 

130)  TARIH DOĞRU MU 254

131)  AYDA KAÇ GÜN VAR? 254

132)  GEÇEN HAFTANIN ILK GÜNÜ 255

133)  SONRAKI AYIN ILK GÜNÜ 255

134)  SONRAKI HAFTANIN ILK GÜNÜ 255

135)  HAFTANIN ILK GÜNÜ 256

136)  AYIN SON GÜNÜ 256

137)  AY 256

138)  GELECEK AY 257

139)  GEÇEN AY 257

140)  GÜN SONRA 258

141)  GELECEK AY 258

142)  ÖNCEKI GÜN 258

143)  GEÇEN HAFTA 259

144)  METIN IÇERISINDEN BIR KARAKTER SILME 259

145)  METIN IÇERISINDEN, BIR KARAKTERI DEĞIŞTIRME 259

146)  BIR METNI BELLI BIR UZUNLUĞA TAMAMLAMA 260

147)  METIN DEĞIŞTIRME 262

148)  PROGRAM IÇERISINDEN, BAŞKA BIR UYGULAMAYA TUŞ GÖNDERME 263

149)  PROGRAMI DENEME SÜRÜMÜ HALINE GETIRME 263

150)  LISTBOX BILEŞENINE YATAY KAYDIRMA ÇUBUĞU EKLENMESI 264

151)  KONTROL PANEL APPLETLERININ DELPHI IÇERISINDEN KULLANILMASI 265

152)  SISTEM TARIH/SAAT AYARININ DEĞIŞTIRILMESI 266

153)  EKRAN KORUYUCUNUN DEVREDEN ÇIKARILMASI 268

154)  PROGRAMIN, WINDOWSUN BAŞLANGICINDA ÇALIŞTIRILMASI 269

155)  HATA MESAJI KONTROLÜ 270

156)  EKRAN KORUYUCU KURULMASI 271

157)  LISTBOX YAZI TIPININ DEĞIŞTIRILMESI 271

158)  TAŞINABILIR PANEL 271

159)  CD-ROM KAPAĞININ KAPATILMASI 272

160)  ÇALIŞMA ESNASINDA, BILEŞEN SAYISININ KONTROLÜ 273

161)  FARE IMLECININ, ISTENEN KONTROL ÜZERINE GETIRILMESI 274

162)  ALT-? TUŞ KOMBINASYONU 274

163)  PROGRAMIN DURAKLATILMASI 276

164)  YAZI KARAKTERI STILININ DEĞIŞTIRILMESI 277

165)  MEVCUT BIR DAVRANIŞIN DEĞIŞTIRILMESI 277

166)  KES, KOPYALA, YAPŞTIR 278

167)  FARE IMLECININ, PENCERE ÜZERINDE OLUP OLMADIĞININ KONTROLÜ 278

168)  GETKEYBOARDSTATE 279

169)  OLAY YAKALAMA YORDAMLARININ DINAMIK OLARAK ATANMASI 280

 

170)  SENDER PARAMETRESININ KULLANILMASI 281

171)  BÜYÜK METINLERIN PANODAN ALINMASI 281

172)  WINDOWS SÜRÜM NUMARASININ OKUNMASI 282

173)  PROGRAM GURUPLARININ LISTBOX BILEŞENINE DOLDURULMASI 282

174)  TLISTBOX VE TCOMBOBOX BILEŞENLERI IÇERISINE RESIM YERLEŞTIRILMESI 286

175)  BASIT BIR DLL ŞABLONU 291

176)  İPUCU PENCEREININ ÖZELLEŞTIRILMESI 292

177)  DIZI SABITI TANIMI 293

178)  STRINGRID BILEŞENI IÇERISINDEKI METNIN HIZALAMASI 293

179)  TSTRINGGRID BILEŞENINDEN BIR SATIRIN SILINMESI 294

180)  TSTRINGGRID SATIRININ EN ALTA GÖNDERILMESI 295

181)  SISTEMDE TANIMLI YAZICILARIN LISTELENMESI 295

182)  YAZDIRMA 296

183)  ISTENEN YAZICININ SEÇIMI 296

184)  YAZICI YAZI TIPLERI 297

185)  HEX->DEC 297

186)  HAFIZA MIKTARI 298

187)  FARE HAREKET ALANININ KISITLANMASI 299

188)  PGUP VE PGDOWN TUŞLARI ILE FORMU AŞAĞI YUKARI KAYDIRMA 301

189)  ÖZEL YAZI KARAKTERI 302

190)  EKRAN KORUYUCU 304

191)  BIR NESNEDEKI ÖZELLIKLERIN LISTESI 310

192)  HABERLEŞME PORTLARINA ERIŞIM 310

193)  BILEŞEN ÖZELLIKLERININ KAYIT DEFTERINDE SAKLANMASI 311

194)  LISTBOX IÇERISINDE ARTAN ARAMA 317

195)  SISTEM MENÜSÜNÜN GELIŞTIRILMESI 318

196)  BIR TEDIT.TEXT BILGISINDEKI DEĞIŞIKLIĞIN FARKEDILMESI 320

197)  COMBOBOX BILEŞENININ, IÇINE GIRILDIĞINDE AÇILMASI VE KAPANMASI 321

198)  YAZICIYA DOĞRUDAN BASKI GÖNDERME IŞLEMI 321

199)  BILGISAYARI KAPATIP YENIDEN BAŞLATMA 323

 

 

 

 

 

 

1.    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;

 

Tablo kopyalama

Bir tablo olduğu gibi , başka bir veri tabanına veya aynı veri tabanına kopyalanabilir. <DestTable> isimli bir tablo mevcutsa, eskisi silinir.. Bu fonksiyon oldukça güçlü bir veri taşıma aracıdır. Tablolar, BDE tarafından desteklenen, herhangi bir veri tabanı ortamından, başka bir veri tabanı ortamına kopyalanabilir. Aşağıdaki örnekte, "DBDemos" veri tabanındaki "Customer.db" isimli tablo, "Sybase" veri tabanına kopyalanmaktadır.,

Tablo yapısı, <SourceTable> tablosundan alınmak suretiyle, karşı tarafta yeni bir tablo yaratılmaktadır. Tarafların, lokalde veya uzakta olmaları farketmez.  Eğer karşı tarafta aynı adı taşıyan bir tablo varsa, silinir ve yerine yenisi yaratılır.

Function DBCreateTableBorrowStr(

  SourceDatabaseName   : String;

  SourceTableName      : String;

  DestDatabaseName     : String;

  DestTableName        : String): Boolean;

Var

  S             : TTable;

  D             : TTable;

  i,j           : Integer;

  IMax          : Integer;

  IndexName     : String;

  IndexFields   : String;

  IndexFields2  : String;

  Q             : TQuery;

  IDXO          : TIndexOptions;

Begin

  S := TTable.Create(nil);

  D := TTable.Create(nil);

  Try

    Try

      S.Active       := False;

      S.DatabaseName := SourceDatabaseName;

      S.TableName    := SourceTableName;

      S.TableType    := ttDefault;

      S.Active       := True;

      D.DatabaseName := DestDatabaseName;

      D.TableName    := DestTableName;

      D.TableType    := ttDefault;

      D.FieldDefs.Assign(S.FieldDefs);

      D.CreateTable;

      {Similar method could be used to create the indices}

      {D.IndexDefs.Assign(S.IndexDefs);}

      S.IndexDefs.Update;

      D.IndexDefs.Update;

      D.IndexDefs.Clear;

      D.IndexDefs.Update;

      For i := 0 To S.IndexDefs.Count - 1 Do

      Begin

        If Pos('.DB',UpperCase(DestTableName)) > 0 Then

        Begin

          {Paradox or DBase Tables}

          If S.IndexDefs.Items[i].Name = '' Then

          Begin

            If Pos('.DB',UpperCase(DestTableName)) = 0 Then

            Begin

              IndexName := DestTableName+IntToStr(i);

            End

            Else

            Begin

              IndexName := '';

            End;

          End

          Else

          Begin

            IndexName := DestTableName+IntToStr(i);

          End;

          IndexFields := S.IndexDefs.Items[i].Fields;

          D.AddIndex(IndexName,IndexFields,

          S.IndexDefs.Items[i].Options);

          D.IndexDefs.Update;

        End

        Else

        Begin

          {Non Local Tables}

          Q := TQuery.Create(nil);

          Try

            S.IndexDefs.Update;

            D.IndexDefs.Update;

            D.IndexDefs.Clear;

            D.IndexDefs.Update;

            IMax := S.IndexDefs.Count - 1;

            For j := 0 To IMax Do

            Begin

              Q. Active      := False;

              Q.DatabaseName := DestDatabaseName;

              IndexName      := DestTableName+IntToStr(i);

              IndexFields    := S.IndexDefs.Items[i].Fields;

              IndexFields2   :=

                ReplaceCharInString(IndexFields,';',',');

              Q.SQL.Clear;

              Q.SQL.Add('Create');

              If ixUnique in S. IndexDefs.Items[j].Options

              Then Begin

                Q.SQL.Add('Unique');

              End;

              If ixDescending in S.IndexDefs.Items[j].Options

              Then Begin

                Q.SQL.Add('Desc');

              End

              Else

              Begin

                Q.SQL.Add('Asc');

              End;

              Q.SQL.Add('Index');

              Q.SQL.Add(IndexName);

              Q.SQL.Add('On');

              Q.SQL.Add(DestTableName);

              Q.SQL.Add('(');

              Q.SQL.Add(IndexFields2);

              Q.SQL.Add(')');

              Try

                Q.ExecSql;

                D.IndexDefs.Update;

                D.AddIndex(IndexName,IndexFields,

                S.IndexDefs.Items[j].Options);

                D.IndexDefs.Update;

              Except

                On E : EDBEngineError Do

                Begin

                  If E.Message = 'Invalid array of index

                                  descriptors.'

                Then Begin

                    Try

                      D.IndexDefs.Update;

                      D.DeleteIndex(IndexName);

                      D.IndexDefs.Update;

                    Except

                    End;

                  End

                  Else

                  Begin

                    Try

                      D.IndexDefs.Update;

                      IDXO := D.IndexDefs.Items[j].Options;

                    Except

                    End;

                  End;

                End;

              End;

            End;

            //i:= IMax;

          Finally

            Q.Free;

          End;

        End;

      End;

      S.Active       := False;

      Result := True;

    Finally

      S.Free;

      D.Free;

    End;

  Except

    On E : Exception Do

    Begin

      ShowMessage('DBCreateTableBorrowStr Error: '+E.Message);

      Result := False;

    End;

  End;

End;

Tablo silme

Herhangi bir veri tabanından tablo silmek gerektiğinde, aşağıdaki fonksiyon kullanılabilir.

Function DBDropTable(const DatabaseName, TableName : string):Boolean;

var Query : TQuery;

begin

  Result := False;

  If Not IsTable(DatabaseName, TableName) Then

  Begin

    Exit;

  End;

  Query := TQuery.Create(nil);

  try

    Query.DatabaseName := DatabaseName;

    Query.SQL.Clear;

    Query.SQL.Add('Drop Table ');

    If (Pos('.DB', UpperCase(TableName)) > 0) Or

       (Pos('.DBF',UpperCase(TableName)) > 0) Then

    Begin

      Query.Sql.Add('"'+TableName+'"');

    End

    Else

    Begin

      Query.Sql.Add(TableName);

    End;

    Result := True;

    Try

      Query.ExecSQL;

    Except

      Result := False;

    End;

  finally

    Query.Free;

  end;

end;

 

Alan adının bulunması

Sıra numarası verilen bir tablo alanının alan adı bu fonksiyonla alınabilir.

Function DBFieldNameByNo(

  DatabaseName  : String;

  TableName     : String;

  FieldNo       : Integer): String;

Var

  Table      : TTable;

Begin

  Result := '';

  If Not IsTable(DatabaseName, TableName) Then Exit;

  If FieldNo < 0 Then Exit;

  If FieldNo >= DBNFields(DatabaseName, TableName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      Result := Table.FieldDefs[FieldNo].Name;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Ortak alan isimleri

Bu fonksiyonda, her iki tabloda da mevcut olan alan isimleri, aralarına konan virgüllerle ayrılmış olarak dönerler.

Function DBFieldNamesCommonToString(

  DatabaseName1 : String;

  TableName1    : String;

  DatabaseName2 : String;

  TableName2    : String): String;

Var

  List1 : TStringList;

  List2 : TStringList;

  i     : Integer;

  Suffix: String;

Begin

  Result := '';

  List1  := TStringList.Create();

  List2  := TStringList.Create();

  Try

    DBFieldNamesToTStrings(

      DatabaseName1,

      TableName1,

      List1);

    For i := 0 To List1.Count - 1 Do

    Begin

      List1[i] := UpperCase(List1[i]);

    End;

    DBFieldNamesToTStrings(

      DatabaseName2,

      TableName2,

      List2);

    For i := 0 To List2.Count - 1 Do

    Begin

      List2[i] := UpperCase(List2[i]);

    End;

    For i := 0 To List1.Count - 1 Do

    Begin

      If Result = '' Then

      Begin

        Suffix := '';

      End

      Else

      Begin

        Suffix := ', ';

      End;

      If List2.IndexOf(List1[i]) <> -1 Then

      Begin

        Result := Result + Suffix + List1[i];

      End;

    End;

  Finally

    List1.Free;

    List2.Free;

  End;

End;

Tablodaki alan isimleri

Bu fonksiyon, tablodaki alanlara ait isimleri, bir Tstrings nesnesi içerisine doldurur.

Function DBFieldNamesToTStrings(

  DatabaseName : String;

  TableName    : String;

  Strings      : TStrings): Boolean;

Var

  Table      : TTable;

  FieldNo    : Integer;

Begin

  Result := False;

  If Not IsTable(DatabaseName, TableName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      Strings.Clear;

      For FieldNo := 0 To Table.FieldDefs.Count -1 Do

      Begin

        Strings.Add(Table.FieldDefs[FieldNo].Name);

      End;

      Result := True;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Alan numarası

Bu fonksiyon, adı bilinen bir alanın, tablo içerisindeki sırasını bulur.

Function DBFieldNo(DatabaseName, TableName, FieldName: String): Integer;

Var

  Table      : TTable;

  FieldIndex : Integer;

  FieldNumber: Integer;

Begin

  Result := -1;

  If Not IsTable(DatabaseName, TableName) Then Exit;

  If Not IsField(DatabaseName, TableName, FieldName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      FieldIndex         :=

        Table.FieldDefs.IndexOf(FieldName);

      FieldNumber        :=

        Table.FieldDefs[FieldIndex].FieldNo;

      Result := FieldNumber;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Alan uzunluğu

Tablo içerisindeki bir alanın, uzunluğu, bu fonksiyon ile bulunur.

Function DBFieldSize(DatabaseName, TableName, FieldName: String): Integer;

Var

  Table      : TTable;

  FieldIndex : Integer;

  FieldSize  : Integer;

Begin

  Result := 0;

  If Not IsTable(DatabaseName, TableName) Then Exit;

  If Not IsField(DatabaseName, TableName, FieldName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      FieldIndex         :=

        Table.FieldDefs.IndexOf(FieldName);

      FieldSize          :=

        Table.FieldDefs[FieldIndex].Size;

      Result := FieldSize;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Alan tipleri

Adı bilinen bir alanın tipini bulmak için aşağıdaki fonksiyon kullanılabilir.

Function TypeField(DatabaseName, TableName, FieldName: String): String;

Var

  Table      : TTable;

  FieldIndex : Integer;

  FieldType  : TFieldType;

Begin

  Result := '';

  If Not IsTable(DatabaseName, TableName) Then Exit;

  If Not IsField(DatabaseName, TableName, FieldName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      FieldIndex         :=

        Table.FieldDefs.IndexOf(FieldName);

      FieldType          :=

        Table.FieldDefs[FieldIndex].DataType;

 

If FieldType=ftUnknown  Then Result := 'Unknown';

      If FieldType=ftString   Then Result := 'String';

      If FieldType=ftSmallInt Then Result := 'SmallInt';

      If FieldType=ftInteger  Then Result := 'Integer';

      If FieldType=ftWord     Then Result := 'Word';

      If FieldType=ftBoolean  Then Result := 'Boolean';

      If FieldType=ftFloat    Then Result := 'Float';

      If FieldType=ftCurrency Then Result := 'Currency';

      If FieldType=ftBCD      Then Result := 'BCD';

      If FieldType=ftDate     Then Result := 'Date';

      If FieldType=ftTime     Then Result := 'Time';

      If FieldType=ftDateTime Then Result := 'DateTime';

      If FieldType=ftBytes    Then Result := 'Bytes';

      If FieldType=ftVarBytes Then Result := 'VarBytes';

      If FieldType=ftBlob     Then Result := 'Blob';

      If FieldType=ftMemo     Then Result := 'Memo';

      If FieldType=ftGraphic  Then Result := 'Graphic';

{$IFDEF WIN32}

      If FieldType=ftAutoInc      Then Result := 'AutoInc';

      If FieldType=ftFmtMemo      Then Result := 'FmtMemo';

      If FieldType=ftParadoxOle   Then Result := 'ParadoxOle';

      If FieldType=ftDBaseOle      Then Result := 'DBaseOle';

      If FieldType=ftTypedBinary  Then Result := 'TypedBinary';

{$ENDIF}

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Yukarıdaki fonksiyon ile aynı işleve sahip bir fonksiyondur. Fakat fonksiyona alan adı değil, sıra numarası verilir.

Function DBFieldTypeByNo(DatabaseName, TableName: String; FieldNo: Integer): String;

Var

  Table      : TTable;

  FieldIndex : Integer;

  FieldType  : TFieldType;

Begin

  Result := '';

  If Not IsTable(DatabaseName, TableName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      FieldIndex         := FieldNo;

      Try

        FieldType          :=

          Table.FieldDefs[FieldIndex].DataType;

      Except

        FieldType        := ftUnknown;

      End;

      {TFieldType Possible values are

      ftUnknown, ftString, ftSmallint,

      ftInteger, ftWord, ftBoolean,

      ftFloat, ftCurrency, ftBCD, ftDate,

      ftTime, ftDateTime, ftBytes, ftVarBytes,

      ftBlob, ftMemo or ftGraphic}

      If FieldType=ftUnknown  Then Result := 'Unknown';

      If FieldType=ftString   Then Result := 'String';

      If FieldType=ftSmallInt Then Result := 'SmallInt';

      If FieldType=ftInteger  Then Result := 'Integer';

      If FieldType=ftWord     Then Result := 'Word';

      If FieldType=ftBoolean  Then Result := 'Boolean';

      If FieldType=ftFloat    Then Result := 'Float';

      If FieldType=ftCurrency Then Result := 'Currency';

      If FieldType=ftBCD      Then Result := 'BCD';

      If FieldType=ftDate     Then Result := 'Date';

      If FieldType=ftTime     Then Result := 'Time';

      If FieldType=ftDateTime Then Result := 'DateTime';

      If FieldType=ftBytes    Then Result := 'Bytes';

      If FieldType=ftVarBytes Then Result := 'VarBytes';

      If FieldType=ftBlob     Then Result := 'Blob';

      If FieldType=ftMemo     Then Result := 'Memo';

      If FieldType=ftGraphic  Then Result := 'Graphic';

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Tablonun anahtar alanları

Bir tabloda, anahtar olarak kullanılan alanlar, Tstrings nesnesine doldurulur.

Function DBKeyFieldNamesToTStrings(

  DatabaseName : String;

  TableName    : String;

  Strings      : TStrings): Boolean;

Var

  Table      : TTable;

  FieldNo    : Integer;

Begin

  Result := False;

  If Not IsTable(DatabaseName, TableName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.Active       := False;

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      Strings.Clear;

      For FieldNo := 0 To Table.FieldDefs.Count -1 Do

      Begin

        If IsFieldKeyed(

             DatabaseName,

             TableName,

             Table.FieldDefs[FieldNo].Name) Then

        Begin

          Strings.Add(Table.FieldDefs[FieldNo].Name);

        End;

      End;

      Result := True;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

LookUp yöntemiyle değer seçme diyaloğu

Kullanıcıya bir LookUp diyaloğu gösterip, seçtiği değeri döndüren bir fonksiyondur. Eğer kullanıcı "Cancel" butonuna basarsa, boş bir karakter dizisi döner.

Function DialogLookupDetail(

  Const DialogCaption   : string;

  Const InputPrompt     : string;

  Const DefaultValue    : string;

  Const Values          : TStringList;

  Const ButtonSpacing   : Integer;

  Const SpacerHeight    : Integer;

  Const TopBevelWidth   : Integer;

  Const PromptHeight    : Integer;

  Const FormHeight      : Integer;

  Const FormWidth       : Integer;

  Const Hint_OK         : string;

  Const Hint_Cancel     : string;

  Const Hint_ListBox    : string;

  Const ListSorted      : Boolean;

  Const AllowDuplicates : Boolean

  ): string;

Var

  Form         : TForm;

  Base_Panel   : TPanel;

  Base_Buttons : TPanel;

  Spacer       : TPanel;

  Base_Top     : TPanel;

  ButtonSlider : TPanel;

  ButtonSpacer : TPanel;

  Prompt       : TPanel;

  ListBox      : TListBox;

  ButtonCancelB: TPanel;

  ButtonOKB    : TPanel;

  Button_Cancel: TButton;

  Button_OK    : TButton;

  DefItemIndex : Integer;

  TempValues   : TStringList;

Begin

  Result     := DefaultValue;

  Form       := TForm.Create(Application);

  TempValues := TStringList.Create();

  Try

    TempValues.Sorted := ListSorted;

    TempValues.Clear;

    If AllowDuplicates Then

    Begin

      TempValues.Duplicates := dupAccept;

    End

    Else

    Begin

      TempValues.Duplicates := dupIgnore;

    End;

    If Values <> nil Then

    Begin

      TempValues.Assign(Values);

    End;

    With Form Do

    Begin

      Try

        Canvas.Font  := Font;

        BorderStyle  := bsSizeable;

        Caption      := DialogCaption;

        Height       := FormHeight;

        Width        := FormWidth;

        ShowHint     := True;

        Position     := poScreenCenter;

        BorderIcons  := [biMaximize];

        Base_Panel   := TPanel.Create(Form);

        With Base_Panel Do

        Begin

          Parent      := Form;

          Align       := alClient;

          Caption     := ' ';

          BorderWidth := 10;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

        End;

        Base_Buttons  := TPanel.Create(Form);

        With Base_Buttons Do

        Begin

          Parent      := Base_Panel;

          Align       := alBottom;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

          Height      := 27;

        End;

        ButtonSlider  := TPanel.Create(Form);

        With ButtonSlider Do

        Begin

          Parent      := Base_Buttons;

          Align       := alClient;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

        End;

        ButtonCancelB  := TPanel.Create(Form);

        With ButtonCancelB Do

        Begin

          Parent      := ButtonSlider;

          Align       := alRight;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

          Width       := 75+ButtonSpacing;

        End;

 

        ButtonSpacer  := TPanel.Create(Form);

        With ButtonSpacer Do

        Begin

          Parent      := ButtonCancelB;

          Align       := alLeft;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

          Width       := ButtonSpacing;

        End;

 

        ButtonOKB  := TPanel.Create(Form);

        With ButtonOKB Do

        Begin

          Parent      := ButtonSlider;

          Align       := alRight;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

          Width       := 75;

        End;

 

        Spacer        := TPanel.Create(Form);

        With Spacer Do

        Begin

          Parent      := Base_Panel;

          Align       := alBottom;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

          Height      := SpacerHeight;

        End;

        Base_Top      := TPanel.Create(Form);

        With Base_Top Do

        Begin

          Parent      := Base_Panel;

          Align       := alClient;

          Caption     := ' ';

          BorderWidth := 10;

          BorderStyle := bsNone;

          BevelOuter  := bvRaised;

          BevelInner  := bvNone;

          BevelWidth  := TopBevelWidth;

        End;

        Prompt        := TPanel.Create(Form);

        With Prompt Do

        Begin

          Parent   := Base_Top;

          Align       := alTop;

          Caption     := ' ';

          BorderWidth := 0;

          BorderStyle := bsNone;

          BevelOuter  := bvNone;

          BevelInner  := bvNone;

          Caption     := InputPrompt;

          Height      := PromptHeight;

          Alignment   := taCenter;

        End;

 

        Button_Cancel := TButton.Create(Form);

        With Button_Cancel Do

        Begin

          Parent      := ButtonCancelB;

          Caption     := 'Cancel';

          ModalResult := mrCancel;

          Default     := True;

          Align       := alClient;

          Hint        := Hint_Cancel;

        End;

 

        Button_OK := TButton.Create(Form);

        With Button_OK Do

        Begin

          Parent      := ButtonOKB;

          Caption     := 'OK';

          ModalResult := mrOK;

          Default     := False;

          Align       := alClient;

          Hint        := Hint_OK;

        End;

        ListBox := TListBox.Create(Form);

        With ListBox Do

        Begin

          Parent      := Base_Top;

          Align       := alClient;

          Hint        := Hint_ListBox;

          Sorted      := ListSorted;

 

          Focused;

          If TempValues <> nil Then

          Begin

            Items.Assign(TempValues);

            DefItemIndex := Items.IndexOf(DefaultValue);

            If DefItemIndex <> -1 Then

            Begin

              ItemIndex := DefItemIndex;

              Selected[DefItemIndex];

            End

            Else

            Begin

              Result    := '';

              ItemIndex := 0;

              Selected[0];

            End;

            IntegralHeight        := True;

            Button_OK.Default     := True;

            Button_Cancel.Default := False;

          End

          Else

          Begin

            Result := '';

          End;

        End;

        SetFocusedControl(ListBox);

        If ShowModal = mrOk Then

        Begin

          If ListBox.ItemIndex<>-1 Then

            Result := ListBox.Items[ListBox.ItemIndex];

        End;

      Finally

        Form.Free;

      End;

    End;

  Finally

    TempValues.Free;

  End;

End;

Bir Paradox tablosunun yeniden anahtarlanması

Mevcut bir Paradox tablosu, aşağıdaki fonksiyon kullanılarak yeniden anahtarlanabilir.

Function DBParadoxCreateNKeys(

  DatabaseName : String;

  TableName    : String;

  NKeys        : Integer): Boolean;

Var

  T          : TTable;

  T2         : TTable;

  i          : Integer;

  TempDBName : String;

  TempTblNam : String;

  TempTblStub: String;

  KeysString : String;

Begin

  Result := False;

  {Select a temporary table name}

  TempTblStub := 'qrz';

  TempDBName  := DatabaseName;

  TempTblNam  := '';

  For i := 1 To 100 Do

  Begin

    TempTblNam := TempTblStub+StringPad(IntToStr(i),'0',3,False)+'.Db';

    If Not IsTable(TempDBName,TempTblNam) Then

    Begin

      Break;

    End

    Else

    Begin

      If i = 100 Then

      Begin

        DBDeleteTable(

          TempDBName,

          TempTblNam);

      End;

    End;

  End;

  T  := TTable.Create(nil);

  T2 := TTable.Create(nil);

  Try

    Try

      T.Active       := False;

      T.DatabaseName := DatabaseName;

      T.TableName    := TableName;

      T.Active       := True;

 

      T2.Active       := False;

      T2.DatabaseName := TempDBName;

      T2.TableName    := TempTblNam;

      T2.FieldDefs.Assign(T.FieldDefs);

      T2.IndexDefs.Clear;

      KeysString := '';

 

      For i := 0 To NKeys - 1 Do

      Begin

        If i > 0 Then

        Begin

          KeysString := KeysString + ';';

        End;

        KeysString :=

          KeysString +

          DBFieldNameByNo(

            DatabaseName,

            TableName,

            i);

      End;

      T2.IndexDefs.Add('',KeysString,[ixPrimary]);

      T2.CreateTable;

      T2.Active := False;

      T.Active        := False;

      AddTables(

        DatabaseName,

        TableName,

        TempDBName,

        TempTblNam);

      DBDeleteTable(DatabaseName,TableName);

      T2.Active      := True;

      T.DatabaseName := DatabaseName;

      T.TableName    := TableName;

      T.FieldDefs.Assign(T2.FieldDefs);

      T.IndexDefs.Clear;

      T.IndexDefs.Add('',KeysString,[ixPrimary]);

      T.CreateTable;

      T2.Active      := False;

      T.Active       := False;

      AddTables(

        TempDBName,

        TempTblNam,

        DatabaseName,

        TableName);

      DBDeleteTable(

        TempDBName,

        TempTblNam);

      Result := True;

    Except

      ShowMessage('Error in Function DBParadoxCreateNKeys');

    End;

  Finally

    T.Free;

    T2.Free;

  End;

End;

Tablo adının değiştirilmesi

Belirtilen tablonun adını değiştirir. Bu fonksiyon kullanılırken, veri tabanındaki referans sınırlamalarına dikkat edilmelidir. SQL tabanlı veri tabanlarında, eğer tabloya referans eden başka veri tabanı nesneleri varsa, tablonun silinmesine izin verilmeyecektir.

Function DBReNameTable(

  DatabaseName,

  TableNameOld,

  TableNameNew: String): Boolean;

Begin

  Result := True;

  Try

    If Not IsTable(DatabaseName, TableNameOld) Then

    Begin

      Result := False;

      Exit;

    End;

 

    {First Copy The Source Table To The New Table}

    If Not DBCopyTable(

             DatabaseName,

             TableNameOld,

             DatabaseName,

             TableNameNew) Then

    Begin

      Result := False;

      Exit;

    End;

 

    {Now Drop The Source Table}

    If Not DBDropTable(DatabaseName, TableNameOld) Then

    Begin

      Result := False;

      Exit;

    End;

  Except

    Result := False;

  End;

End;

 

{!~ Applies BatchMode Types As Appropriate To

Source and Destination Tables}

Function DBRecordMove(

           SourceDatabaseName,

           SourceTable,

           DestDatabaseName,

           DestTable: String;

           BMode: TBatchMode): Boolean;

var S : TTable;

    D : TTable;

    B : TBatchMove;

begin

  S := TTable.Create(nil);

  D := TTable.Create(nil);

  B := TBatchMove.Create(nil);

  try

    {Create The Source Table}

    S.Active       := False;

    S.DatabaseName := SourceDatabaseName;

    S.ReadOnly     := False;

    S.TableName    := SourceTable;

    S.Active := true;

 

    {Create The Destination Table}

    D.Active       := False;

    D.DatabaseName := DestDatabaseName;

    D.TableName    := DestTable;

    D.ReadOnly     := False;

 

    {Make the table copy}

    B.AbortOnKeyViol := False;

    B.AbortOnProblem := False;

    B.Destination    := D;

    B.Source         := S;

    B.Mode           := BMode;

    Try

      B.Execute;

    Except

    End;

 

    Result := True;

  finally

    S.Free;

    D.Free;

    B.Free;

  end;

End;

 

Tablo yapıları aynı mı?

Bu fonksiyonda, iki tablonun yapısı karşılaştırılır ve aynı ise TRUE değeri döndürülür.

Function DBSchemaSame(const

           DatabaseName1,

           Table1,

           DatabaseName2,

           Table2: string): Boolean;

Begin

  Result := IsStructureSame(DatabaseName1,Table1,DatabaseName2,Table2);

End;

 

{!~ Creates a new TSession object.}

{$IFDEF WIN32}

Function DBSessionCreateNew: TSession;

{$ENDIF WIN32}

{$IFDEF WIN32}

Var

  List : TStringList;

  Seed : String;

  i    : Integer;

  Ses  : String;

Begin

  Seed := 'Session';

  Ses  := Seed+'0';

  List := TStringList.Create;

  Try

    Sessions.GetSessionNames(List);

    For i := 0 To 1000 Do

    Begin

      Ses := Seed + IntToStr(i);

      If List.IndexOf(Ses) = -1 Then Break;

    End;

    Result := Sessions.OpenSession(Ses);

  Finally

    List.Free;

  End;

End;

{$ENDIF}

Bir tablo alanındaki değerlerin sağ tarafındaki boşlukların temizlenmesi

Belirtilen alandaki değerlerin, sağ yanındaki boşlukları temizleyen bir fonksiyondur.

Function DBTrimBlanksRight(

  DatabaseName : String;

  TableName    : String;

  FieldName    : String): Boolean;

Var

  Q : TQuery;

  S : String;

Begin

{  Result := False;}{zzz}

  Q := TQuery.Create(nil);

  Try

    Q.Active       := False;

    Q.DatabaseName := DatabaseName;

    Q.RequestLive  := True;

    Q.Sql.Clear;

    Q.Sql.Add('Select');

    Q.Sql.Add('*');

    Q.Sql.Add('From');

    Q.Sql.Add('"'+TableName+'"');

    Q.Active := True;

    Q.First;

    While Not Q.EOF Do

    Begin

      S := Q.FieldByName(FieldName).AsString;

      S := Trim(S);

      S := Trim(S);

      Q.Edit;

      Q.FieldByName(FieldName).AsString := S;

      Q.Post;

      Q.Next;

    End;

    Result := True;

  Finally

    Q.Free;

  End;

End;

 

Aranan alan, tabloda var mı?

Alan, belirtilen tabloda varsa fonksiyondan TRUE değeri döner.

Function IsField(DatabaseName, TableName, FieldName: String): Boolean;

Var

  Query   : TQuery;

  T       : TTable;

  i       : Integer;

  UpperFN : String;

  TestFN  : String;

Begin

  Result  := False;

  UpperFN := UpperCase(FieldName);

  If Not IsTable(DatabaseName, TableName) Then Exit;

  Query := TQuery.Create(nil);

  T     := TTable.Create(nil);

  Try

    Try

      Query.DatabaseName := DatabaseName;

      Query.Sql.Clear;

      Query.Sql.Add('Select ');

      Query.Sql.Add('a.'+FieldName+' XYZ');

      Query.Sql.Add('From');

      If (Pos('.DB', UpperCase(TableName)) > 0) Or

         (Pos('.DBF',UpperCase(TableName)) > 0) Then

      Begin

        Query.Sql.Add('"'+TableName+'" a');

      End

      Else

      Begin

        Query.Sql.Add(TableName+' a');

      End;

      Query.Active := True;

      Result := True;

    Except

      Try

        T.Active       := False;

        T.DatabaseName := DatabaseName;

        T.TableName    := TableName;

        T.Active       := True;

        If T.FieldDefs.IndexOf(FieldName) > -1 Then

        Begin

          Result := True;

        End

        Else

        Begin

          For i := 0 To T.FieldDefs.Count -1 Do

          Begin

            TestFN := UpperCase(T.FieldDefs[i].Name);

            If TestFN = UpperFN Then

            Begin

              Result := True;

              Break;

            End;

          End;

        End;

        T.Active := False;

      Except

      End;

    End;

  Finally

    Query.Free;

    T.Free;

  End;

End;

 

Alan anahtar mı?

Belirtilen alan, o tabloda mevcutsa ve anahtar olarak kullanılıyorsa, bu fonksiyondan TRUE değeri döner.

Function IsFieldKeyed(DatabaseName, TableName, FieldName: String): Boolean;

Var

  Table      : TTable;

  FieldIndex : Integer;

  i          : Integer;

  KeyCount   : Integer;

  LocalTable : Boolean;

  ParadoxTbl : Boolean;

  DBaseTable : Boolean;

  TempString : String;

Begin

  Result := False;

  If Not IsTable(DatabaseName, TableName) Then Exit;

  If Not IsField(DatabaseName, TableName, FieldName) Then Exit;

  TempString := UpperCase(Copy(TableName,Length(TableName)-2,3));

  ParadoxTbl := (Pos('.DB',TempString) > 0);

  TempString := UpperCase(Copy(TableName,Length(TableName)-3,4));

  DBaseTable := (Pos('.DBF',TempString) > 0);

  LocalTable := (ParadoxTbl Or DBaseTable);

  Table := TTable.Create(nil);

  Try

    Try

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active := True;

      KeyCount     := Table.IndexFieldCount;

      FieldIndex   := Table.FieldDefs.IndexOf(FieldName);

 

      If LocalTable Then

      Begin

        If ParadoxTbl Then

        Begin

          Result := (FieldIndex < KeyCount);

        End

        Else

        Begin

          Table.IndexDefs.UpDate;

          For i := 0 To Table.IndexDefs.Count-1 Do

          Begin

            {Need to check if FieldName is in the Expression listing}

            If Pos(UpperCase(FieldName),UpperCase(Table.IndexDefs[i].Expression))>0 Then

            Begin

              Result := True;

              Break;

            End;

            {Need to check if FieldName is in the Fields listing}

            If Pos(UpperCase(FieldName),UpperCase(Table.IndexDefs[i].Fields))>0 Then

            Begin

              Result := True;

              Break;

            End;

          End;

        End;

      End

      Else

      Begin

        If Table.

             FieldDefs[FieldIndex].

             Required

        Then

        Begin

          Result := True;

        End;

      End;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

 

Tablo mevcut mu?

Bu fonksiyon, belirtilen tablo varsa TRUE değerini döndürür.

Function IsTable(DatabaseName, TableName: String): Boolean;

Var

  Query: TQuery;

Begin

  Result := False;

  Query := TQuery.Create(nil);

  Try

    Try

      Query.DatabaseName := DatabaseName;

      Query.Sql.Clear;

      Query.Sql.Add('Select *');

      Query.Sql.Add('From');

      If (Pos('.DB', UpperCase(TableName)) > 0) Or

         (Pos('.DBF',UpperCase(TableName)) > 0) Then

      Begin

        Query.Sql.Add('"'+TableName+'"');

      End

      Else

      Begin

        Query.Sql.Add(TableName);

      End;

      Query.Active := True;

      Result := True;

    Except

    End;

  Finally

    Query.Free;

  End;

End;

Tablo mevcut ve esas anahtarı var mı

Bu fonksiyon, belirtilen tablo, mevcutsa ve öncelikli anahtara sahipsei TRUE değerini döndürür.

Function IsTableKeyed(DatabaseName, TableName: String): Boolean;

Var

  Table      : TTable;

  i          : Integer;

  IsKeyed    : Boolean;

Begin

  Result  := False;

  IsKeyed := False;

  If Not IsTable(DatabaseName, TableName) Then Exit;

  Table := TTable.Create(nil);

  Try

    Try

      Table.DatabaseName := DatabaseName;

      Table.TableName    := TableName;

      Table.Active       := True;

      For i := 0 To Table.FieldDefs.Count-1 Do

      Begin

         If Table.FieldDefs[i].Required Then

         Begin

           IsKeyed := True;

           Break;

         End;

      End;

 

      If IsKeyed Then

      Begin

        Result := True;

      End

      Else

      Begin

        Result := False;

        {Need to examine indexdefs}

        If (Pos('.DB', UpperCase(TableName)) > 0) Then

        Begin

          {Table is either Paradox or DBase}

          Table.IndexDefs.UpDate;

          If (Pos('.DBF', UpperCase(TableName)) > 0) Then

          Begin

            {Table is a DBase Table}

            If Table.IndexDefs.Count > 0 Then

            Begin

              Result := True;

            End;

          End

          Else

          Begin

            {Table is a Paradox Table}

            For i := 0 To Table.IndexDefs.Count-1 Do

            Begin

              If ixPrimary in Table.IndexDefs[i].Options Then

              Begin

                Result := True;

                Break;

              End;

            End;

          End;

        End

        Else

        Begin

          Result := False;

        End;

      End;

    Except

    End;

  Finally

    Table.Free;

  End;

End;

Mevcut bir tablo ile aynı yapıda başka bir tablo yaratmak

Bir veri tabanı içerisinde var olan tablo ile tıpatıp aynı bir başka tablo, herhangi bir veri tabanı içerisinde yaratılabilir. "Datali" değişkenine bağlı olarak, verilerde yeni tabloya aktarılabilir.

 

implementation

uses DB, DBTables ;

 

{$R *.DFM}

 

function tabloaktar(SourceDB,

                    SourceTable,

                    DestDb,

                    DestTable:string;

                    datali:boolean):boolean;

var

  tSource, TDest: TTable;

  i:integer;

begin

  TSource := TTable.create(nil);

  with TSource do begin

    DatabaseName := sourcedb;

    TableName := Sourcetable;

    open;

  end;

 

  TDest := TTable.create(nil);

  with TDest do begin

    DatabaseName := DestDb;

    TableName := DestTable;

    FieldDefs.Assign(TSource.FieldDefs);

    IndexDefs.Assign(TSource.IndexDefs);

    CreateTable;

  end;

 

  tdest.open;

  tsource.first;

 

  if datali then

  begin

  while not tsource.eof do

  begin

    tdest.append;

    for i:=0 to tsource.fieldcount-1 do begin

    tdest.fields[i].assign(tsource.fields[i]);

    showmessage(tsource.fields[i].asstring)

    end;

    tsource.Next;

  end;

  end;

 

  TSource.close;

  tdest.close;

  showmessage('aktarma bitti')

end;

 

Tablo filtreleme

Bir tablonun filterelenmesi, basit olarak filter özelliğine, seçim kriterinin yazılıp, filtered özelliğinin TRUE yapılması ile yapılır. Tablo seçim kriterine uyan kayıtları gösterir, diğerlerini göstermez.

Filtreleme işleminin, dinamik bir sorgu niteliğinde, form üzerindeki alanlar kullanılarak yapılması, daha kullanışlı olabilir. Örneğin, Oracle formlarında, sorgu moduna girildiğinde, veri alanlarının temizlenerek, sorgu parametrelerinin yazılmasına imkan vermekte ve sorgu uygula komutu ile birlikte, belirtilen kriterlere uygun sonuç kümesi getirilmektedir.

Benzer bir yapı, Delphi formlarında da kurulabilir. Bunun için takip edilecek adımlar şunlardır.

"     Form üzerine,"Sorgu moduna geçiş" için kullanılacak bir buton yerleştirin.

"     Butona basıldığında çalışması için, OnClick olay yordamı içerisinde verilecek

<SorgulanacakTabloAdı>.Insert

"     komutu ile, veri alanlarının temizlenmesini sağlayın

"     Form üzerine "Sorgu uygulama" için kullanılacak başka bir buton yerleştirip, OnClick olay yordamına,

< SorgulanacakTabloAdı >.cancel

"     komutunu yazarak, arama kriteri olarak girilen değerlerin, tabloya kaydedilmemesini sağlayın. Fakat bu işlemden önce, sorgulama kriteri olarak kullanılacak alanlardaki sorgu kriterlerini değişkenlere aktararak, saklayın.

"     Seçilen alanların tümü, sorgu işleminde kullanılmayabilir. Bu nedenle boş bırakılan alanların, sorgulama esnasında problem yaratmaması için, aşağıdaki fonksiyonları kullanın. Eğer, sorgulama alanı boş bırakılmışsa, bu fonksiyonlar, o alana ait her türlü değerin kabul edilmesini sağlayacaktır.

function nvlforstr(birinci:string;ikinci:string):string;

begin

     if birinci=''

        then result:=ikinci

        else result:=birinci;

end;

 

function nvlforscl(birinci:string;ikinci:string):string;

begin

     if birinci=' .   .   .   '

        then result:=ikinci

        else result:=birinci;

end;

 

function nvlforTEL(birinci:string;ikinci:string):string;

begin

     if birinci='(    )         '

        then result:=ikinci

        else result:=birinci;

end;

 

function nvltoyil(s1 : string) : string;

begin

  if length(s1)=0 then result:='*' else result:=s1;

end;

 

"     Filtre uygulanacak tablonun OnFilter olay yordamı parametreleri arasında bulunan ACCEPT, TRUE değerini alırsa, tablodaki o kayıt, filtreleme kriterine uygun demektir. Aksi taktirde, kayıt gösterilmeyecektir. Bu yordam aşağıdaki gibi kullanılır. Bu yordamdaki kod, tablonun her satırı için çalışarak, gereken mantıksal karşılaştırmayı yapacak ve ACCEPT parametresinin değerine göre kayıt kabul veya red edilecektir.

procedure Tf_data_ana.TableFilterRecord(DataSet: TDataSet;

                                                     var Accept: Boolean);

 

begin

 

Accept := (

(Table.FieldByName('firm_adi').AsString,

                                         nvltoyil(kurulus_adi)) and

(Table.FieldByName('firm_sah').AsString,

                                           NVLtoyil(sahip_adi)) and

(Table.FieldByName('VER_SCL_NO').AsString = NVLForscl(ver_sic,Table.FieldByName('VER_SCL_NO').AsString)) and

(Table.FieldByName('VER_DA').AsString,

nvltoyil(vrg_d)) and

(Table.FieldByName('TEL').AsString= NVLForTEL(telefon,Table.FieldByName('TEL').AsString))

);

end;

 

Şifreli paradox tablosuna otomatik bağlantı

Paradox tablolarına da şifre konabilir. Bu durumda, kullanıcı bağlanırken, şifresini belirtmek zorundadır. Şifrenin uygulama tarafından otomatik olarak girilmesi için tablo açılmadan önce

Session.addpassword('<şifre>');

Komutu verilmelidir.

SubString fonksiyonunun SQL cümlesinde kullanılması

DBase ve Paradox veri tabanlarında sorgulama yapılırken kullanılabilecek bir fonksiyon olan SubString fonksiyonu, neredeyse hiç dökümante edilmemiştir. Bu fonksiyon, hem sorguda, hem sıralamada hem de karşılaştırma kısmında kullanılabilir. Notasyonu şu şekildedir.

 

Substring(<alan adı> from <Başlangıç> to <Bitiş>)

Örnek

Select substring(adi from 2 to 5) from customer

Where substring(adi from 4 to 5)='AL'

Order by substring(adi from 2 to 3)

DbControlGrid kaydırma çubukları

DbControlGrid bileşeninde, normalda sadece dikey kaydırma çubuğu vardır. Yatay kaydırma çubuğu görünmez. Eğer yatay kaydırma çubuğunun da görünmesi ve kullanılması istenirse yapılması gereken, ScrollBars özelliğinin yayınlanması ve seçime göre araç çubuklarının hazırlanmasıdır.

unit EDBcgrd;

 

interface

 

uses

  Windows,

  Messages,

  SysUtils,

  Classes,

  Graphics,

  Controls,

  Forms,

  Dialogs,

  DBCGrids,

  Unit1 in '......Program FilesBorlandDelphi 3Unit1.pas' {Form1};

type scrollbartype=(sbBoth,SbNone,sbVertical,sbHorizontal);

type

  TEDBCtrlGrid = class(TDBCtrlGrid)

  private

    { Private declarations }

    fsbars:scrollbartype;

  protected

    { Protected declarations }

  public

    { Public declarations }

  procedure CreateWnd;override;

  published

    { Published declarations }

    property ScrollBars:scrollbartype read fsbars write fsbars;

  end;

 

procedure Register;

implementation

 

procedure TEDBctrlgrid.CreateWnd;

begin

  inherited CreateWnd;

  case scrollbars of

   sbboth:showscrollbar(handle,sb_both,true);

   sbnone:showscrollbar(handle,sb_both,false);

   sbvertical:begin

                  showscrollbar(handle,sb_vert,true);

                  showscrollbar(handle,sb_horz,false);

              end;

   sbhorizontal:begin

                  showscrollbar(handle,sb_vert,false);

                  showscrollbar(handle,sb_horz,true);

                end;

   end;

 

end;

 

procedure Register;

begin

  RegisterComponents('F1Delphi', [TEDBCtrlGrid]);

end;

 

end.

Tablodan dosyaya aktarma

Bir Ttable bileşeninin bağlı olduğu veri tabanı tablosundaki verilerin, Sabit kolon uzunluğunda veya, kolonlar arasına ayıraçlar koymak suretiyle metin dosyasına saklanması için geliştirilmiş bir Ttable türevi bileşene ait kod aşağıdadır.

unit Exttab;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls,dialogs,

  Db, DBTables,StdCtrls,ComCtrls,WinTypes, WinProcs, ExtCtrls,DBCtrls;

 

const

LANGUAGE='TURKISH';

REGISTERED=FALSE;

 

 

type

 TExtTab= class(Ttable)

  private

    { Private declarations }

    f_message:string;

    f_about:string;

    f_delimited:boolean;

    f_delimeter:string;

    f_filename:string;

  protected

    { Protected declarations }

  public

    { Public declarations }

  published

    procedure SaveToFile;

    property IsDelimited:boolean read f_delimited write f_delimited;

    property Delimeter:string read f_delimeter write f_delimeter;

    property FilePathAndName:string read f_filename write f_filename;

    property About:string read f_about write f_about;

    { Published declarations }

  end;

 

 

implementation

var msgid:integer;

 

 

procedure TExtTab.SaveToFile;

function tamamla(instr:string;x:integer;j:integer):string;

var

l,t:integer;

begin

   if (IsDelimited) and (delimeter='') then delimeter:='@';

 

   if not isdelimited then

   begin

      if length(fields[j].fieldname)>=x then

      x:=length(fields[j].fieldname);

      for l:=1 to x-length(instr) do

      instr:=instr+' ';

      result:=instr+'  ';

   end

   else result:=instr+delimeter;

end;

 

var

 col_count:integer;

 row_count:integer;

 z,i,j:integer;

 row:string;

 f:system.text;

 st,et,ft:ttime;

begin

   if not active then open;

    if FilePathAndName='' then

    begin

       filepathandname:= InputBox('Dikkat', 'Dosya ismini belirtiniz!', 'c:TmpName.txt');

    end;

 

   col_count:=fieldcount;

   row_count:=recordcount;

   rewrite(f,FilePathAndName);

   first;

   disablecontrols;

   st:=time;

   for j:=0 to col_count-1 do

   write(f,tamamla(fields[j].fieldname,fields[j].displaywidth,j));

 

   writeln(f,'');

   for i:=0 to row_count-1 do

    begin

     for j:=0 to col_count-1 do

     begin

      if ord(fields[j].datatype)<14 then

      begin

         row:=tamamla(fields[j].asstring,fields[j].displaywidth,j);

         write(f,row);

      end;

     end;

     next;

     writeln(f,'');

   end;

   et:=time;

   ft:=et-st;

   showmessage('Başlangıç: '+timetostr(st)+'  '+' Bitiş: '+timetostr(et)+''#10#13+

               'Kayıt Sayısı: '+inttostr(fieldcount)+' Kolon X '+inttostr(recordcount)+' Satır.'#10#13+

               'İşlem tamam!');

   enablecontrols;

   closefile(f);

end;

end.

Sorgudan dosyaya aktarma

Tquery bileşeni kullanarak yapılan sorgu neticesinde dönen sonuç kümesinin, metin dosyasına atılması için geliştirilmiş Tquery türevi bir bileşene ait kod örneği aşağıdadır. Bu örnekte, Dene ve al sürümü, bileşen uygulamasına örnek bir yöntem de yer almaktadır.

unit ExtQuery;

 

interface

 

uses

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

  Dialogs,Db, DBTables, WinTypes, WinProcs,  ExtCtrls,DBCtrls;

 

  const

  LANGUAGE='TURKISH';

  REGISTERED=FALSE;

 

type

  TExtQuery = class(TQuery)

  private

    { Private declarations }

    f_message:string;

    f_about:string;

    f_delimited:boolean;

    f_delimeter:string;

    f_filename:string;

  protected

    { Protected declarations }

  public

    { Public declarations }

  published

    procedure SaveToFile;

    property IsDelimited:boolean read f_delimited write f_delimited;

    property Delimeter:string read f_delimeter write f_delimeter;

    property FilePathAndName:string read f_filename write f_filename;

    property About:string read f_about write f_about;

    constructor create(aowner:tcomponent);override;

    destructor destroy;override;

    { Published declarations }

  end;

 

implementation

var

msgid:integer;

 

constructor TExtquery.create(aowner:tcomponent);

begin

   inherited;

   about:='Written by Faruk DEMİREL (fdemirel@kkk.tsk.mil.tr) 01.02.1998 Turkey';

 if (not registered) AND (componentstate <> [csDesigning]) then

{Eğer kayıtlı bir kullanıcı değilse ve uygulama çalışma modunda ise, uyarı ve tanıtım mesajını ver.}

  if language='ENGLISH' then

      begin

          showmessage ('EXTENDED QUERY'+#10#13+

                       'TRIAL'+#10#13+

                       'BY FARUK DEMİREL'+#10#13+

                       'fdemirel@kkk.tsk.mil.tr');

                       msgid:=300;

      end

      else

      begin

         showmessage ('EXTENDED QUERY'+#10#13+

                      'DENE VE AL SÜRÜMÜ'+#10#13+

                      'YAZAN FARUK DEMİREL'+#10#13+

                      'fdemirel@kkk.tsk.mil.tr');

                       msgid:=100;

      end;

end;

 

destructor TExtquery.destroy;

begin

inherited;

end;

 

 

procedure TExtQuery.SaveToFile;

function tamamla(instr:string;x:integer):string;

var

l,t:integer;

begin

    if (IsDelimited) and (delimeter='') then delimeter:='@';

 

    if FilePathAndName='' then

    begin

       showmessage('Invalid path or filename');

       exit;

    end;

 

   if not isdelimited then

   begin

      if length(instr)<x then

      for l:=1 to x-length(instr) do

      instr:=instr+' ';

      result:=instr+' ';

   end

   else result:=instr+delimeter;

end;

 

var

 col_count:integer;

 row_count:integer;

 z,i,j:integer;

 w:array[0..49] of string;

 row:string;

 f:system.text;

begin

   if not active then open;

   col_count:=fieldcount;

   row_count:=recordcount;

 

   rewrite(f,FilePathAndName);

   first;

   for j:=0 to col_count-1 do

   write(f,tamamla(fields[j].fieldname,fields[j].displaywidth));

 

   writeln(f,'');

   for i:=0 to row_count-1 do

    begin

     for j:=0 to col_count-1 do

     begin

      if ord(fields[j].datatype)<14 then

      begin

         row:=tamamla(fields[j].asstring,fields[j].displaywidth);

         write(f,row);

      end;

     end;

     next;

     writeln(f,'');

   end;

   closefile(f);

end;

 

end.

Özel bir DBGrid

Tarih alanlarına veri girişi herzaman problemdir. Bilgisayarların tarih formatları farklı olabileceği gibi, kullanıcıların tarih kullanma alışkanlıklarındaki farklılıklar da, veri tabanına tarih girişi işlemlerinde, hata mesajlarına sebep olur.

Aşağıdaki bileşen, DBGrid bileşeninden türetilmiş olup, Tarih alanına çift tıklandığında, otomatik olarak açılan bir takvimden seçim yapmak suretiyle bilgi girişini sağlamaktadır.

unit ExtDbGrid;

interface

 

uses

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

  Dialogs,Db, DBTables,buttons,  StdCtrls, DBGrids,ComCtrls, WinTypes,

  WinProcs,  ExtCtrls, Menus, Calendar,DBCtrls;

 

const

Tdatefieldtype=9;

type

  TExtDbGrd = class(TDBGrid)

  private

    { Private declarations }

    f_message:string;

    f_about:string;

  protected

    { Protected declarations }

  public

    { Public declarations }

  published

    property About:string read f_about write f_about;

    procedure DblClick;override;

    procedure Takvimyap;

    procedure Takvimkapat;

    procedure mybtnclick(sender:tobject);

    constructor create(aowner:tcomponent);override;

    destructor destroy;override;

    { Published declarations }

  end;

 

implementation

 

{$R *.RES}

var

takvimform:tform;

takvimpanel:tpanel;

takvim:tcalendar;

takvimbtn:array [1..6] of tspeedbutton;

takvimedit:tedit;

msgid:integer;

oneinstance:boolean;

 

constructor TExtDbGrd.create(aowner:tcomponent);

begin

   inherited;

   color:=clyellow;

   font.color:=clblue;

   about:='Written by Faruk DEMİREL (fdemirel@kkk.tsk.mil.tr) 01.02.1998 Turkey';

end;

 

destructor TExtdbgrd.destroy;

begin

     inherited;

end;

procedure TExtDbGrd.dblclick;

begin

     inherited;

     if not oneinstance then

     begin

     if ord(fields[selectedindex].datatype)=11 then

     SHOWMESSAGE('TarihSaat tipindeki alanlarda takvim açılmaz');

     if (ord(fields[selectedindex].datatype)=TdateFieldType) then

     begin

        oneinstance:=true;

        takvimyap;

        takvim.calendardate:=strtodate(fields[selectedindex].asstring);

     end;

     end;

end;

 

procedure TEXTDBGRD.Takvimyap;

var

i:integer;

begin

        takvimform:=tform.create(self);

        takvimform.width:=267;

        takvimform.height:=195;

        takvimform.borderstyle:=bstoolwindow;

        takvimform.formstyle:=fsstayontop;

        takvimform.visible:=false;

        takvimform.BORDERICONS:=[];

 

   {takvim paneli}

 

        takvimpanel:=tpanel.create(self);

        takvimpanel.width:=250;

        takvimpanel.height:=160;

        takvimpanel.parent:=takvimform;

        takvimpanel.left:=5  ;

        takvimpanel.top:=5;

 

   {takvim}

        takvim:=tcalendar.create(takvimpanel);

        takvim.parent:=takvimpanel;

        takvim.left:=10;

        takvim.top:=10;

        takvim.width:=200;

        takvim.color:=color;

        takvim.font.color:=font.color;

   {takvim butonları}

        for i:=1 to 6 do

        begin

          takvimbtn[i]:=tspeedbutton.create(self);

          takvimbtn[i].parent:=takvimpanel;

          takvimbtn[i].left:=215;

          takvimbtn[i].width:=25;

          takvimbtn[i].height:=22;

          takvimbtn[i].top:=10+25*(i-1);

          takvimbtn[i].onclick:=mybtnclick;

          takvimbtn[i].tag:=i;

          takvimbtn[i].showhint:=true;

        end;

 

        takvimbtn[1].GLYPH.Handle := LoadBitmap(HInstance,'PY');

        takvimbtn[1].hint:='Önceki Yıl';

        takvimbtn[2].GLYPH.Handle := LoadBitmap(HInstance,'PM');

        takvimbtn[2].hint:='Önceki Ay';

        takvimbtn[3].GLYPH.Handle := LoadBitmap(HInstance,'NM');

        takvimbtn[3].hint:='Sonraki Ay';

        takvimbtn[4].GLYPH.Handle := LoadBitmap(HInstance,'NY');

        takvimbtn[4].hint:='Sonraki Yıl';

        takvimbtn[5].GLYPH.Handle := LoadBitmap(HInstance,'CHOOSE');

        takvimbtn[5].hint:='Seç';

        takvimbtn[6].GLYPH.Handle := LoadBitmap(HInstance,'QUIT');

        takvimbtn[6].hint:='Çık';

 

      {takvim editi}

        takvimedit:=tedit.create(self);

        takvimedit.parent:=takvimpanel;

        takvimedit.left:=75 ;

        takvimedit.top:=130;

        takvimedit.width:=70;

        takvimedit.text:=datetostr(takvim.calendardate);

        takvimedit.readonly:=true;

        takvimform.formstyle:=fsstayontop;

        takvimform.visible:=true;

        takvimform.show;

end;

 

procedure TExtDbGrd.Takvimkapat;

var

   i:integer;

begin

   for i:=1 to 5 do takvimbtn[i].free;

   takvim.free;

   takvimedit.free;

   takvimpanel.free;

   takvimform.visible:=false;

   takvimform.Free;

   oneinstance:=false;

end;

 

procedure TExtDbGrd.mybtnclick(sender:tobject);

begin

 

  case (sender as tspeedbutton).tag of

  1:{- yıl}begin

           takvim.prevyear;

           takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate);

           end;

  2:{- ay}begin

          takvim.prevmonth;

          takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate);

          end;

  3:{+ yıl}begin

           takvim.nextmonth;

           takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate);

           end;

  4:{+ ay} begin

           takvim.nextyear;

           takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate);

           end;

  5:{kapat}begin

           datasource.dataset.edit;

           text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate);

           fields[selectedindex].value:=text;

           datasource.dataset.post

           end;

  6:{İptal}begin

           takvimkapat;

           end;

  end;

end;

initialization

oneinstance:=false;

end.

DBNavigator butonlarına erişim

unit Unit1;

 

interface

 

uses

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

  StdCtrls, ExtCtrls, DBCtrls, DBNavigator1;

 

 

type

  TForm1 = class(TForm)

    DBNavigator1: TDBNavigator;

    Button1: TButton;

    DBNavigator11: TDBNavigator1;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

DBNavigator11.setbuttonenabled(nbfirst);

end;

 

end.

2.    Ağ işlemleri

Bu bölümde, Delphi uygulamalarında gerekebilecek, ağ uygulamaları ve ağ erişimleri ile ilgili püf noktaları ve kod örnekleri yer almaktadır.

Ağ sürücüleri

Sistemde tanımlı olan ağ sürücülerinin listesini elde etmek için aşağıdaki fonksiyon kullanılabilir.

unit Unit1;

 

interface

 

uses

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

  StdCtrls;

 

type

  TForm1 = class(TForm)

    Button1: TButton;

    ListBox1: TListBox;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

function GetNetworkDriveMappings(

  sl : TStrings ) : integer;

var

  i               : integer;

  sNetPath        : string;

  dwMaxNetPathLen : DWord;

begin

  sl.Clear;

  dwMaxNetPathLen := MAX_PATH;

  SetLength( sNetPath,

    dwMaxNetPathLen );

  for i := 0 to 25 do

  begin

    if( NO_ERROR =

      Windows.WNetGetConnection(

        PChar(

          '' + Chr( 65 + i ) + ':' ),

        PChar( sNetPath ),

        dwMaxNetPathLen ) )then

    begin

      sl.Add( Chr( 65 + i ) + ': ' +

              sNetPath );

    end;

  end;

  Result := sl.Count;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

//

// here's how to call GetNetworkDriveMappings():

//

var

  sl : TStrings;

  nMappingsCount,

  i  : integer;

begin

  sl := TStringList.Create;

  nMappingsCount :=

    GetNetworkDriveMappings( sl );

  for i := 0 to nMappingsCount-1 do

  begin

    //

    //İstenen şeyler burada yapılabilir.

    // Şimdilik sadece görüntülensin

    //

    MessageBox( 0,

      PChar( sl.Strings[ i ] ),

      'Tanımlı Ağ diskleri',MB_OK );

  end;

  listbox1.items.assign(sl);

  sl.Free;

end;

 

end.

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