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

// Ben size yedekleme kodlarını yazıyorum. Sizler bunu kendinize göre

// yedekleyebilirsiniz.

 

// 1 Adet Folder Diyalog Kutusu Ekliyoruz,2 adet label 2 adet edit ekliyoruz.

// Label1 e Veritabanı Klasörü, label2 ye ise Yedekleme Klasörü yazıyoruz.

 

// 3 adet buton ekliyoruz.biri ydekleme diğer kapat butonu ve son olarak klasör seçimi

// için bir buton değil.

 

//Kopyalama Fonksiyonunu yazıyoruz. Bu kod kodbanktan alınmıştır.

 

function copydir(von,zieldir: String): boolean;

var fos: TSHFileOpStruct;

begin

ZeroMemory(@fos, SizeOf(fos));

with fos do begin

wFunc := FO_COPY;

fFlags := FOF_FILESONLY;

pFrom := PChar(von+#0);

pTo := PChar(zieldir)

end;

Result:=(0=ShFileOperation(fos));

end;

 

 

//Programın Çalıştığı klasörü buluyoruz. Bu kod kodbanktan alınmıştır.

function GetAppPath: string;

begin

  Result := ExtractFilePath(Application.ExeName);

  if Result[Length(Result)] <> '' then

   Result := Result + '';

end;

 

function GetDirectorySize(const ADirectory: string): Integer;

var

  Dir:  TSearchRec;

  Ret:  integer;

  Path: string;

begin

  Result := 0;

  Path   := ExtractFilePath(ADirectory);

  Ret    := Sysutils.FindFirst(ADirectory, faAnyFile, Dir);

 

  if Ret <> NO_ERROR then

    exit;

 

  try

    while ret=NO_ERROR do

    begin

      inc(Result, Dir.Size);

      if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then

         Inc(Result, GetDirectorySize(Path + Dir.Name + '*.*'));

      Ret := Sysutils.FindNext(Dir);

    end;

  finally

    Sysutils.FindClose(Dir);

  end;

end;

 

// Program Kapatılıyor..

procedure Tyedekleme.XiButton2Click(Sender: TObject);

begin

close;

end;

 

// c:/bilgisayar/Data klasöründeki dısyaları yedekliyoruz.

 

procedure Tyedekleme.FormShow(Sender: TObject);

begin

suiedit1.Text:= GetAppPath+'DATA';

label4.caption:=Format('Boyut: %d bytes', [GetDirectorySize(GetAppPath+'DATA*.*')])

end;

 

procedure Tyedekleme.XiButton1Click(Sender: TObject);

begin

if not copydir(edit1.text,edit2.text) then

begin

showmessage('Yedekleme İşlemi Basarisiz');

close;

end else begin

showmessage('Yedekleme İşlemi Başarı İle Gerçekleşti.');

end;

end;

 

procedure Tyedekleme.SpeedButton1Click(Sender: TObject);

begin

FolderDialog1.execute;

if FolderDialog1.execute  then

Edit2.Text:=FolderDialog1.Directory;

end;

 

procedure Tyedekleme.FormKeyPress(Sender: TObject; var Key: Char);

begin

if key=#27 then

close;

end;

 

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

 

 ftp  ile program günçelleme

Var

  xDosyaUzunluk : LongInt;

 

function FTPDosyaAl( IdFTP : TIdFTP; SrcDosya, DesDosya:TFileName; Ftp, RemoteDir, Login, Pass : String ):Boolean;

begin // Uses IdFTP, IdFTPCommon

  Result := False;

  IdFtp.Host     := Ftp;

  IdFtp.Username := Login;

  IdFtp.Password := Pass;

  IdFtp.Passive  := True;

  IdFtp.Connect;

  If IdFtp.Connected then

  begin

    IdFtp.ChangeDir(RemoteDir);

    // Gauge'de kullanmak için

    // Dosya Uzunluğunu grlobal bir değişkene atıyoruz...

    xDosyaUzunluk := IdFtp.Size( SrcDosya );

    Try

      IdFtp.TransferType := ftBinary; // Uses IdFTPCommon

      IdFtp.Get(SrcDosya, DesDosya, True);

    Finally

      Result := True;

    end;

    IdFtp.Quit;

  end;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

  If FileExists(ExtractFilePath(Application.Exename) +'Guncelle.BAT')

    then DeleteFile(ExtractFilePath(Application.Exename) +'Guncelle.BAT');

end;

 

procedure TForm1.Guncelle();

Var

  FTPAdres,

  KaynakDizin,

  Name,

  Pass,

  KaynakDosya,

  HedefDosya      : String;

begin

  // Bilerek bu örnek için 1 MB yer ayırarak açtığım FTP sunucu adresini veriyorum...

  FTPAdres    := 'emerkez.info';

  KaynakDizin := '/programlar';

  Name        := 'delphi';

  Pass        := 'arman';

  KaynakDosya := ExtractFileName(Application.Exename);

  HedefDosya  := ChangeFileExt( ExtractFilePath(Application.Exename) + KaynakDosya, '.BAK' );

  HedefDosya  := ChangeFileExt( ExtractFilePath(Application.Exename) + KaynakDosya, '.BAK' );

 

  If FileExists(HedefDosya) AND ( MessageDlg('Hedef Dosya Mevcut, üzerine yazılsın mı ? '+#13'('+HedefDosya+')', mtInformation, [mbYes, mbCancel], 0) = mrCancel )

   then EXIT

   else DeleteFile(HedefDosya);

 

  If FTPDosyaAl( IdFtp, KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass )

    then MessageDlg('Dosya Başarıyla Alındı'+#13#13

                  + 'Şimdi program yeniden başlatılmak üzere kapatılacaktır....',

                  mtConfirmation, [mbOk], 0)

    else MessageDlg('Dosya Alınamadı'+#13'('+KaynakDosya+')', mtError, [mbok], 0);

 

  With TStringList.Create do begin

    Add('@Echo Off' );

    Add( Format('Copy %s %s', [ChangeFileExt(Application.ExeName,'.BAK'), Application.ExeName]) );

    Add('DEL '+ChangeFileExt(Application.ExeName,'.BAK'));

    Add( Application.ExeName );

    SaveToFile( ExtractFilePath(Application.Exename)+'Guncelle.BAT' );

    Free;

  end;

  Application.Terminate;

  WinExec( PChar( ExtractFilePath(Application.Exename)+'Guncelle.BAT'), SW_Hide );

end;

 

procedure TForm1.IdFtpStatus(ASender: TObject; const AStatus: TIdStatus;

  const AStatusText: string);

begin

  StatusBar1.SimpleText := AStatusText;

end;

 

procedure TForm1.IdFtpWork(ASender: TObject; AWorkMode: TWorkMode;

  AWorkCount: Integer);

begin

  Gauge1.Progress := AWorkCount;

  Application.ProcessMessages;

end;

 

procedure TForm1.IdFtpWorkBegin(ASender: TObject; AWorkMode: TWorkMode;

  AWorkCountMax: Integer);

begin

  Gauge1.MinValue := 0;

  Gauge1.MaxValue := xDosyaUzunluk;

  Gauge1.Progress := 0;

  Gauge1.Visible  := True;

end;

 

procedure TForm1.IdFtpWorkEnd(ASender: TObject; AWorkMode: TWorkMode);

begin

  Gauge1.Progress := 0;

  Gauge1.Visible  := False;

end;

 

 

Kullanımı ise şu kadar basit

procedure TForm1.Button1Click(Sender: TObject);

begin

  Guncelle();

end;

by tugrul yıldız...cengizhan_2214@hotmail.com

 

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

 

Paradox Veri tabanını Elektrik Kesilmesine karşı Koruma

Uses a BDE ekle ve Her table veya query nin afterpost

olayına aşağıdaki kodu yazın. Bir daha elektrik kesilmesinden

etkilenmez ...

 

try

DBISaveChanges((DataSet As TBDEDataSet).Handle)

except

On EDatabaseError do

ShowMessage('Sicil Tablosunda Kaydetme hatası !...');

end;

 

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

 

MSSQL 2005 TRY & CATCH KULLANIMI

Try-Catch Statement, SQL Serverdaki yeni bir özelliktir. Birbiri ardına yerleştirilmesi gereken tek bir Try (deneme) bloktan ve tek bir Catch (yakalama) bloktan oluşur. Try blokta diğer Transact-SQL ifadelerden bir grup oluşturabilir/iliştirebilirsiniz. Eğer Try blokta bir hata olursa kontrol Catch bloktaki ifade gruplarına transfer edilir. Doğal olarak bir hata yakalandığı ve kontrol edilebildiği zaman (Catch blockta yürütülen ifadeler tarafından) idare eden kişiye raporlanmaz. Catch bloğun yürütülmesi tamamlandığı zaman makine kontrolü tekrar Catch bloktan sonraki ilk ifadeye verir. (Bazı istisnaları da vardır. Eğer Try bloktaki bir ifadenin yürütülmesi sorunsuz olarak tamamlandıysa Catch bloktaki ifadeler atlanacaktır ve makine Catch bloktan sonraki ifadeleri yürütmeye/işlemeye başlayacaktır.

 

 

 

Create Procedure dbo.ap_ChargeLog_Insert

 

       @ItemId int,

 

       @ActionId smallint,

 

       @Cost money,

 

       @Note varchar(max),

 

       @Activity varchar(1000)

 

    as

 

 

 

    BEGIN TRY

 

       INSERT [dbo] . [ChargeLog] ([ItemId] , [ActionId] , [ChargeDate] ,

 

                                     [Cost],[Note]}

 

       VALUES (@ItemId, @ActionId, GetDateO, @Cost, @Note)

 

       INSERT INTO [dbo] . [ActivityLog] ([Activity] , [LogDate],

 

                                          [UserName],[Note]}

 

       VALUES (@Activity, GetDateO, system_user, @Note)

 

     END TRY

 

     BEGIN CATCH

 

        INSERT INTO [dbo] . [ErrorLog] ([ErrorNum] , [ErrorType] ,

 

                                         [ErrorMsg],[ErrorSource])

 

        VALUES (50000,’E’, ’Unable to record transaction in ChargeLog.’,

 

               ap_ChargeLog_Insert’ )

 

     END CATCH

 

 

 

 

Stored Procedure bir işlem (transaction) açar ve iki Insert ifade işlemeye çalışır. Eğer ifadelerden biri ya da ikisi de başarısız olursa bir işlem (transaction) geri sarar(rollback) ve kayıt özel bir tabloda tutulur.

 

Hata Yakalama

SQL Server 2005 oldukça fazla türde hatayı bulma konusunda kendisinden öncekilerden daha başarılıdır. Şimdi ne türün hataların yakalandığını ve hangilerinin yakalanamadığını anlatacağım. The Try-Catch ifadesi aşağıdaki uyarıları yakalamaz:

 

 

 

BEGIN TRY

 

        Print Begin try

 

        INSERT [dbo] . [ChargeLog] ( [ItemId] , [ActionId] , [ChargeDate] , [Cost] , [Note] )

 

        VALUES ( 30 , 15 , GetDate (), $150 , null)

 

 

        raiserror ( ’Some Error!’ , 10 , 1 )

 

 

 

        INSERT INTO [dbo] . [ActivityLog] ( [Activity] , [LogDate] , [UserName] , [Note] )

 

        VALUES   ( ’Repair’ , GetDate (), system_user , null)

 

        Print End try

 

     END TRY

 

     BEGIN CATCH

 

        print Catch

 

        INSERT INTO [dbo] . [ErrorLog] ( [ErrorNum] , [ErrorType] , [ErrorMsg] , [ErrorSource] )

 

        VALUES ( 50000 , ’E’ , ’Unable to record transaction in

 

     ChargeLog.’,’ap_ChargeLog_Insert’)

 

     END CATCH

 

 

 

     Print Finished!’

 

 

 

 

Eğer yukarıdaki örneği uygularsanız göreceksiniz ki Try blok uyarıya aldırmayacak ve hiçbir şey olmamış gibi devam edecektir:

 

 

Begin try

 

 

 

     (1 row(s) affected)

 

     Some Error!

 

 

 

     (1 row(s) affected)

 

     End try

 

     Finished!

 

 

 

 

Önceki versiyonlarda yaşanan büyük problem; çok ciddi hataların otomatik olarak işlemin kesintiye sebep olmasıydı. SQL Server’ın bu sürümü ciddi hataların bulunması ve çözülmesinde çok daha iyi! (17 veya üstü önem derecesiyle). Eğer bağlantı kopmamış ise SQL Server makinesi hatayı atlayarak işleme devam etmeye çalışacaktır. Aşağıdaki örnekte ciddi bir hata canlandıracağım:

 

 

BEGIN TRY

 

         print Begin try

 

         raiserror (’Some Error!’, 23, 1}

 

         print End try

 

     END TRY

 

     BEGIN CATCH

 

        print Catch

 

     END CATCH

 

 

 

     Print Finished!’

 

 

 

 

 

SQL Server 2005 bu hatayı yakalayıp Catch bloktaki kodla devam edecektir:

 

 

Begin try

 

     Catch

 

    Finished!

 

 

 

Şimdi buna eşdeğer kodu SQL Server 2000de deneyelim:

 

 

print start

 

     Raiserror ( ’Some error!’ , 23 , 1 } With LOG

 

     if @@error <> 0

 

        print Error detected!’

 

 

 

 

Bu durumda, SQL Server 2000 bağlantıyı otomatik olarak koparacaktır:

 

  start

     Server: Msg 50000, Level 23, State 1, Line 2

 

     Some error!

 

     Connection Broken

 

 

 

 

SQL Server’ın önceki sürümleri önem derecesi 17den düşük olan hataları bile işlemede başarısız oldu. Aşağıdaki örnekte tamsayı değişkene bir tarih atayacağım:

 

 

 

declare @i int

 

     print start

 

     set @i = ’2/2/2005

 

     if @@error <> 0

 

        print error occurred

 

     print finished

 

 

 

 

Ne yazık ki SQL Server 2000 yerleşik prosedür veya dizi işlemini aniden durduruyor:

 

start

 

Server: Msg 245, Level 16, State 1, Line 4

 

Syntax error converting the varchar value 2/2/2005to a column of data type int.

 

 

 

 

Şimdi buna eşdeğer kodu SQL Server 2005te deneyelim:

 

 

 

BEGIN TRY

 

        print Begin try

 

        declare @i int

 

        set @i = ’2/2/2

 

        print End try

 

        END TRY

 

        BEGIN CATCH

 

           print Catch

 

        END CATCH

 

           print Finished

 

 

 

 

Beklendiği gibi makine hatayı yakaladı:

 

 Begin try

 

  Catch

 

  Finished

 

 

 

 

Catch Blok Fonksiyonları

Sadece Catch block içinde çalışan özel hata kontrol fonksiyonları bulunmaktadır:

 

Error_Message()  Returns the error message that would normally be returned to the caller application

 

Error_Number()    Returns the identifier of the error

 

Error_Severity()   Returns the severity

 

Error_State()       Returns the state

 

Error_Procedure()Returns the name of the procedure (or other programmatic database object) in which the error has occurred

 

Error_Line()         Returns the line number of the procedure in which the error has occurred

 

Bu fonksiyonların önemli bir yeni özelliği de (@@Error ile kıyaslandığında) değerlerini Catch blok içinde tutmasıdır. Bunlara birçok defa başvurabilirsiniz. Bu fonksiyonlar hatanın sorgulanması ve aynı zamanda bir problem varsa yöneticinin sorundan haberdar edilmesi için önemlidir. Örneğin, aşağıdaki işlem bu fonksiyonları error logda depolanacak özel bir hata mesajı oluşturmak için kullanır ve ardından idareciyi uyarmak için hatayı bildirir:

 

 

 

 

Alter Procedure dbo.ap_ChargeLog_Insert2

 

           @ItemId int

 

           @ActionId smallint,

 

           @Cost money,

 

           @Note varchar(max),

 

           @Activity varchar(1000)

 

     as

 

 

 

     BEGIN TRY

 

        INSERT [dbo].[ChargeLog]([ItemId],[ActionId],[ChargeDate],

 

                                  [Cost],[Note])

 

        VALUES (@ItemId, @ActionId, GetDate(),

 

                @Cost, @Note)

 

 

 

     INSERT INTO [dbo].[ActivityLog]([Activity],[LogDate],

 

                                     [UserName] , [Note])

 

     VALUES(@Activity, GetDate(),

 

            system_user, @Note)

 

 

 

     END TRY

 

     BEGIN CATCH

 

         declare @severity int

 

         set @severity = Error_Severity()

 

         declare @msg varchar(255)

 

         set @msg = ’Unable to record transaction in ChargeLog.’

 

                  + ’Error(’ + ERROR_NUMBER() + ’):’ + ERROR_MESSAGE()

 

                  + ’ Severity = ’ + ERROR_SEVERITY()

 

                  + ’ State = ’ + ERROR_STATE()

 

                  + ’ Procedure = ’ + ERROR_PROCEDURE()

 

                  + ’ Line num. = ’ + ERROR_LINE()

 

        INSERT INTO [dbo] . [ErrorLog] ([ErrorNum] , [ErrorType] , [ErrorMsg] , [ErrorSource])

 

        VALUES (ERROR_NUMBER(), ’E’, @msg, ERROR_PROCEDURE())

 

 

 

        RAISERROR (@msg, @severity, 2)

 

     END CATCH

 

 

 

     Return

 

 

 

 

 

 

Catch blocktaki son ifade hatayı yöneticiye tekrar bildirmek içindir. Raiserror()da the Error_Severity() kullanılamaz. Sadece değerler ve değişkenler Raiserror()de izinlidir. Net işlemlerle Try-Catch Statement (Try-Catch Statement with Explicit Transactions) Try-Catch işlemler ve ifadelerle ilgili aklınızda bulundurmanız gereken ilk şey sihirli hiçbir şey olmadığıdır Catch blokta işlemi manüel olarak geri sarmanız gerekir.

 

 

 

Alter Procedure dbo.ap_ChargeLog_Insert_wTran

 

        @ItemId int,

 

        @ActionId smallint,

 

        @Cost money,

 

        @Note varchar(max),

 

        @Activity varchar(1000)

 

     as

 

 

     BEGIN TRY

 

        BEGIN TRAN

 

        INSERT [dbo] . [ChargeLog] ([ItemId] , [ActionId] , [ChargeDate],

 

                                     [Cost],[Note])

 

        VALUES (@ItemId, @ActionId, GetDate(), @Cost, @Note)

 

 

 

       INSERT INTO dbo.ActivityLog(Activity, LogDate, UserName, Note)

 

       VALUES (@Activity, GetDate(), system_user, @Note)

 

       COMMIT TRAN

 

     END TRY

 

 

 

     BEGIN CATCH

 

        ROLLBACK TRAN

 

        INSERT dbo.ErrorLog(ErrorNum,[ErrorType],[ErrorMsg],[ErrorSource])

 

        VALUES (50000,’E’, ’Unable to record transaction in ChargeLog.’,

 

                ERROR_PROCEDURE(}}

 

     END CATCH

 

     return

 

 

 

 

Teorik olarak bir hata meydana geldiğinde işlemi(transaction) ileri boyutlarda sorgulamak mümkündür. Hiçbir işlem(transaction) açık değilse fonksiyonlar 0a döner. Bir işlem(transaction) açıksa 1e döner ve işlenebilir veya geri sarılabilir. -1e döndüğünde açık işlem(transaction) işlenemez. Bu durumda üzerinde yapılacak hiçbir değişiklik mümkün değildir. Bu durum tipik olarak serverda dramatik bir şey olduğunda meydana gelir rneğin bir işlem (transaction) logunun dolması). Data okunabilir ve bütün kilitler yerinde muhafaza edilir/sürdürülür (böylece her şeyi sorgulayabilirsiniz). Fakat modifikasyonlara devam etmek için geri sarmalısınız.

 

Aşağıdaki yerleşik prosedürün ne kadar mantıklı ya da açıklayıcı olduğu tartışılır ancak Xact_State() fonksiyonunun kullanımını canlandırmaktadır. İşlem karmaşıktır, birçok Insert ve Select ifadelerinden ibarettir. Bu nedenle, Catch block daha fazla karmaşıktır. İlk önce işlemin yürütülemez ya da kapalı olduğu basit durumları idare eder. Bu durumlarda hata kontrolü daha kolay anlaşılır durumdadır işlem (transaction) geri sarılmalı veya görmezden gelinmelidir. En ilginç olan durum işlemin yürütülebilir olduğu durumlardır. İşlem veya geri alıma karar vermeden önce ilave kontroller yapmanız gerekmektedir:

 

Alter Procedure dbo.ap_ChargeLog_Insert_wTranState

 

        @ItemId int,

 

        @ActionId smallint,

 

        @Cost money,

 

        @Note varchar (max) ,

 

        @Activity varchar(1000)

 

     as

 

     declare @Today smalldatetime

 

     declare @User sysname

 

     declare @ErrorCode int

 

     declare @EqId int

 

     declare @Price money

 

 

     BEGIN TRY

 

        select @Today = GetDate()

 

        set @User = system_user

 

 

 

        BEGIN TRAN

 

        INSERT [dbo].[ChargeLog]([ItemId],[ActionId],[ChargeDate],

 

                               [Cost] , [Note])

 

        VALUES (@ItemId, @ActionId, @Today, @Cost, @Note)

 

 

 

        select @EqId = EqId from dbo.Orderltem

 

        where ItemId = @ItemId

 

 

 

        select @EqId = EqId from dbo.OrderItem

 

        where ItemId = @ItemId

 

 

 

        select @Price = Price

 

        from dbo.PriceList

 

        where EqId = @EqId

 

 

 

        INSERT INTO dbo.Sales(EqId, [UnitPrice], [Qty], [ExtPrice] ,[SalesDate])

 

        VALUES (@EqId, @Price, 1, @Price, @today)

 

 

 

        INSERT INTO dbo.ActivityLog(Activity, LogDate, UserName, Note)

 

        VALUES (@Activity, @Today , @User, @Note)

 

 

 

        COMMIT TRAN

 

 

 

   END TRY

 

   BEGIN CATCH

 

      set @ErrorCode = Error_Number()

 

      if xact_state() = -1

 

      begin

 

        -- transaction is uncommittable

 

         ROLLBACK TRAN

 

        INSERT dbo.ErrorLog(ErrorNum, ErrorType, ErrorMsg, ErrorSource, ErrorState)

 

        VALUES (@ErrorCode, ’E’, ’Unable to record transaction in ChargeLog.’,

 

        ERROR_PROCEDURE(), -1)

 

      end

 

      else if xact_state() = 0

 

      begin

 

        --error occurred before tran started

 

        INSERT dbo.ErrorLog(ErrorNum, ErrorType, ErrorMsg, ErrorSource, ErrorState)

 

        VALUES (@ErrorCode,’E’, ’Unable to pre-process ChargeLog transaction.’,

 

            ERROR_PROCEDURE(), 0)

 

     end

 

     else if xact_state() = 1

 

     begin

 

        --error could be committed or rolled back

 

        commit tran

 

        if exists(select * from dbo.ActivityLog

 

                  where Activity = @Activity

 

                  and LogDate = @Today

 

                       and UserName = @User)

 

     begin

 

        INSERT dbo.ErrorLog(ErrorNum, ErrorType, ErrorMsg, ErrorSource, ErrorState)

 

        VALUES (@ErrorCode,’E’, ’Unable to record transaction in ActivityLog.’,

 

                ERROR_PROCEDURE(), 1)

 

     end

 

           if exists(select * from dbo.Sales

 

                    where EqId = @Activity

 

                    and [SalesDate] = @Today)

 

           begin

 

              INSERT dbo.

 

              VALUES   E’,’Unable to record transaction in’,

 

                    ERROR_PROCEDURE(), 1)

 

           end

 

        end

 

     END CATCH

 

 

 

     return @ErrorCode

 

 

 

 

Not:Bu prosedür tasarımının savunulabilir olduğunu düşünmüyorum. İşlem yürütülebilirken error idaresi yapmak için ekstra kontroller yapmak yerine Try bloğu bir çok Try bloğa bölebilmeli/parçalayabilmeli ve her durumu/olayı ayrı bir Catch blockta halledebilmeliydim. Veya işlemin yürütülmesi için bütün adımların tamamlanmaması gerekiyorsa o zaman işlem iki veya daha fazla işleme bölünebilmeli.

 

Deadlock Retries

 

Try-Catch blockların SQL Server 2005te yakalayabildiği geniş yelpazedeki hataların bir sonucu da Transact-SQLde kilitlenmenin üstesinden gelebilecek bir script yaratabilmenizdir.

 

Deadlocks

Kilitlenme, bağlantılar aynı anda kaynaklar için rekabete girip birbirlerinin işlemlerini bloke ettiklerinde SQL Serverda ortaya çıkan bir durumdur. Kilitlenmenin pek çok türü vardır. Genelde oluşan durumlar:

* Bağlantı 1, A kaynağını (tablo) kilitler ve onu değiştirir.

* Bağlantı 2, B kaynağını (tablo) kilitler ve onu değiştirir.

* Bağlantı 1, B tablosu üzerinde kilit elde etmeye çalışır ancak bağlantı 2nin işlemini tamamlamasını beklemesi gerekir.

* Bağlantı 2, A tablosu üzerinde kilit elde etmeye çalışır ancak bağlantı 1in işlemini tamamlamasını beklemesi gerekir.

* SQL Server kilitlenme tespit eder ve bağlantılardan birini koparmaya karar verir. Error 1502 ortaya çıkar.

* Diğer bağlantı işlemini tamamlar.

 

Öncelikle bir kilitlenme simulasyonu yapmaya çalışalım. Her biri aralarında iki modification ifade ve bir WaitFor ifade içeren iki stored procedure yarattım. WaitFor ifadenin amacı uygulamalarının üst üste binmesi için "stored procedures çalıştırırken Management Studioyu işlettiğimde bana 10 saniye kazandırmasıdır. Stored procesures aynı tabloya zıt sıralamayla giriş yaparlar:

 

 

 

Alter Procedure [dbo].[ap_SalesByDate_IncreasePrice]

 

        @Factor real,

 

        @Date smalldatetime

 

     as

 

     set xact_abort on

 

 

     begin tran

 

     update dbo.Sales

 

     set UnitPrice = UnitPrice * @Factor,

 

         ExtPrice = ExtPrice * @Factor

 

     where SalesDate = @Date

 

 

 

     waitfor delay 0:00:10

 

 

 

     update dbo.PriceList

 

     set Price = Price * @Factor

 

 

 

     commit tran

 

     return

 

     GO

 

 

 

     ALTER procedure [dbo].[ap_PriceByEqId_Set]

 

        @EqId int,

 

        @Price money

 

     as

 

     set xact_abort on

 

     begin tran

 

     update dbo.PriceList

 

     set Price = @Price

 

     where EqId = @EqId

 

 

 

     waitfor delay 0:00:10

 

 

 

     update dbo.Sales

 

     set UnitPrice = @Price,

 

         ExtPrice = @Price * Qty

 

     where EqId = @EqId

 

 

 

     commit tran

 

     return

 

 

 

 

Management Studioda iki Query penceresinden prosedürleri aynı anda yönetirseniz (birinciden sonra ikinciyi başlatmak için 10 saniyeniz var) bir süre sonra SQL Server kilitlenme tespit edecek ve diğerinin devam edebilmesi için bağlantılardan birini kesecektir.

SQL Serverın eski versiyonlarında kilitlenme hatalarını kopan bağlantılarla sonuçlanıyordu. SQL Server 2005te diğer hatalar gibi tespit edilebiliyorlar. Şimdi hatayı tespit etmek için bir prosedürü değiştirelim ve loop taki gecikmenin ardından yeniden işlemeyi deneyelim:

 

 

 

ALTER procedure [dbo].[ap_PriceByEqId_Set_wRetry]

 

         @EqId int,

 

         @Price money

 

 

     as

 

 

 

     -- exec ap_PriceByEq!d_Set_wRetry 1, $16.82

 

     declare @i int

 

     set @i = 1

 

     while @i <= 10

 

     begin

 

        begin try

 

           set xact_abort on

 

           begin tran

 

 

 

           update dbo.PriceList

 

           set Price = @Price

 

           where EqId = @EqId

 

 

 

           waitfor delay 0:00:10

 

 

 

           update dbo.Sales

 

           set UnitPrice = @Price,

 

               ExtPrice = @Price * Qty

 

           where EqId = @EqId

 

 

 

           commit tran

 

           ------------

 

           print completed

 

           break

 

        end try

 

        begin catch

 

           if ERROR_NUMBER() = 1205

 

           begin

 

              rollback tran

 

              set @i = @i + 1

 

              print retry

 

              INSERT INTO [dbo].[ErrorLog]([ErrorNum],[ErrorType],[ErrorMsg]

 

                , [ErrorSource] , [CreatedBy] , [CreateDT] , [ErrorState])

 

              VALUES(Error_Number(), ’E’, Error_Message(),

 

                Error_Procedure () , suser_sname () , GetDateO, Error_State ())

 

              waitfor delay 0:00:03

 

           end

 

        end catch

 

     end

 

     print Completed

 

     return

 

 

 

 

 

Bu stored procedure’ı çalıştırdığınızda hatadan kurtulur.

 

Not

Bu tür kilitlenme hatasına cycle deadlock adı verilir. Cycle deadlockları idare edebilmenin en iyi yolu modifiye edilmiş tabloların sırasını değiştirmektir. Sıralamayı değiştirmek kilitlenmenin oluşmasını engeller. Retry, kilitlenme için başvurulacak son yöntemdir ve sadece kullanımı kaçınılmazsa kullanılmalıdır (key deadlockı durumunda olduğu gibi)

 

Try-Catch Statement Nesting

Try-Catch ifadeleri iç içe koymak mümkündür. Örneğin, bir Try-Catch ifade Try blok içinde olabilir. Aynı zamanda Try blok içindeki bir Exec ifadeden Try-Catch blok olan bir stored procedure çağırmak da mümkündür. Hata meydana geldiğinde makine Catch bloktaki son ifadeleri çalıştırmaya başlayacaktır. Özellikle belirtmek istediğim bir özellik var: Catch blockta hata yakalandığı ve düzeltildiği zaman SQL Server işleme nereden devam edecek? Daha önce açıkladığım gibi eğer dizinin tek bir Try-Catch bloku varsa o zaman işlem Catch bloktan sonraki ilk ifadeden devam ettirilecektir. Try-Catch block olmayan iç içe yerleştirilmiş stored procedure durumunda errorü işleyen Catch bloktan sonraki ifadeden devam ettirilecektir. Ancak iç içe geçirilmiş procedurun Try-catch bloku varsa onun Catch bloku hatayı işleyecek fakat işlem iç içe geçirilen prosedürü kuran Exec ifadeden sonraki ilk ifadeden devam edecektir. (iç içe geçirilmiş Catchten sonraki ilk ifadeden değil)

 

Error Handling Architecture

 

Hata yönetimini farklı yönlerini inceledik ancak önemli olan soru; gelecek projenizde standartlar veya yönergeler için ne kullanmalısınız? Try-Catch statement oldukça güçlüdür ve önceki sürümlerde tespit etmenin mümkün olduğundan çok daha fazla problemi tespit edebilir. İki seçeneğiniz var. Birincisi, Try-Catch ifadelerdeki her stored procedure’ı paketlemeye/sarmalamaya karar verebilirsiniz v Diğer çözüm ; tüm hatalar için değil, sadece bazı anlamlı hata yönetimi uygulayacağınız yerlerde Try-Catch statement kullanmaktır. Bu tür bir mimaride beklenmedik hatalar client uygulama (veya özel yazılım bileşenleri) tarafından yönetilmelidir.

 

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

 

veritabanlarında n kayıt çekmek

Microsoft SQL Server

SELECT TOP 10 column FROM table

 

PostgreSQL and MySQL

SELECT column FROM table

LIMIT 10

 

Oracle

SELECT column FROM table

WHERE ROWNUM <= 10

 

Sybase

SET rowcount 10

SELECT column FROM table

 

Firebird

SELECT FIRST 10 column

FROM table

 

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

 

Klasördeki dosya sayısı

arkadaşlar bir klasör içindeki dosya sayısını nasıl bulabilirim¿

 

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

 

dsad

sadasd

 

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

 

Res Olarak Bitmap Kullanmak-1

//Resource Dosyadan Bitmap Kullanılabilir mi? (*.res)

 

Projenizi oluşturduğunuz klasörde bir text dosya oluşturun ve newres.txt

ismi ile kaydedin. Dosyanın ilk satırına da aşağıdaki satırı ilave edin.

 

MY_BMP_RES BITMAP "bmpname.bmp"

 

Dos Komut satırından brcc32 newres.txt komutu ile dosyayı derleyin

 

Böylelikle newres.res isimli bitmap dosyanız oluşacaktır.

 

Bu dosyayı kullanmak için ise aşağıdaki kodu kullanabilirsiniz:

 

unit Unit1;

 

interface

...

 

var

MyBmp: TBitmap;

 

implementation

 

{$R *.DFM}

{$R newres.res} // Bu satır eklendi!

 

procedure TForm1.FormCreate(Sender: TObject);

begin

    MyBmp := TBitmap.Create;

    MyBmp.LoadFromResourceName(HInstance,'MY_BMP_RES');

end;

 

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

 

Windows kullanıcı ayarları tesbiti (bölgesel ayarlar)

NeverFear - kaheri579@hotmail.com

 

** Bu konuda yazılmış pek kod bulamadığım için arayanlara en azından fikir verebilir

   düşüncesiyle gönderiyorum.

 

** Yeni bir proje oluşturun ve Form1 üzerine 1 adet Label1 ekleyin.

** Aşağıda görüldüğü gibi uses kısmına Registry eklemeyi unutmayın.

** Windows 9x ve Vista sürümlerinde denenmedi.

 

unit Unit1;

 

interface

 

uses

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

  Dialogs, Registry;

 

type

  TForm1 = class(TForm)

    Label1: TLabel;

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  Reg: TRegistry;

  sCountry, sDate, sDecimal: string;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.FormShow(Sender: TObject);

begin

  Reg:= TRegistry.Create;

  try

     Reg.RootKey:= HKEY_CURRENT_USER;

     Reg.OpenKey('Control PanelInternational', False);

     sCountry:= Reg.ReadString('sCountry');

     sDate:= Reg.ReadString('sDate');

     sDecimal:= Reg.ReadString('sDecimal');

  finally

     Reg.Free;

  end;

  Label1.Caption:= 'Ülke : '' ' + sCountry + ' ''' + #10 +

     'Tarih Ayracı : '' ' + sDate + ' ''' + #10 +

     'Ondalık Ayracı : '' ' + sDecimal + ' ''';

end;

 

end.

 

NOT: Yukarıdaki kod örneğinde görüldüğü gibi, bir Windows kullanıcısının bütün

     bölgesel ayarları "Kayıt Bilgileri"nde "HKEY_CURRENT_USER" altındaki

     "Control PanelInternational" anahtarında tutulmakta. Programınızı hazırlarken

     "Acaba Kullanıcının Bölgesel Ayarları Ne?" sorunuza hiç zorlanmadan cevap

     bulmuş olursunuz. Böylece sabit ve değişkenlerinizi bu duruma göre ayarlarsınız.

     Programınız genel bir özellik kazanır ve her Windows kullanıcısının bilgisayarında

     sorunsuz bir şekilde çalışır(Windows 9x ve Vista sürümünde denenmedi).

     ** Windows platformunun ne olduğunu tesbit ederseniz 9x ve Vista'da da sorunsuz

        çalışabilir. Bu durumda;

        Reg.RootKey:= HKEY_CURRENT_USER; ve

        Reg.OpenKey('Control PanelInternational', False); kısmını değiştirmeniz

        gerekebilir.

        ** if (PlatformId = 3) or (PlatformId = 4) then Windows 98 SE için,

        ** if (PlatformId = 10) or (PlatformId = 11) then Windows 2000, Home Edition,

           Xp Pro. için.

     ** Windows platformunun tesbiti ile ilgili kodlamalar KodBank'ta var.

        "Platform" diye arattırma yaparsanız karşınıza çıkar.

 

 

Çalışmalarınızda başarılar dilerim.

 

NeverFear - kaheri579@hotmail.com

 

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

 

arkadaşlar acil kuru temizleme programı kodları lazım yardımlarınızı bekliyorum şimdiden teşekkürler

elbiseleri yıkıyıp asacak ve gelen paraları hesaplayacak :-)

 

 

Başlık Yorum Son Durum

kuru temizleme programı acil!!!!!!! 25 Aralık 2007 13:50

esmerguzeli

 

 

Kullanılan Dil: Delphi

 

 

 

• [Tamamı / Yorumlar]  [Kod Bankası]  -  [Delphi]

 

 

 1 25 Aralık 2007 15:00

kaans07

 

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

 

MSSQL CREATE DATABASE OR DROP DATABASE

if db_id('Database1') is not null

> DROP DATABASE Database1

> 

> 

> if db_id('Database1') is null

> CREATE DATABASE Database1

 

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

 

İlk Defa burayı gereksiz kullanıyorum özür dilerim

delphiturk.com daki ornek programlar bolumu 3 gündür  çalışmıyor yönetici uyuyormu :))

 

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

 

