29 Kasım 2020 Pazar

 


C# ile SqlClient.SqlBulkCopy Kullanımı:


      C# kodları ile yapılan uygulamalarda yüzbinlerce satırlık verinin bir döngü içerisinde Sql Server'daki veritabanına aktarmak başka bir değişle insert etmek oldukça zaman alıcı ve donanım tüketici olmaktadır.

Bu tür durumlarda SqlClient sınıfının SqlBulkCopy özelliğini kullanmak en ideal yöntem olacaktır. Bu yöntemi kullanabilmek için insert işleminin gerçekleşmesi gerektiği hedef tablo ile birebir kaynak tablonun oluşturulması gerekmektedir. Hedef tablo verilerin kalıcı olarak kaydedileceği fiziksel tablo olduğunu düşünürsek kaynak tablo ise onunla birebir aynı olması gereken ve ön bellekte oluşturmamız gereken geçici tablo olacaktır.


- Verilerin aktarılacağı veritabanındaki fiziksel tablo olan hedef tablonun sütun sayısı, sütun adları ve sütun veri tipleri ile birebir olan kaynak tablo aşağıdaki gibi create edilir.  

 public class Kaynak_TABLE

{

        [Key]

        public int ID { get; set; }

        public string job_code { get; set; }

        public string recipe_code { get; set; }

        public string recipe_name { get; set; }

        public double flotte { get; set; }

        public string mach_name { get; set; }

        public string tank_name { get; set; }

        public DateTime start_time { get; set; }

        public DateTime end_time { get; set; }

        public int CONNECTLY { get; set; }

 // Insert olayı için önbellekte oluşturulması gereken veri kaynağı DataSet'in interface'i aşağıdaki gibidir.  

      public void InsertMassiveData(IEnumerable<Kaynak_TABLE> Kaynak_List)

        {

            var table = new DataTable();

            table.Columns.Add("ID", typeof(int));

            table.Columns.Add("job_code", typeof(string));

            table.Columns.Add("recipe_code", typeof(string));

            table.Columns.Add("recipe_name", typeof(string));

            table.Columns.Add("flotte", typeof(float));

            table.Columns.Add("mach_name", typeof(string));

            table.Columns.Add("tank_name", typeof(string));

            table.Columns.Add("start_time", typeof(DateTime));

            table.Columns.Add("end_time", typeof(DateTime));

            table.Columns.Add("CONNECTLY", typeof(int));


            foreach (var itemDetail in Consumptions_List)

            {

                table.Rows.Add(new object[]

                {

                    itemDetail.ID,

                    itemDetail.job_code,

                    itemDetail.recipe_code,

                    itemDetail.recipe_name,

                    itemDetail.flotte,

                    itemDetail.mach_name,

                    itemDetail.tank_name,

                    itemDetail.start_time,

                    itemDetail.CONNECTLY

                });

            }


            //Insert to db..

            using (var MSConn = FnSQL.SqlConnectionNew)

            {// Sql bağlantının tanımlı olduğu fonksiyonun kullanımı ..

                using (SqlTransaction transaction = MSConn.BeginTransaction())

                {// Sql Transaction kullanımı..

                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(MSConn, SqlBulkCopyOptions.Default, transaction))

                    {//SqlBulkCopy sınıfının kullanımı..

                        try

                        {//DestinationTableName veritabanında tanımlı olan fiziksel tablonun adıdır.

                            bulkCopy.DestinationTableName = "Hedef_Table";

                            bulkCopy.WriteToServer(table);

                            transaction.Commit();

                        }

                        catch (Exception ex)

                        {

                            transaction.Rollback();

                            MSConn.Close();

                        }

                    }

                }

            }

        } 

}