hesap makinesi yardım

*******************************************************************

Aşağıdaki kodları istediğin gibi ayıkla dll dosyasına göre yazıldılar

 

library splib1;

{ Important note about DLL memory management: ShareMem must be the

  first unit in your library's USES clause AND your project's (select

  Project-View Source) USES clause if your DLL exports any procedures or

  functions that pass strings as parameters or function results. This

  applies to all strings passed to and from your DLL--even those that

  are nested in records and classes. ShareMem is the interface unit to

  the BORLNDMM.DLL shared memory manager, which must be deployed along

  with your DLL. To avoid using BORLNDMM.DLL, pass string information

  using PChar or ShortString parameters. }

 

uses ShareMem,SysUtils,Classes;

var

hata:integer=0;

hatasatir:String;

 

Function sm_DecToBin(Z:Longword):Pchar;export;

var BinString:String;a:Pchar;

begin

BinString := '';

Repeat

 BinString := IntToStr(Z mod 2) + BinString;

 Z := Z div 2;

Until (Z=0);

Getmem(a,length(binstring)+5);

strpcopy(a,TrimLeft(binString));

sm_DecToBin:=a;

end;

 

Function sm_DecToBinX(Z:Longword;n:integer):Pchar;export;

var BinString: String;v,Index:Integer;a:Pchar;

begin

Index:=1;v:=0;BinString := '';

Repeat

 if index>v then v:=v+n;

 BinString := IntToStr(Z mod 2) + BinString;

 if (Index mod v = 0) then BinString := ' ' + BinString;

 Z := Z div 2;

 Inc (Index);

Until (Z=0)and (Index > v);

Getmem(a,length(binstring)+5);

strpcopy(a,TrimLeft(binstring));

sm_DecToBinx:=a;

end;

 

function sm_DecToOct(Z:Longword):Pchar;export;

var OctString: String;a:Pchar;

begin

OctString := '';

Repeat

 OctString := IntToStr(Z mod 8) + OctString;

 Z := Z div 8;

Until (Z=0);

Getmem(a,length(Octstring)+5);

strpcopy(a,TrimLeft(OctString));

sm_DecToOct:=a;

end;

 

function sm_DecToOctx(Z:Longword;n:integer):Pchar;export;

var

OctString: String;v,Index: Integer;a:Pchar;

begin

Index:=1;v:=0;OctString := '';

Repeat

 if index>v then v:=v+n;

 OctString := IntToStr(Z mod 8) + OctString;

 if (Index mod 4 = 0) then OctString := ' ' + OctString;

 Z := Z div 8;

 Inc (Index);

Until (Z=0)and (Index > v);