Yukarıda oluşturmuş olduğumuz Yapının Kullanımı Aşağıdaki Gibidir:


 while (xReaderKaynak_Table.Read())

 {

       xKaynak_Table = new  Kaynak_Table();

      xKaynak_Table.ID = kayit;

      xKaynak_Table.job_code = FnString.IsNull(xReaderKaynak_Table["jobcode"]);

      xKaynak_Table.recipe_code = FnString.IsNull(xReaderKaynak_Table["recipe_code"]);

      xKaynak_Table.recipe_name = FnString.IsNull(xReaderKaynak_Table["recipe_name"]);

     xKaynak_Table.flotte = Convert.ToDouble(xReaderKaynak_Table["flotte"]);

     xKaynak_Table.mach_name = FnString.IsNull(xReaderKaynak_Table["mach_name"]);

     xKaynak_Table.tank_name = FnString.IsNull(xReaderKaynak_Table["tankname"]);

     xKaynak_Table.start_time = FnDate.IsNull(xReaderKaynak_Table["start_time"]);

     if (xKaynak_Table.start_time == DateTime.MinValue)

    {

        xKaynak_Table.start_time = FnDate.IsNull(xReaderKaynak_Table["start_time"]);

    }

   xKaynak_Table.end_time = FnDate.IsNull(xReaderKaynak_Table["end_time"]);

   if (xKaynak_Table.end_time == DateTime.MinValue)

  {

     xKaynak_Table.end_time = FnDate.IsNull(xReaderKaynak_Table["end_time"]);

   }

   Kaynak_Table.Add(xKaynak_Table);

}    




 -  Ve sonuç olarak yukarıda yüzbinlerce verinin önbellekte oluşturulmuş kaynak tablonun içine kaydedildiği DataTable objesi tek bir insert komutuyla gönderimi aşağıdaki gibidir :


Kaynak_Table aKaynak_Table = new Kaynak_Table();

aKaynak_Table.InsertMassiveData(Kaynak_Table);








10 Kasım 2020 Salı

 

Bellek Yönetimi:

Exception of type System.OutOfMemoryException' was thrown  Hatası



C# .Net Framework Uygulamalarında karşılaşılan bu hatanın tespiti için önbelleğin aktif ve yoğun şekilde kullanılması gereken while, for each gibi döngülerin try ... except boluğu içerisine taşınması gerekir. 
Bellek yönetimi ve kullanılmayan ya da sürekli biriken önbellekte alan kaplayan nesnelerin temizlenmesi işlemleri için özellikle timer içerisinde kullanılan ve belirli aralıklarla çalışan döngülerin kontrol edilmesi gerekir.

Daha sonra bu tür hataların, döngüde aşırı veri yığılması sonucu PC ram belleğinin yetersiz olduğu durumlarda exception bloğuna düştüğü görülecektir. Buna önlem olarak yazılımsal olarak döngüye girmeden önce GC.Collection() metodu ile referansı olmayan önbellekte birikmiş nesneler temizlenerek bellek boşaltma yöntemi kullanılabilir.
  

5 Ekim 2020 Pazartesi

SQL SERVER ile DBLİNK OLUŞTURMA

 