Getmem(a,length(Octstring)+5);

strpcopy(a,TrimLeft(OctString));

sm_DecToOctx:=a;

end;

 

function sm_DecToHex(Z:Longword):Pchar;export;

var

HexString: String;C:integer;a:Pchar;

begin

HexString := '';

Repeat

 c:=z mod 16;

 case c of

 0..9:HexString := chr(c+48)+HexString;

 10..15:HexString := chr(c+55)+HexString;

 end;

 Z := Z div 16;

Until (Z=0);

Getmem(a,length(Hexstring)+5);

strpcopy(a,TrimLeft(HexString));

sm_DecToHex:=a;

end;

 

function sm_DecToHexx(Z:Longword;n:integer):Pchar;export;

var

HexString: String;C:integer;

v,Index: Integer;a:Pchar;

begin

Index:=1;v:=0;HexString := '';

Repeat

 if index>v then v:=v+n;

 if (Index mod 4 = 0) then HexString := ' ' + HexString;

 c:=z mod 16;

 case c of

 0..9:HexString := chr(c+48)+HexString;

 10..15:HexString := chr(c+55)+HexString;

 end;

 Z := Z div 16;

 Inc (Index);

Until (Z=0)and (Index > v);

Getmem(a,length(Hexstring)+5);

strpcopy(a,TrimLeft(HexString));

sm_DecToHexx:=a;

end;

 

function sm_BinToDec(BinStr:string):Longword;export;

var

i:integer;c:Char;

begin

hata:=0;Result := 0;

if length(Binstr)>32 then begin hata:=102;exit;end;

for i:=1 to Length(BinStr) do begin

 c:= BinStr[i];

 case c of

  '0'..'1':Result:=2*Result+(Ord(c)-$30);

 else hata:=101;

 end;

end;end;

 

function sm_OctToDec(OctStr:string):Longword;export;

var

i:integer;c:Char;

begin

hata:=0;Result := 0;

if length(Octstr)>10 then begin hata:=102;exit;end;

for i:=1 to Length(OctStr) do begin

 c:=OctStr[i];

 case c of

  '0'..'7':Result:=8*Result+(Ord(c)-$30);

 else hata:=101;

 end;

end;end;

 

function sm_HexToDec(HexStr:string):Longword;export;

var

i:integer;c:Char;

begin

hata:=0;Result := 0;

if length(Hexstr)>8 then begin hata:=102;exit;end;

for i:=1 to Length(HexStr) do begin

 c:=HexStr[i];

 case c of

 '0'..'9':Result:=16*Result+(Ord(c)-$30);

 'A'..'F':Result:=16*Result+(Ord(c)-$37);

 'a'..'f':Result:=16*Result+(Ord(c)-$57);

 else hata:=101;

 end;