MsSQL ile Firebird dbLink Oluştuma :


            MsSQL üzerinden Firebird tablolarına erişim sağlayabilmek için SQL Server ile Firebird Server arasında veri trafiğini sağlayacak bir link oluşturmamız gerekir. MSSQL ->Server Objects-> Linked Servers altında yeni bir sunucuya nasıl bağlanıldığının adımları aşağıdaki gibidir:



    İlk önce kullanıyor olduğumuz SQL Server sunucumuzun versiyonunu ve kaç bit ile çalıştığını aşağıdaki komutlar ile öğreniyoruz.


 -  SQL Server Version Öğrenme Komutu:  select @@VERSION


  - SQL Server Bit Desteği Öğrenme Komutu:  select serverproperty('edition')


    Yukarıda sorguladığımız SQL sunucumuza uyumlu olabilecek Firebird ODBC driver'ı   firebirdsql.org sitesinden indiriyoruz. Kullanılan SQL Server 64 bit ise  64 bitlik ODBC, MSSQL 32 bitlik ise firebird ODBC driver kurulumlarının da 32 bitlik olmasına dikkat edilmelidir. 

    32-bitlik MSSQL ile Firebird driver haberleşmesi üzerinden devam edecek olursak, aşağıdaki adımlar takip edilmelidir;

 


    -   32-bit ODBC Sistem DSN alanında FIREBIRDSRV adında Firebird/InterBase driver tanımladım.















 -  SQL Server tarafında ise aşağıdaki işlemleri yapıyoruz. Server Objects->Linked Servers üzerine gelerek New Linked Server ile yeni bir dbLink bağlantısı oluşturuyoruz.




  oluşturduğumuz bağlantı ayarları aşağıdaki görsellerdeki gibidir. Oluşturmuş olduğumuz 'FIREBIRDSRV' dbLink özelliklerine tıklayarak General penceresinde yer alan Provider seçeneğini 'Microsoft OLE DB Provider for ODBC Drivers' olarak seçiyoruz. Product Name ve Data Source seçeneklerinin ise ODBC ayarlarını yapmış olduğumuz firebird driver ismi ile aynı olması gerekir.



 son olarak bağlantının doğruluğunu test etmek için görseldeki gibi Test Connection sekmesine tıklıyoruz.










 MsSQL ile dbLink Firebird Veritabanının Tablolarına Erişim için OPENQUERY komutu kullanılır. 



SELECT *
FROM OPENQUERY(FIREBIRDSRV , 'select * from JOBTABLE_HEADER')





















15 Eylül 2020 Salı

 

Delphi'de String - Hex Dönüştürme Fonksiyonları:



// String türdeki ifadenin Hexdecimal türüne çevirilmesi aşağıdaki gibidir.

function StringToHex(S: String): string;

var I: Integer;

begin

  Result:= '';

  for I := 1 to length (S) do

    Result:= Result+IntToHex(ord(S[i]),2);

end;



// HexDecimal türdeki ifadenin String türüne çevirilmesi aşağıdaki gibidir.

function HexToString(H: String): String;

var I: Integer;

begin

  Result:= '';

  for I := 1 to length (H) div 2 do

    Result:= Result+Char(StrToInt('$'+Copy(H,(I-1)*2+1,2)));

end;


3 Eylül 2020 Perşembe

 Delphi'de cxGrid Türkçeleştirme:


 -    cxGrid filtreleme ve diğer özelliklerin türkçe olması için aşağıdaki unit' i kendi projenize ekleyebilirsiniz.

=============================&&&====================================

unit cxGridToTR;

interface

uses

 dxCore, cxGridStrs, cxFilterConsts,

  cxFilterControlStrs, cxClasses, cxGridPopupMenuConsts;

  procedure cxGridToTrk;

implementation

procedure cxGridToTrk;