end;

end;

 

function sm_DecToStr(Z:Longword):Pchar;export;

var

Str: String;C:integer;

begin

Str:='';

Repeat

 c:=z mod 10;

 case c of

 0..9:Str:=chr((Z mod 16)+48)+Str;

 end;

 Z := Z div 10;

Until (Z=0);

sm_DecToStr:=Pchar(TrimLeft(Str));

end;

 

Function sm_ErrFound:boolean;

begin

if hata<>0 then result:=true else result:=false;

end;

 

Function sm_ErrLine:Pchar;

begin

case hata of

101:Hatasatir:='Convert Error: Illegal character!';

102:Hatasatir:='Conver Error: Number too big to convert!';

end;

sm_ErrLine:=Pchar(Hatasatir);

end;

 

Function sm_ErrNumber:integer;

begin sm_ErrNumber:=hata;end;

 

{function StrToDec(Str:string):integer;export;

var

i:integer;c:Char;

begin

hata:=0;

Result := 0;

for i:=1 to Length(Str) do begin

 c:=Str[i];

 case c of

 '0'..'9':Result:=10*Result+(Ord(c)-$30);

 else hata:=101;

 end;

end;end;}

 

exports

sm_DectoBin,sm_DectoBinx,sm_DecToOct,sm_DecToOctx,sm_DecToHex,sm_DecToHexx,

sm_ErrFound,sm_ErrLine,sm_ErrNumber,sm_DecToStr,sm_BinToDec,sm_OctToDec,sm_HexToDec;

 

begin

end.

 

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

 

hesap makinası yardım lütfen acil

type

  TForm1 = class(TForm)

    Panel1: TPanel;

    Panel2: TPanel;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    Button8: TButton;

    Button9: TButton;

    Button10: TButton;

    Button11: TButton;

    Button12: TButton;

    Button13: TButton;

    Button14: TButton;

    Button15: TButton;

    Button16: TButton;

    Button17: TButton;

    Button18: TButton;

    Button19: TButton;

    Button20: TButton;

    Button30: TButton;

    Button29: TButton;

    Button28: TButton;

    Button27: TButton;

    Panel3: TPanel;

    Button25: TButton;

    Button26: TButton;

    Button23: TButton;

    Button24: TButton;

    Button22: TButton;

    Button21: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure Button8Click(Sender: TObject);

    procedure Button9Click(Sender: TObject);

    procedure Button10Click(Sender: TObject);

    procedure Button11Click(Sender: TObject);

    procedure Button12Click(Sender: TObject);

    procedure Button13Click(Sender: TObject);

    procedure Button14Click(Sender: TObject);

    procedure Button15Click(Sender: TObject);

    procedure Button16Click(Sender: TObject);

    procedure Button17Click(Sender: TObject);

    procedure Button18Click(Sender: TObject);

    procedure Button19Click(Sender: TObject);

    procedure Button20Click(Sender: TObject);

    procedure Button21Click(Sender: TObject);

    procedure Button22Click(Sender: TObject);

    procedure Button23Click(Sender: TObject);

    procedure Button27Click(Sender: TObject);

    procedure Button28Click(Sender: TObject);

    procedure Button29Click(Sender: TObject);

    procedure Button30Click(Sender: TObject);

    procedure Button24Click(Sender: TObject);

    procedure Button25Click(Sender: TObject);

    procedure Button26Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  deger : real;

  derece: string[10];

  islem : string[10];

  degersifirla : string[5];

  sayisistemi : string[3];

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