begin

  { ******************************************************************** }

  { cxGridStrs }

  { ******************************************************************** }

  // scxGridRecursiveLevels = 'You cannot create recursive levels';

  cxSetResourceString(@scxGridRecursiveLevels,

    'Yinelemeli seviyeler oluşturamazsınız');

  // scxGridDeletingConfirmationCaption = 'Confirm';

  // cxSetResourceString(@scxGridDeletingConfirmationCaption, 'Onayla');

  // scxGridDeletingFocusedConfirmationText = 'Delete record?';

  cxSetResourceString(@scxGridDeletingFocusedConfirmationText,

    'Kayıt silinsin mi ?');

  // scxGridDeletingSelectedConfirmationText = 'Delete all selected records?';

  cxSetResourceString(@scxGridDeletingSelectedConfirmationText,

    'Seçili tüm kayıtlar silinsin mi ?');

  // scxGridNoDataInfoText = '<No data to display>';

  cxSetResourceString(@scxGridNoDataInfoText, '<Gösterilecek kayıt yok>');

  // scxGridNewItemRowInfoText = 'Click here to add a new row';

  cxSetResourceString(@scxGridNewItemRowInfoText,

    'Yeni satır eklemek için buraya tıklayın');

  // scxGridFilterIsEmpty = '<Filter is Empty>';

  cxSetResourceString(@scxGridFilterIsEmpty, '<Filtre boş>');

  // scxGridCustomizationFormCaption = 'Customization';

  cxSetResourceString(@scxGridCustomizationFormCaption, 'Özelleştirme');

  // scxGridCustomizationFormColumnsPageCaption = 'Columns';

  cxSetResourceString(@scxGridCustomizationFormColumnsPageCaption, 'Sütunlar');

  // scxGridGroupByBoxCaption = 'Drag a column header here to group by that column';

  cxSetResourceString(@scxGridGroupByBoxCaption,

    'Gruplamak istediğiniz kolonu buraya sürükleyin');

  // scxGridFilterCustomizeButtonCaption = 'Customize...';

  cxSetResourceString(@scxGridFilterCustomizeButtonCaption, 'Özelleştir');

  // scxGridColumnsQuickCustomizationHint = 'Click here to select visible columns';

  cxSetResourceString(@scxGridColumnsQuickCustomizationHint,

    'Görünür sütunları seçmek için tıklayın');

  // scxGridCustomizationFormBandsPageCaption = 'Bands';

  cxSetResourceString(@scxGridCustomizationFormBandsPageCaption, 'Bantlar');

  // scxGridBandsQuickCustomizationHint = 'Click here to select visible bands';

  cxSetResourceString(@scxGridBandsQuickCustomizationHint,

    'Görünür bantları seçmek için tıklayın');

  // scxGridCustomizationFormRowsPageCaption = 'Rows';

  cxSetResourceString(@scxGridCustomizationFormRowsPageCaption, 'Satırlar');

  // scxGridConverterIntermediaryMissing = 'Missing an intermediary component!'#13#10'Please add a %s component to the form.';

  cxSetResourceString(@scxGridConverterIntermediaryMissing,

    'Bulunamayan aracı bileşen!'#13#10'Lütfen bir %s bileşeni forma ekleyin.');

  // scxGridConverterNotExistGrid = 'cxGrid does not exist';

  cxSetResourceString(@scxGridConverterNotExistGrid, 'cxGrid yok');

  // scxGridConverterNotExistComponent = 'Component does not exist';

  cxSetResourceString(@scxGridConverterNotExistComponent, 'Bileşen yok');

  // scxImportErrorCaption = 'Import error';

  cxSetResourceString(@scxImportErrorCaption, 'İçe aktarım hatası');

  // scxNotExistGridView = 'Grid view does not exist';

  cxSetResourceString(@scxNotExistGridView, 'Grid görünümü yok');

  // scxNotExistGridLevel = 'Active grid level does not exist';

 // cxSetResourceString(@scxNotExistGridLevel, 'Geçerli grid seviyesi yok');

  // scxCantCreateExportOutputFile = 'Can''t create the export output file';

//  cxSetResourceString(@scxCantCreateExportOutputFile,'Dışa aktarılacak dosya oluşturulamıyor');

  // cxSEditRepositoryExtLookupComboBoxItem = 'ExtLookupComboBox|Represents an ultra-advanced lookup using the QuantumGrid as its drop down control';

  // scxGridChartValueHintFormat = '%s for %s is %s'; // series display text, category, value


  { ******************************************************************** }

  { cxFilterConsts }

  { ******************************************************************** }


  // // base operators

  // cxSFilterOperatorEqual = 'equals';

  cxSetResourceString(@cxSFilterOperatorEqual, 'eşit');

  // cxSFilterOperatorNotEqual = 'does not equal';

  cxSetResourceString(@cxSFilterOperatorNotEqual, 'eşit değil');

  // cxSFilterOperatorLess = 'is less than';

  cxSetResourceString(@cxSFilterOperatorLess, 'küçük');

  // cxSFilterOperatorLessEqual = 'is less than or equal to';

  cxSetResourceString(@cxSFilterOperatorLessEqual, 'küçük veya eşit');

  // cxSFilterOperatorGreater = 'is greater than';

  cxSetResourceString(@cxSFilterOperatorGreater, 'büyük');

  // cxSFilterOperatorGreaterEqual = 'is greater than or equal to';

  cxSetResourceString(@cxSFilterOperatorGreaterEqual, 'büyük veya eşit');

  // cxSFilterOperatorLike = 'like';

  cxSetResourceString(@cxSFilterOperatorLike, 'içerir');

  // cxSFilterOperatorNotLike = 'not like';

  cxSetResourceString(@cxSFilterOperatorNotLike, 'içermez');

  // cxSFilterOperatorBetween = 'between';

  cxSetResourceString(@cxSFilterOperatorBetween, 'arasında');

  // cxSFilterOperatorNotBetween = 'not between';

  cxSetResourceString(@cxSFilterOperatorNotBetween, 'arasında değil');

  // cxSFilterOperatorInList = 'in';

  cxSetResourceString(@cxSFilterOperatorInList, 'içinde olan');

  // cxSFilterOperatorNotInList = 'not in';

  cxSetResourceString(@cxSFilterOperatorNotInList, 'içinde olmayan');

  // cxSFilterOperatorYesterday = 'is yesterday';

  cxSetResourceString(@cxSFilterOperatorYesterday, 'dün');

  // cxSFilterOperatorToday = 'is today';

  cxSetResourceString(@cxSFilterOperatorToday, 'bugün');

  // cxSFilterOperatorTomorrow = 'is tomorrow';

  cxSetResourceString(@cxSFilterOperatorTomorrow, 'yarın');

  // cxSFilterOperatorLastWeek = 'is last week';

  cxSetResourceString(@cxSFilterOperatorLastWeek, 'geçen hafta');

  // cxSFilterOperatorLastMonth = 'is last month';

  cxSetResourceString(@cxSFilterOperatorLastMonth, 'geçen ay');

  // cxSFilterOperatorLastYear = 'is last year';

  cxSetResourceString(@cxSFilterOperatorLastYear, 'geçen sene');

  // cxSFilterOperatorThisWeek = 'is this week';

  cxSetResourceString(@cxSFilterOperatorThisWeek, 'bu hafta');

  // cxSFilterOperatorThisMonth = 'is this month';

  cxSetResourceString(@cxSFilterOperatorThisMonth, 'bu ay');

  // cxSFilterOperatorThisYear = 'is this year';

  cxSetResourceString(@cxSFilterOperatorThisYear, 'bu sene');

  // cxSFilterOperatorNextWeek = 'is next week';

  cxSetResourceString(@cxSFilterOperatorNextWeek, 'gelecek hafta');

  // cxSFilterOperatorNextMonth = 'is next month';

  cxSetResourceString(@cxSFilterOperatorNextMonth, 'gelecek ay');

  // cxSFilterOperatorNextYear = 'is next year';

  cxSetResourceString(@cxSFilterOperatorNextYear, 'gelecek sene');

  // cxSFilterAndCaption = 'and';

  cxSetResourceString(@cxSFilterAndCaption, 've');

  // cxSFilterOrCaption = 'or';

  cxSetResourceString(@cxSFilterOrCaption, 'veya');

  // cxSFilterNotCaption = 'not';

  cxSetResourceString(@cxSFilterNotCaption, 'değil');

  // cxSFilterBlankCaption = 'blank';

  cxSetResourceString(@cxSFilterBlankCaption, 'boş');

  // // derived

  // cxSFilterOperatorIsNull = 'is blank';

  cxSetResourceString(@cxSFilterOperatorIsNull, 'boşluk');

  // cxSFilterOperatorIsNotNull = 'is not blank';

  cxSetResourceString(@cxSFilterOperatorIsNotNull, 'boşluk değil');

  // cxSFilterOperatorBeginsWith = 'begins with';

  cxSetResourceString(@cxSFilterOperatorBeginsWith, 'ile başlayan');

  // cxSFilterOperatorDoesNotBeginWith = 'does not begin with';

  cxSetResourceString(@cxSFilterOperatorDoesNotBeginWith, 'ile başlamayan');

  // cxSFilterOperatorEndsWith = 'ends with';

  cxSetResourceString(@cxSFilterOperatorEndsWith, 'ile biten');

  // cxSFilterOperatorDoesNotEndWith = 'does not end with';

  cxSetResourceString(@cxSFilterOperatorDoesNotEndWith, 'ile bitmeyen');

  // cxSFilterOperatorContains = 'contains';

  cxSetResourceString(@cxSFilterOperatorContains, 'içeren');

  // cxSFilterOperatorDoesNotContain = 'does not contain';

  cxSetResourceString(@cxSFilterOperatorDoesNotContain, 'içermeyen');

  // // filter listbox's values

  // cxSFilterBoxAllCaption = '(All)';

  cxSetResourceString(@cxSFilterBoxAllCaption, 'Hepsi');

  // cxSFilterBoxCustomCaption = '(Custom...)';

  cxSetResourceString(@cxSFilterBoxCustomCaption, 'Özel...');

  // cxSFilterBoxBlanksCaption = '(Blanks)';

  cxSetResourceString(@cxSFilterBoxBlanksCaption, '(Boş olanlar)');

  // cxSFilterBoxNonBlanksCaption = '(NonBlanks)';

  cxSetResourceString(@cxSFilterBoxNonBlanksCaption, '(Boş olmayanlar)');


  { ******************************************************************** }

  { cxFilterControlStrs }

  { ******************************************************************** }


    // // cxFilterBoolOperator

    // cxSFilterBoolOperatorAnd = 'AND';        // all

    cxSetResourceString(@cxSFilterBoolOperatorAnd, 'VE');

    // cxSFilterBoolOperatorOr = 'OR';          // any

    cxSetResourceString(@cxSFilterBoolOperatorOr, 'VEYA');

    // cxSFilterBoolOperatorNotAnd = 'NOT AND'; // not all

    cxSetResourceString(@cxSFilterBoolOperatorNotAnd, 'VE DEĞİL');

    // cxSFilterBoolOperatorNotOr = 'NOT OR';   // not any

    cxSetResourceString(@cxSFilterBoolOperatorNotOr, 'VEYA DEĞİL');

    // //

    // cxSFilterRootButtonCaption = 'Filter';

    cxSetResourceString(@cxSFilterRootButtonCaption, 'Filtre');

    // cxSFilterAddCondition = 'Add &Condition';

    cxSetResourceString(@cxSFilterAddCondition, '&Koşul ekle');

    // cxSFilterAddGroup = 'Add &Group';

    cxSetResourceString(@cxSFilterAddGroup, '&Grup ekle');

    // cxSFilterRemoveRow = '&Remove Row';

   cxSetResourceString(@cxSFilterRemoveRow, '&Satır kaldır');

   // cxSFilterClearAll = 'Clear &All';

   cxSetResourceString(@cxSFilterClearAll, 'Hepsini &temizle');

    // cxSFilterFooterAddCondition = 'press the button to add a new condition';

    cxSetResourceString(@cxSFilterFooterAddCondition,

      'yeni koşul eklemek için tuşa basın');

    // cxSFilterGroupCaption = 'applies to the following conditions';

    cxSetResourceString(@cxSFilterGroupCaption, 'aşağıdaki koşulları uygulayın');

    // cxSFilterRootGroupCaption = '<root>';

    cxSetResourceString(@cxSFilterRootGroupCaption, '<kök>');

    // cxSFilterControlNullString = '<empty>';

    cxSetResourceString(@cxSFilterControlNullString, '<boş>');

    // cxSFilterErrorBuilding = 'Can''t build filter from source';

    cxSetResourceString(@cxSFilterErrorBuilding, 'Kaynaktan filtrelenemiyor');

    // //FilterDialog

    // cxSFilterDialogCaption = 'Custom Filter';

    cxSetResourceString(@cxSFilterDialogCaption, 'Özel filtre');

    // cxSFilterDialogInvalidValue = 'Invalid value';

    cxSetResourceString(@cxSFilterDialogInvalidValue, 'Geçersiz değer');

    // cxSFilterDialogUse = 'Use';

    cxSetResourceString(@cxSFilterDialogUse, 'Kullan');

    // cxSFilterDialogSingleCharacter = 'to represent any single character';

    cxSetResourceString(@cxSFilterDialogSingleCharacter,

      'tek karakteri temsil etmek için');

    // cxSFilterDialogCharactersSeries = 'to represent any series of characters';

    cxSetResourceString(@cxSFilterDialogCharactersSeries,

      'peş peşe karakterleri temsil etmek için');

    // cxSFilterDialogOperationAnd = 'AND';

    cxSetResourceString(@cxSFilterDialogOperationAnd, 'VE');

    // cxSFilterDialogOperationOr = 'OR';

    cxSetResourceString(@cxSFilterDialogOperationOr, 'VEYA');

    // cxSFilterDialogRows = 'Show rows where:';

    cxSetResourceString(@cxSFilterDialogRows, 'Satırları goster');    

    // // FilterControlDialog

    // cxSFilterControlDialogCaption = 'Filter builder';

    cxSetResourceString(@cxSFilterControlDialogCaption, 'Filtre hazırlayıcı');

    // cxSFilterControlDialogNewFile = 'untitled.flt';

    cxSetResourceString(@cxSFilterControlDialogNewFile, 'isimsiz.flt');

    // cxSFilterControlDialogOpenDialogCaption = 'Open an existing filter';

    cxSetResourceString(@cxSFilterControlDialogOpenDialogCaption, 'Filtre aç');

    // cxSFilterControlDialogSaveDialogCaption = 'Save the active filter to file';

    cxSetResourceString(@cxSFilterControlDialogSaveDialogCaption,

      'Geçerli filtreyi kaydet');

    // cxSFilterControlDialogActionSaveCaption = '&Save As...';

    cxSetResourceString(@cxSFilterControlDialogActionSaveCaption,

      '&Farklı kaydet');

    // cxSFilterControlDialogActionOpenCaption = '&Open...';

    cxSetResourceString(@cxSFilterControlDialogActionOpenCaption, '&Aç...');

    // cxSFilterControlDialogActionApplyCaption = '&Apply';

    cxSetResourceString(@cxSFilterControlDialogActionApplyCaption, '&Uygula');

    // cxSFilterControlDialogActionOkCaption = 'OK';

    cxSetResourceString(@cxSFilterControlDialogActionOkCaption, 'Tamam');

    // cxSFilterControlDialogActionCancelCaption = 'Cancel';

    cxSetResourceString(@cxSFilterControlDialogActionCancelCaption, 'İptal');

    // cxSFilterControlDialogFileExt = 'flt';

    // cxSFilterControlDialogFileFilter = 'Filters (*.flt)|*.flt';

    cxSetResourceString(@cxSFilterControlDialogFileFilter,

      'Filtreler (*.flt)|*.flt');


    // cxGridPopupMenuConsts

    cxSetResourceString(@cxSGridNone, 'Yok'); // 'None';

    cxSetResourceString(@cxSGridSortColumnAsc, 'Artan Sıralama');

    // 'Sort Ascending';

    cxSetResourceString(@cxSGridSortColumnDesc, 'Azalan Sıralama');

    // 'Sort Descending';

    cxSetResourceString(@cxSGridClearSorting, 'Sıralamayı Sil');

    // 'Clear Sorting';

    cxSetResourceString(@cxSGridGroupByThisField, 'Bu Alana Göre Grupla');

    // 'Group By This Field';

    cxSetResourceString(@cxSGridRemoveThisGroupItem, 'Gruplamayı Sil');

    // 'Remove from grouping';

    cxSetResourceString(@cxSGridGroupByBox, 'Gruplama Kutusu'); // 'Group By Box';

    cxSetResourceString(@cxSGridAlignmentSubMenu, 'Hizalama'); // 'Alignment';

    cxSetResourceString(@cxSGridAlignLeft, 'Sola Hizala'); // 'Align Left';

    cxSetResourceString(@cxSGridAlignRight, 'Sağa Hizala'); // 'Align Right';

    cxSetResourceString(@cxSGridAlignCenter, 'Ortalı Hizala'); // 'Align Center';

    cxSetResourceString(@cxSGridRemoveColumn, 'Sutunu Sil');

    // 'Remove This Column';

    cxSetResourceString(@cxSGridFieldChooser, 'Alan Seçiçi'); // 'Field Chooser';

    cxSetResourceString(@cxSGridBestFit, 'En Uygun Büyüklük'); // 'Best Fit';

    cxSetResourceString(@cxSGridBestFitAllColumns,

      'En Uygun Büyüklük(Bütün Sutunlar)'); // 'Best Fit (all columns)';

    cxSetResourceString(@cxSGridShowFooter, 'Alt'); // 'Footer';

    cxSetResourceString(@cxSGridShowGroupFooter, 'Grup Alt'); // 'Group Footers';

    cxSetResourceString(@cxSGridSumMenuItem, 'Toplam'); // 'Sum';

    cxSetResourceString(@cxSGridMinMenuItem, 'Minimum'); // 'Min';

    cxSetResourceString(@cxSGridMaxMenuItem, 'Maximum'); // 'Max';

    cxSetResourceString(@cxSGridCountMenuItem, 'Adet'); // 'Count';

    cxSetResourceString(@cxSGridAvgMenuItem, 'Avaraj'); // 'Average';

    cxSetResourceString(@cxSGridNoneMenuItem, 'Yok'); // 'None';

  end;

end.




2 Eylül 2020 Çarşamba


 Delphi'de Sayı Formatlama:

      

      Delphi'de tanımlanan veya girilen sayıların istenilen basamaklara bölünerek formatlanabilmesi için aşağıdaki yollardan biri kullanılabilir:


var

sayi:integer;
s:string;



sayi := 1234567;



label1.Caption:= Format('%.0n', [sayi*1.0]); // --> ' 1.234.567 '


veya


label1.Caption:= Format('%.0n', [sayi*1/0]); // --> ' 1.234.567 '


veya bir string değişkene bağlamak istersek, aşağıdaki formatlardan biri kullanılabilir;


 s := Format('%.0n', [I * 1.0]); // --> ' 1.234.567 '


 s := Format('%.0n', [I + 0.0]); // --> ' 1.234.567 '




23 Temmuz 2020 Perşembe


Firebird Bağlantı Hatası


Firebird kurulumu sonrasında delphi uygulamasını çalıştırdığımızda aşağıdaki gibi veritabanı bağlantı hatası veya veritabanı erişim hatası alıyorsak :

can't format message 13:96 -- message file C:\Program Files\HK-Software\firebird.msg not found.
unavailable database.



Firebird kurulumu sırasında sıkıntı yaşanmış olması ihtimaline karşılık, IBExpert kurulu ise sistemden kaldırılır, Firebird kaldırılır, Windows/System32/  klasöründeki gds32.dll dosyası silinir ardından firebird ve IBExpert tekrar kurulur.