begin

   if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='1';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'1';

 

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='2';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'2';

 

 

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='3';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'3';

 

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

 

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='4';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'4';

 

end;

 

procedure TForm1.Button5Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='5';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'5';

 

 

end;

 

procedure TForm1.Button6Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='6';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'6';

 

 

end;

 

procedure TForm1.Button7Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='7';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'7';

 

 

end;

 

procedure TForm1.Button8Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='8';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'8';

 

 

end;

 

procedure TForm1.Button9Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='9';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'9';

 

 

end;

 

procedure TForm1.Button10Click(Sender: TObject);

begin

if degersifirla='evet' then

begin

    Panel1.Caption:='';

    degersifirla:='hayir';

end;

 

if panel1.Caption='0' then

begin

panel1.Caption:='0';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+'0';

 

 

end;

 

procedure TForm1.Button11Click(Sender: TObject);

var

i : byte;

k : string[1];

begin

 

if degersifirla='evet' then

begin

    Panel1.Caption:='0';

    degersifirla:='hayir';

end;

 

 

for i:=1 to Length(Panel1.Caption) do

begin

    k:=copy(panel1.Caption,i,1);

    if k=',' then exit;

end;

 

 

if panel1.Caption='0' then

begin

panel1.Caption:='0,';

exit;

end;

 

Panel1.Caption:=Panel1.Caption+',';

 

end;

 

 

procedure TForm1.Button30Click(Sender: TObject);

begin

Form1.Close;

end;

 

procedure TForm1.Button24Click(Sender: TObject);

begin

// 2lik tabana çevirme bu butonda olacak

end;

 

procedure TForm1.Button25Click(Sender: TObject);

begin

// 8lik tabana çevirme burda olacak

end;

 

procedure TForm1.Button26Click(Sender: TObject);

begin

// 16 lık taban çevirme burda olacak

end;

 

end.

 

 

 

 

lütfen tabana çevirme işlemleri kaldı hiçbir yerde bulamadım yardım edin ödevim bu

 

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

 

rere flass

ewet haklısın kardess o kadar forum var oralara yazmaz lar buralara sorarlar yaff

   okuyunca silin please

 

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

 

Re: flash.ocx  on Click ekleme

OKUDUKTAN SONRA *** SiLiNiZ ***

 

 

Arkadaslar Yüzlerce kez yazdi, BURASI FORUM DEGiL diye...

 

 

Sorusu Olan, Sorunu Olan, CEVAP VERECEK olan Gitsin Forumda yazsin derdini.

 

 

Daha Kaç yüz kez daha söylemek zorunda bırakacaksınız bizi...

 

 

Adindan da anlasilacagi gibi BURASI KOD BANK - Yani :

 

 

Paylasmak istediginiz, veya Bir kösede dursun belki kullanırım dediginiz KOD lari

Buraya kaydediyorsunuz. Ve Bu KOD lar bir veri tabaninda tutulup üyeler tarafindan

kolaylikla bulunup gerekli oldugu yerde kullaniliyor... Hem siz zahmet çekmiyorsunuz

hende KOD-BANK üyeleri, Ama Burasi Forum gibi Kullanırsak

(Esnek olmadigi için - Ve O amaçla yazilmadigi için)

Çöplük gibi olup kimse istedigini bulamaz.

 

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

 

flash.ocx  on Click ekleme

ültfen yardım flash.ocx  on Click nasıl eklerim veya başka bir bileşen varmı

lütfen yardım;

 

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

 

Renkli Listbox

unit Unit1;

 

interface

 

uses

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

  Dialogs, StdCtrls;

 

type

  TForm1 = class(TForm)

    ListBox1: TListBox;

    Button1: TButton;

    Edit1: TEdit;

    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;

      Rect: TRect; State: TOwnerDrawState);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

 

//////////Listbox Style özelliği drawitem olmalı

////////// buttonla ayarladım zaten ama bilinse iyi olur

 

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

  Rect: TRect; State: TOwnerDrawState);

begin

  With ( Control As TListBox ).Canvas Do

  Begin

   Font.Color  := clBlue;

   Brush.Color := clYellow;

    FillRect(Rect);

    TextOut(Rect.Left, Rect.Top, ( Control As TListBox ).Items[Index]);

 

end;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

listbox1.Style:=lbOwnerDrawVariable;

 

 ListBox1.Items.Add(edit1.Text);

end;

 

end.

 

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

 

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