Live Chat Software
Emre CIRIK | C# , VB.NET , Delphi 7 , ASP.NET, SQL Server , T-SQL, IOS , X Code, Visual Studio.NET , Windows Mobile, Windows CE, Windows Phone 7-8 ,C++, C

Sql Server 2008 Replication

by EMRCRK 31. May 2011 12:50

 

Merhaba arkadaşlar, size ilk olarak kısaca replication nedir açıklamak istiyorum. Replikasyon : Server-Client ( Sunucu-Istemci) mimarisinde kullanılar ve belirli objeleri senkronize etmek için kullanılar bir yöntemdir. Anlaşılacak bir örnek ile açıklamak gerekirse kötü bir örnek olucak ama akılda kalıcıda olacaktır :

Öğrencilik hayatımızda kopya çekmek için kullanılan yöntemlerden bahsedeceğim, dersine çalışmayan bir öğrenci ( İstemci - Client) , dersin kurdu olmuş zeki öğrenci ( Sunucu - Server ) , kopya çekmek için kullanılan yöntem dağıtıcı(distributor) , sorunun cevabı olan bilgi ( eşitlenmek istenen kayıtlar olsun ) . Çalışkan öğrenci herhangi bir sorunun cevabını yazdığı zaman, ufak bir kağıda yazıp bunu diğer arkadaşına verirse ve arada kağıt iletişimini yapan arkadaşımız (distrubitor) istemci olan arkadaşlarımıza sorunun cevabını verirse bilgileri eşitlemiş olurlar =) Kısaca özeti budur.

 

Günlük hayatta nasıl ihtiyaç olur , bir banka düşünün arkadaşlar internet sürekli aktif olan birşey değil malum bizim ülkemizde bunun sıkıntısı var. Bankalar yapılan her işlemi ana veritabanında diğerleri ile birlikte eşitlemek ister. Örnek : X bankasının A şehrindeki şubesi , X bankasının B şehrindeki şubesi ve X bankasının merkezi, burada çift taraflı etkileşim söz konusudur aslında fakat ben basitten alıcam. X bankasının merkezi dağıtıcı veritabanıdır. A ve B şehrindekiler bağlantı olduğunda bilgileri alır ve bilgiler gün içinde işlenir. Daha sonra akşam olduğunu düşünün , belirli bir zamanda çalışan görev ( Biz buna Job diyoruz ve görevi çalıştıran servis SQL Server Agent) A ve B bankasında  yapılan işlemleri merkez veritabanına eşitler , bu sayede bilgilerin güncelliği söz konusu olur . Tam aktarırken internet kesilirse bilgi kaybı olmaz çünkü arada Transaction çalışır.

 

Sql Server 2008 Örnek Replication :

Arkadaşlar benim 2 tane SQL server 2008 instance name 'im mevcut. Birtanesi MSSQLSERVER2008N ve MSSQLSERVER2008 .

İlk olarak kendime ReplicationDB isimli veritabanını oluşturup , içine sadece isim ve id alanını ekliyorum her iki server 'a.

Şimdi replication için ilk olarak dağıtıcımı tanımlayacağım . Bunun için  SQl Server Object Explorer üzerinde

Replication a sağtıklıyoruz->Configure Distribution diyoruz->Çıkan uyarı kasik kurulum sistemini uygulayın (Next,Next,Next) :D . Bize kendi server üzerindemi yada başka server üzerindemi dağıtıcıyı kurmak istediğimizi soruyor. Biz kendi serverımız üzerinde kuracağız. ->

 

Next diyoruz -> SQl Server Agent'ın otomatik mi yoksa manuel mi başlayacağını soruyor , ben otomatik seçtim ki, otomatik önerilir . -> Sonra bizden SnapShot klasörü isteyecek, bu klasörde SQL Server veritabanına ait görüntüleri tutmaktadır. İleri deyin yada klasör belirleyin .-> Daha sonrasından distrubitor veritabanı ve log dosyaları için klasör soruluyor-> Sonra tekrar Next diyoruz ve Finish diyoruz. Kurulum tamamlandıktan sonra hangi veritabanını publish etmek istediğimizi ayarlayacağız. Replication altında bulunan Local Publications sağ tıklayın  ve New Publication diyin.

Sonra publish etmek istediğimiz veritabanını "ReplicationDB" yi seçin.ileri diyin , bize publication tiplerini gösterir bunların ( Snopshot,Transactional,Merge) çok detayına inmeden kısaca açıklamak gerkirse
Snopshot : Script alınarak bulk insert yapılan bir türdür. Burada , her değişiklik olduğunda veri tabanı karşı tarafta baştan oluşturulur.

Transactional :Yapılan değişiklikleri log dosyasına bakarak aktarır .

Merge : Çift taraflı etkileşim ve yapılan değişiklikleri iletir.

Ben Merge yi seçip ileri diyorum. Sonra hangi SQL Server versiyonu ile replice etmek istediğim çıkıyor , 2008 i seçiyorum ileri diyorum , sonra hangi Objeleri replice etmemi soruyor ve ben oluşturduğum tabloyu seçiyorum.

 


 


Job zamanlamasını ayarlaya bilirsiniz .

Burası bu kadar .

 

Sıra geldi istemci tanımına. Onuda Local Publications a sağ tıklayıp New Local Subscription diyoruz. ileri diyip kendi veritabanımızdaki Publication u seçip ileri diyoruz

 

Bu ekranda replice edilecek diğer server ve veritabanını seçiyoruz.Daha sonra çıkan uyarılara ileri diyip geçebilirsiniz. Detaylarını araştırısınız.

 

Ve artık işlemimiz tamamlandı. Şimdi tablolarımıza bakarsak rowguid isimli bir alan eklendiğini göreceğiz.




 

Umarım anlaşılmıştır arkadaşlar, çok basit ve kolay detaylarını birazdaha araştırmanızı tavsiye ederim çünkü iş hayatında muhakkak birgün lazım oluyor :) Bir başka yazıda görüşürüz inşallah.

C# ve VB.NET ile Runtime'da Buton Ekleme ve Buton'a event Bağlama

by EMRCRK 14. May 2011 12:50

Arkadaşlar VB.NET ile C#Arasında  bir takım farklılıklar vardır. Bunlardan biriside Form kontrollerine bağlanan evetlerdir. Şimdi aşağıda 2 Örnek kod yazacağım ve ikisininde yaptığı iş aynıdır.

C# :

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharpAddRuntimeObject
{
    public partial class FrmMain : Form
    {

        public FrmMain()
        {
            InitializeComponent();
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            Button btn;
            int x = 10, y = 0;
            int sizeH=25, sizeW=25;
            for (int i = 0; i < 10; i++)
            {
                y = 0;
                for (int j = 0; j < 5; j++)
                {
                    btn = new Button();
                    btn.Location = new Point(x, y);
                    btn.Size = new Size(sizeW, sizeW);
                    btn.Name = "btn" + i.ToString()+j.ToString();
                    btn.Text = "Buton " + i.ToString() +"-"+ j.ToString();
                    btn.Click += new EventHandler(btn_Click);
                    this.Controls.Add(btn);
                    y += 30;
                }
               
                x += 30;
            }
        }

        void btn_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            MessageBox.Show(btn.Text);
        }
    }
}

 

 

VB.NET : 

 

 

Public Class FrmMain

    Private Sub FrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim btn As Button
        Dim x, y As Integer : Dim sizeW, sizeH As Integer
        x = 10 : y = 0 : sizeW = 25 : sizeH = 25

        For i = 1 To 10
            y = 0

            For j = 1 To 5
                btn = New Button()
                btn.Location = New Point(x, y)
                btn.Size = New Size(sizeW, sizeH)
                btn.Name = "btn" + i.ToString() + j.ToString()
                btn.Text = "Buton " + i.ToString() + "-" + j.ToString()
                AddHandler btn.Click, AddressOf Me.btn_Click
                Me.Controls.Add(btn)
                y = y + 30
            Next

            x = x + 30
        Next

    End Sub



    Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim btn As Button = sender
        MsgBox(btn.Text)
    End Sub

End Class

 

AddRuntimeObject.rar (96,76 kb)

Tags: , , , ,

CSharp | VB.NET

Multi Thread - Thread Nedir ? Ne işe yarar ? Nerede Kullanırım

by EMRCRK 12. May 2011 13:07

Arkadaşlar, bu konu geniş kapsamı olan bir konu fakat ben sizlere özet geçerek anlatacağım. 

Bildiğimiz üzere DOS gibi işletim sistemlerinde ve o güne ait işlemcilerde aynı anda sadece 1 program çalıştırıla biliyordu. Günümüze örnek vermek gerekirse , Windows altında notepadda yazı yazarken , internet explorer 'ı nızı kullanamadığınızı düşünün . İşte bu gibi sistem çalışma mantığı single processing (tek işlem) dir. 

Baktığınız zaman günümüzde işletim sistemleri , cep telefonları bile aynı anda birden fazla uygulama açabiliyor. Ben telefonda müzik dinlerken mesaj yazabiliyorum . Bu çalışma mantığı ise Multi-Processing( Çoklu işlem) dir.

 

Visual Studio gibi güçlü ve multi processing bulunan bir ortamda olupta , multi-processing programlama tekniğini öğrenmemek olmaz diyorum ve konuya yavaştan girelim.

Process (İşlem) = CPU Üzerinde çalışan tek bir program işlem olarak adlandırılır.

Thread (İşlem Parçacığı - Alt İşlem) = Bir Process içinde yaptırılması gereken , alt yordamlar(metot,fonksiyon) çalıştırılması işlemine denir. Örnek : Visual Studio biz kod yazarken , arka planda kod hata yakalama işlemini yapar.

 

.NET Platformu altında Multi Processing işlemleri 

 

.NET 'te Thread 'ler System.Threading namespaces(isim uzayı) altında toplanmıştır ve alt class(sınıflara) bölünmüştür.

 

Thread'leri kullanmak için projenize ilk önce namespaces'i eklemek gerekir .

Bu ilk örneğimiz , nasıl bir hata ile karşılaşabileceğimizi görmek içindir.

private void btnError_Click(object sender, EventArgs e)
        {
            Thread thrTest;// Thread Tanımlıyoruz
            thrTest = new Thread(new ThreadStart(TestFonk));
 // Thread nesnesini oluşturup, hangi alt metodu çağıracağını belirliyoruz
            thrTest.Start();//Thread'i başlatıyoruz
            for (int i = 0; i < 100; i++)
            {
                lstItems.Items.Add("butona tıklandı.");  
// Listbox kontrolüne döngü boyunca öğe ekletiyoruz

            }
            lstItems.Items.Add("...");           
   
        }


         void TestFonk()                              
        {
            for (int i = 0; i < 10; i++)
            {
// çalışmakta olan işlem ise , belli bir süre sonra
// buton click evet i içindeki döngü ile çakışarak
                Thread.Sleep(1000);
                lstItems.Items.Add("Fonksiyon yazıyor!");
 // Tam bu noktada bir hata verir :
 // Cross-thread operation not valid: 
//Control 'lstItems' accessed from a thread other than
// the thread it was created on.
             
            }
            lstItems.Items.Add("Fonksiyon bittii!");
            
        }

 

Gördüğünüz üzere almış olduğumuz bu hata bize aynı anda 2 döngünün bir listbox kontrolüne öğe ekleyemeyeceğini gösterir.Bu tip bir uygulama tabiki çok kullanılmaz ben şahsen bu hatayı görmeniz için uğraştım. Fakat bu hatayı böyle bir uygulama değilde daha çok seriport nesnesi , tcplistener nesnesi ni kullanırken karşılaşma olasılığınız çok yüksektir. Örnek veriyorum , bizzat yaşadığım bir örnektir.

RFID cihazına bir protokol yazmaya çalıştığımda, seriporttan o cihaza ait komutları gönderip sonrada bana verdiği cevapları dinliyordum. Tag üzerine bilgi yazarken güzel sıkıntı yoktu , fakat tag üzerinden bilgi okurken sıkıntı oldu. Çünkü datarecived olayı içerisinde ben hem

seri porttan gelen bilgiyi okuyup aynı anda onu textbox üzerine yazmak istediğimde buna benzer bir hata ile karşılaştım. Çözümü asenkron fonksiyon çağırma tekniğini kullanarak hallettim.

Asenkron Programlama , belirli bir kod parçasını arka planda özel bir thread açarak, ana thread'ten bağımsız bir biçimde çalışmasını sağlar.

 

Hemen seri port uygulamam ile ilgili örnek kodumuda yazıyorum...

 

delegate void WriteTextBox(string data);
        //Delegemizi tanımlıyoruz

        public FrmMain()
        {
            InitializeComponent();
        }


         private void spTest_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
         {
             Thread.Sleep(500);//500mili saniye bekletiyoruz
             string m_spData = spTest.ReadExisting();//gelen datayı değişkene atıyoruz
             m_spData = m_spData.Trim();//boşlukları kaldırıyoruz
             this.BeginInvoke(new WriteTextBox(sp_DataReceived), new object[] { m_spData });//Buradada textbox ı dolduracak metodu çağırıp , parametremizi veriyoruz.
         }
         private void sp_DataReceived(string data)
         {
             txtDataRecived.Text = data;
         }

 

 

 

Kodun içeriğine bakarsak arkadaşlar gayet basit ve kolay olduğunu görüyoruz. Fakat anlamadığınız noktalar muhakkak olabilir, özellikle yeni programlamaya başladıysanız yada ısınma turlarındaysanız. Çünkü delegete yapısı nesne tabanlı programlamanın en önemli özelliklerindendir . Eventlerin oluşmasında birer bir delegete ler kullanılır. Bununla ilgili ileride bir örnek yayınlarım. Thread'konusunu ise ben genel olarak bu şekilde anlattım. Ama bu konuyu daha kapsamlı ve detaylı daha anlaşılır öğrenmeniz için arkadaşlar muhakkak işlemcilerin ve işletim sisteminin  , işlemleri hangi sıralarda ne ölçüde hangi mantıkta çalıştırdığını biraz anlamanız gerekmektedir. Thread'in bir çok özelliği mevcuttur , windows görev yöneticisini incelerseniz işlemönceliği gibi ,işlem durumu , işlem adı gibi birçok özelliği mevcuttur. Farklı teknikler üzerine kullanılabilir. Gerekli kaynakları internet üzerinde gayet güzel açıklanmış şekilde bulabilirsiniz, kafanıza takılan sorularınız için iletişime geçebilirsiniz.

Umarım faydalı olmuştur...

Örnek Uygulama  ( Sample Application ) :

ThreadExample.rar (37,58 kb)

Programlama Dili Kategorileri

by EMRCRK 6. May 2011 13:30

Arkadaşlar bu benim Programlama 2 ödevimdir. Biraz araştırmalar yaptım ve sizlerle paylaşmak istedim. Hocam görürsede umarım kızmaz :) . 

 

 

Kategoriler [3] 

v  1  Array languages   v  2  Aspect-oriented languages  v  3  Assembly languages  v  4  Authoring languages

v  5  Command line interface languages  v  6  Compiled languages v  7  Concurrent languages  v  8  Curly-bracket languages

v  9  Dataflow languages  v  10  Data-oriented languages v  11  Data-structured languages v  12  Declarative languages

v  13  Esoteric languages v  14  Extension languages v  15  Fourth-generation languages 

 v  16  Functional languages

o    16.1  Pure

o    16.2  Impure

v  17  Interactive mode languages  v  18  Interpreted languages v  19  Iterative languages v  20  List-based languages – LISPs

v  21  Little languages v  22  Logic-based languages v  23  Machine languages v  24  Macro languages v  25  Metaprogramming languages  v  26  Multiparadigm languages v  27  Numerical analysis

v  28  Non-English-based languages

v  29  Object-oriented class-based languages

o    29.1 Multiple dispatch

o    29.2 Single dispatch

v  30  Object-oriented prototype-based languages  v  31  Off-side rule languages  v  32  Procedural languages

v  33  Reflective languages  v  34  Rule-based languages v  35  Scripting languages

v  36  Stack-based languages  v  37  Synchronous languages v  38  Syntax handling languages v  39  Visual languages

v  40  Wirth languages  v  41  XML-based languages


 

 

Temel Kategoriler

Yüksek Seviyeli Diller, Düşük Seviyeli Diller olarak ayrılır. Bunlar dışında ise şu şekilde kategorize edebiliriz :

1.Nesne Tabanlı Programlama Dilleri

2.Makine Dilleri

 3.Script Dilleri

4.Makro Dilleri

5.Veritabanı Dilleri

6.Fonksiyonel Diller

7.Prosedürel Diller

8.Mantıksal Diller

9.Assembly

 

Aslında dikkat edersek en başta 3.kaynaktan almış olduğum kategoriler bir biri ile hep ilişkilidir. 41 çeşit kategorize edile bilir. Ben lacivert renk ile yazdığım kategorileri kendi tecrubem ve eski araştırmalarıma dayanarak yazdım.

Nesne Tabanlı diller : C#,C,Objective – C,Java  örnek verile bilir. Bu diller içerisindede Fonksiyon,Prosedürler kullanılır ve Yüksek seviyeli dillerdir. Kullanımları kolaydır. Gerçek dünya daki nesneleri yazılımsal olarak ifade ederek büyük problemleri çözmemize yarar. Örnek olarak basit ama bir yazıcı nesnesini kodsal olarak ifade edebiliriz. Nesne tabalı diller genel olarak static yapıda olan dillerdir. Biz programlama dillerini alt kategorilere ayrırarak çoğalta biliriz. Fakat şuan .NET Framework teknolojisi sayesinde C#programlama dili dinamik şekilde kullanıla biliyor. [5] 

 

Makine Dilleri , çok zor ve en düşük seviyeli dillerdir.  CPU üzerinden direk işlenir.[1]  Örnek :“10000101”

Şeklinde kodlar ile ifade edilir.

Assembly dilleri 2. Nesil dillerdir . Makine kodu yazmanın zorluğundan sonra ilk kolay dildir.

Script dilleri , gününüzün popüler dil kategorilerindendir. Php,asp,ASP.NET,Javascript bu tür dillere örnek olarak verilebilir. Ayrıca script dilleri dinamik diller olarakda ifade edilir.

Makro dilleri , makro dillerine örnek C verilebilir yada VB diye düşünüyorum . Çünkü excelde,accessde makrolar tanımlana biliyor .

 

Veritabanı dilleri , T-SQL buna en güncel ve güzel örnektir. Bu dil sayesinde prosedürler,fonksiyonlar rahatlıkla tanımlana bilir . Kolay,esnek ve güzeldir. Veritabanı sistemlerine göre bu dilin bazı özellikleri vs. Değişe bilir. MySQL,Oracle ‘ın yapısında MS-SQL in kullandığı T-SQL arasında farklılıklar mevcuttur.

 

Fonksiyonel diller, bu dillerede örnek olarak Microsoft’un yeni dili olan F# en güncel örnektir.  Diğer dillerden Scala(Java),Lisp örnek verilebilir.

Prosedürel diller , C , C++, C# ,Delphi gibi dillerle yeterince procedure ve fonksiyon yazıla biliyor.

Mantıksal diller , genellikle yapay zeka programlamada kullanılır bu diller. Örnek olarak ALF,Curriy,Prolog verilebilir.

 

 

  

 

KAYNAKLAR

[1] http://www.slideshare.net/atillaozgur/programlama-dilleri-3623651

[2] http://www.cs.oberlin.edu/~jwalker/languageCategories.html

[3] http://en.wikipedia.org/wiki/List_of_programming_languages_by_category

[4] http://openmap.bbn.com/~kanderso/aop/AOP-thoughts.html

[5] http://www.emrecirik.com/post/2011/04/03/C-40-Dynamic-Visual-Studio-2010-NET-Framework-4-COM.aspx

[6] http://www2.parc.com/csl/groups/sda/publications/papers/Kiczales-ECOOP97/for-web.pdf 



PROGRAMLAMA DİLLERİ.doc (199,00 kb)

IPHONE 4 G GEVEY

by EMRCRK 5. May 2011 10:38

Arkadaşlar iPhoneAlSat 'da iphone 4 gevey donanımları satılmaktadır. Kesinlikle çalışıyor. Piyasada bir çok gevey mevcut fakat çalışıp çalışmama konusunda sıkıntılar var. Denendi ve görüldü ;). Lock'lu iPhone 4'ler bu donanım sayesinde çalışmaktadır.

Tags: , , ,

Java 4 Ever Video

by EMRCRK 5. May 2011 00:59

Arkadaşlar , az önce biraz kaçamak yaptım bir kaç siteyi dolaşırken çok güzel bir video ya rastladım. Bu kısa video'nun konusu açık kaynak yazılımlarla ilgili. :) Filmi anlatmak istemiyorum izlemelisiniz kesinlikle . 

 

This video deals with the open-source software. Very enjoyable and I recommend a nice video to watch. 

 

Link : Java 4 ever

Tags:

Veri Tabanı Tasarımı ve Programlama - Giriş

by EMRCRK 30. April 2011 15:01

Arkadaşlar bu konu birkaç bölümden oluşacak. Çünkü veritabanı  tasarlama,onu programlama ve üzerine arayüz yazılması gibi katmansal yapıda olması gereken bir sistemdir. Şimdi genelde biz millet olarak zeki bir milletiz fakat günü kurtaran,basit ve sıradan çözümler üretmektede üstümüze yoktur. Şimdiye kadar bir çok veritabanı sistemi gördüm, program veri tabanı sistemlerini inceledim ama şunlar bir kaç program dışında hep eksikti. 

1-) Normalizasyon

2-) Procedure , Function , Trigger gibi işleri kolaylaştıracak ve yazılan arayüz programının yükünü azaltacak sistemler yok.

3-) Veri tabanı planlama , ilişkilendirme yada diagram diyelim bu tarz bir sistemler mevcut değil.

 

Şimdi arkadaşlar ciddi manada bir program yazmak istiyorsak ve bunun mümkün olduğunca performanslı ve güvenilir çalışması gerekiyorsa ilk önce veri tabanını tasarlamak gerekir. Veri tabanını tasarlar kende yukarıdaki 3 kuralı ( 1. kural içerisinde 5 alt kural mevcuttur) mümkün olduğunca uygulamakta fayda var. 

Örnek veriyorum bir stok takip sistemi yazılacak ( Çok basit bir örnek ama hala günümüzde doğru düzgün birşey göremedim) olsun.

 

1.si benim stoklar için bir index alan (tekrarsız alan) belirtmem gerek. Belki ilerde stok kodu değişir,stok adı değişir.Bunları düşünerek hareket etmek gerekir. Daha bir sürü olasılık var ama aklıma gelmiyor. ( Not: Stok kodu değiştirmek  çok gerekmedikçe önerilmez. )

2.si stok giriş-çıkış hareketlerini tutan bir tablo tasarlamakmı gerek yoksa ben stok tablomda bakiye tutarım her hareket işlemindede güncellerim demek mi? Bu noktada tabikide hareket bilgisi tutucaksınız ama bir daha kalkıpta stok tablosunda gidip bakiye güncellemek çok saçma birşey. Bunun yerine hareket tablomda özel alanlar belirtirim TIP gibi. Tip 1 ise giriş hareketi , 2 ise çıkış hareketi derim ve bunun için bir view tasarlarım yada function yazarım ki mantıklısı budur. Bana ilgili stok referansımı verdiğimde o stoğun bakiyesini versin. Tüm giriş ve çıkış hareketlerinin farkını alan bir fonksiyon. Bunu program üzerindede yaparsınız ama SQL hızlıdır. Ve bu tip işlemleri SQL üzerinde yaparsanız programdan daha fazla verim alırsınız.

3.sü bir stok giriş hareketinde stokğun hangi depoya girdiğini nereden geldiğini vb. bilgileri barındıran tablolara muhakkak ihtiyaç olacaktır. Bunları o tablolara bir şekilde insert yada update yapmak gerekir. Bu noktadada trigger yazmak mantıklıdır. Fakat stok hareket tablosuna bilgi yazarken bunu triggerla yapamıcağımıza göre procedure ile yapıcaz ve bu tablomuz için inserted trigger ı yazarsak dediğimiz işlem harika bir şekilde güzel olacaktır.

4.sü tekrarlı bilgilerimizi önlemek amaçlı illaki index alanları belirtmemiz gerekir.

5.si Tablo alanlarınızın mümkün olduğunca düzgün olmasına özen gösterin. Örnek içeri sadece tam sayı şeklinde bilgi yazılıcak bir alana gidipte float veri tipini vermek çok saçmadır. Bu aynı boxing ve unboxing işlemlerine benzer. 

6.sı Viewlarınızı raporlamalar için kullanın.

7.si SQL TRANSACTION kullanmayı sakın unutmayın. Bu bir insert yaparken heleki ilişkili tablolar arası insert yaparken bir tabloyu yazıp diğerinde hata verirse işlemleri geri almak ve veri güvenliği için süper bir çözümdür.

0.sı BUNU EN SON SÖYLEDİM AMA EN BAŞTA OLMASI GEREKİR =) BİR İŞE BAŞLAMADAN ÖNCE SİZDEN NE İSTENDİĞİNİ İYİ ÖĞRENİN. NE YAPMANIZ GEREKTİĞİNİ PLANLAYIN. VE BU KURALARA UYARAK BİR ŞEMA TASARLAYIN. TAHTA KULLANIN , FİKİR ALIŞ VERİŞİNDE BULUNUN. HER TÜRLÜ OLASILIKLARI GÖZ ÖNÜNDE BULUNDURUN. 

Bu maddeleride yaz yaz bitceğini sanmıyorum. 

Konu devamında sizlerle örnek yaparak gidicez inşallah. Vakit buldukça sizlere yardımcı olmaya çalışacağım.

Tags: , , , , ,

SQL

Text Dosya birleştirici ( Text File Joiner )

by EMRCRK 28. April 2011 12:41

Merhaba arkadaşlar,size çok basit bir programdan bahsediceğim. Konu başlığındada belirtildiği gibi text dosya birleştirici. Arkadaşlar bu programa nasıl ihtiyaç duydum bugün müşterimde 105 adet text dosyada sayım bilgileri mevcuttu ve bunları tek dosyada birleştirmem gerekiyordu. Çok kolay bir program diye google dan aradım ve buldum programı. Kurdum daha sonra bir baktım ki program ücretli . Dedim nasıl olur bu programı satın alırlarmı ki alıyolarmış :) Şimdi biz bu programı cracklermiydik evet ama gerek yok. Oturup program yazmak hem ahlaki açıdan hemde bizim açımızdan daha iyidir. 

Normal şartlarda .NET platformu ile yazabileceğimiz bu porgramı bu sefer Delphi 7 de hazırladık. Çünkü Delphi ile daha hızlı programlar hazırlaya biliyorsunuz. Nuh hocam bu işi üstlendi ve tamı tamına 2 dk gibi kısa bir sürede programı hazırladı. 

 

TextBirlesTirme.rar (168,71 kb)

 

 

 


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Button2: TButton;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Procedure FindFiles(const Path, Mask: string; IncludeSubDir: boolean; Out List:TStringList);
var
  FindResult: integer;
  SearchRec : TSearchRec;
begin
  FindResult := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec);
  while FindResult = 0 do
  begin
    { do whatever you'd like to do with the files found }
    List.Add(Path + SearchRec.Name);
    FindResult := FindNext(SearchRec);
  end;
  { free memory }
  FindClose(SearchRec);
  if not IncludeSubDir then
    Exit;
  FindResult := FindFirst(Path + '*.*', faDirectory, SearchRec);
  while FindResult = 0 do
  begin
    if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
        FindFiles (Path + SearchRec.Name + '\', Mask, TRUE,List);
    FindResult := FindNext(SearchRec);
  end;
  { free memory }
  FindClose(SearchRec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
liste:TStringList;
begin
    liste:=TStringList.Create;
    FindFiles(edit1.Text+'\','*.txt',False,liste);
    Memo1.Lines.Clear;
    Memo1.Lines:=Liste;
    liste.Free;
 end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i:integer;
begin
  for i:= 0 to memo1.Lines.Count -1 do
      begin
        memo2.Lines.LoadFromFile(memo1.Lines[i]);
        memo3.Lines.Add(memo2.Text );
      end;
  memo3.Lines.SaveToFile(edit1.text+'\birlesmis.txt');
end;

end.

Tags: , ,

Delphi 7

C# 4.0 Dynamic Language Runtime

by EMRCRK 3. April 2011 10:49

Arkadaşlar bu yazımda size C# 4.0 yeniliklerinden elimden geldiğince bahsetmeye çalışacağım. Yaklaşık 2 gündür bu konu üzerinde araştırmalar yapıp denemeler uyguluyorum. .NET Framework 3.5 te takip edebildiğim en son yenilikler LINQ,var anahtar sözcüğü ve sonrasından geleceğini duyduğum Entity Framework yapıları olmuştu. Gün geçtikçe yeni şeyler çıkıyor fakat takip etmek oldukça zor oluyor heleki bir öğrenci ve çalışan bir insansanız. Ben bu konuda baya geri kaldığımı düşünüyorum. 

Arkadaşlar "Dynamic Language Runtime " IronPyhton , IronRuby gibi dinamik programlama dillerinin C# , VB.NET gibi 

statik diller ile iletişimini kurmasını sağlayan ve bu dillere dinamik özellikler kazandıran .NET alt yapısıdır.

Şimdi size hoşuma giden C# 4 özelliklerinden bahsedicem :

1-) Metotlarımızda opsiyonlu parametreler oluşturabiliyoruz.

Örnek : 

.NET Framework 3.5 

void TestMetot(string ad)

{

   Console.WriteLine("Ad : {0} ",a);

}

void TestMetot(string ad,string soyad)

{

  Console.WriteLine("Ad: {0}, Soyad: {1} ", ad,soyad);

}

Şimdi aşağıdaki koda bakın . 

.NET Framework 4.0

void TestMetot(string ad="Emre",string soyad="CIRIK")

{

      Console.WriteLine("Ad: {0}, Soyad: {1} ", ad,soyad);

}

 

Arkadaşlar ben metodumu parametre göndermeden çağrırsam eğer .NET Framework 3.5 ve öncesi için diyorum. Program bana hata verecektir. En az string tipinde 1 parametre göndermek gibi.

No overload for method 'TestMetot' takes 0 arguments

Fakat .NET Framework 4 yapısını incelediğinizde metodumu direk şu şekilde çağıra bilirim :

TestMetot() ;// Program çıktısı Ad: Emre , Soyad: CIRIK şeklinde olacaktır

 

2-) dynamik anahtar kelimesi . Bu keyword doğru yerde kullanılırsa bizim için daha hızlı sonuçlar verebiliyor, performans artışı olabilir. Şimdi dynamic başlı başına ele alınması gereken güzel bir konudur arkadaşlar. Belirli noktalarda - leri ve + ları vardır. Ben ilk başta var ile arasında ki fark varmı diye sordum kendi kendime . Bu sorumun bile başlı başına bir hata ve saçmalık olduğunu öğrendim.

"dynamic" ve "var" arasında ciddi bir fark var. Örnekle açıklamam gerekirse :

var ds=new DataSet();

şeklinde bir tanımlama yaparsam  ds DataSet e ait bütün özellikleri ,Metotlarını alır. ds. yazdığımda Clone() metodunun gelmesi gibi.

 

fakat 

dynamic ds=new DataSet(); 

şeklinde bir tanımlama yaparsam  ben ds. yazdığımda ise DataSet nesnesine ait hiç bir özellik göremem. Çünkü dynamic runtime esnasında tipini belirler.

 


        private void button1_Click(object sender, EventArgs e)
        {

            dynamic d = new ExpandoObject();
            d.Ad= "Emre";
            Console.WriteLine(d.Ad);

        }
Bunun çıktısıda Emre olucaktır. Peki dynamic burada ne yaptı . 
Programı reflectore soktuğumuzda arka planda oluşan kod :
private void button1_Click(object sender, EventArgs e)
{
    object d = new ExpandoObject();
    if (<button1_Click>o__SiteContainer0.<>p__Site1 == null)
    {
        <button1_Click>o__SiteContainer0.<>p__Site1 = CallSite<Func<CallSite, object, string, object>>
.Create(Binder.SetMember(CSharpBinderFlags.None, "Ad", typeof(Form1),
 new CSharpArgumentInfo[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
 CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) }));
    }
    <button1_Click>o__SiteContainer0.<>p__Site1.Target.Invoke(<button1_Click>o__SiteContainer0.<>p__Site1, d, "Emre");
    if (<button1_Click>o__SiteContainer0.<>p__Site2 == null)
    {
        <button1_Click>o__SiteContainer0.<>p__Site2 = CallSite<Action<CallSite, Type, object>>
.Create(Binder.InvokeMember(CSharpBinderFlags.ResultDiscarded, "WriteLine", null, typeof(Form1),
 new CSharpArgumentInfo[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.IsStaticType |
 CSharpArgumentInfoFlags.UseCompileTimeType, null), CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) }));
    }
    if (<button1_Click>o__SiteContainer0.<>p__Site3 == null)
    {
        <button1_Click>o__SiteContainer0.<>p__Site3 = CallSite<Func<CallSite, object, object>>.
Create(Binder.GetMember(CSharpBinderFlags.None, "Ad", typeof(Form1), new CSharpArgumentInfo[] 
{ CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) }));
    }
    <button1_Click>o__SiteContainer0.<>p__Site2.Target.Invoke(<button1_Click>o__SiteContainer0.<>p__Site2,
 typeof(Console), <button1_Click>o__SiteContainer0.<>p__Site3.Target.Invoke(<button1_Click>o__SiteContainer0.<>p__Site3, d));

}

Gördüğünüz üzere arkaplanda gerçekleşen kodlar obje oluştur ,string tipinde Ad özelliğini ekle ve ona "Emre" değerini ver.

3-) COM Objeleri ile iletişim 

Arkadaşlar dynamic ile COM nesneleri arasındaki iletişimde daha iyi sağlanmıştır. Örnek olarak Office Excel ve Word Uygulaması :

 

        void COMTest()
        {
         var excel = new Excel.Application();
        
         excel.Visible = true;
        excel.Workbooks.Add();                    // opsiyonlu parametre
        excel.Cells[1, 1].Value = "Process Name"// tip dönüşümü olmadan dinamik değer 
        excel.Cells[1, 2].Value = "Memory Usage"
        var processes = Process.GetProcesses().Take(10);

        int i = 2;
        foreach (var p in processes) {
            excel.Cells[i, 1].Value = p.ProcessName; 
            excel.Cells[i, 2].Value = p.WorkingSet;  
            i++;
        }
        Excel.Range range = excel.Cells[1, 1];      
        Excel.Chart chart = excel.ActiveWorkbook.Charts.
            Add(After: excel.ActiveSheet);         
        chart.ChartWizard(
            Source: range.CurrentRegion,
            Title: "Memory Usage in " + Environment.MachineName); //isim ve opsiyonal parametre
        chart.ChartStyle = 45;
        chart.CopyPicture(Excel.XlPictureAppearance.xlScreen,
            Excel.XlCopyPictureFormat.xlBitmap,
            Excel.XlPictureAppearance.xlScreen);
        var word = new Word.Application();
        word.Visible = true;
        word.Documents.Add();          // opsiyonal parametre
        word.Selection.Paste();

        }
    }

 


Visual Studio 2010 ile yaptığım örnek uygulamayı indire bilirsiniz..


DynamicDiffrenceVar.rar (54,23 kb)

 

Arkadaşlar konuyu tam olarak anlayamamış olabilirsiniz , bunu anlamak için öncelikle kendiniz denemeler yapıp breakpointler koyarak işleyişi daha iyi anlaya bilirsiniz. Visual Studio 2010'un Call Stack penceresinde daha detaylı öğrene bilirsiniz. 

Bir daha ki yazımda görüşmek üzere =)

Tags: , , , , , , ,

CSharp

Devex Grid Dışardan Filtreleme Yapılması

by EMRCRK 28. March 2011 10:46

Arkadaşlar öncelikle Devex den bahsedelim . Devex , Microsoft Visual Studio için thirdparty component geliştiren bir firmadır. Hatta bence thirdparty componentler arasında en iyisi olan bu firmanın ürünleridir. Her türlü ihtiyacımızı karşılaya bilecek niteliktedir. Raporlama,Grid Stilleri, WPF , Silverlight , Form destekli componentler oldukça kullanışlı ve görüntü açısından çok hoştur. En basit programı bile çok şık hale getirebilir.

Download

Size bu yazımda anlatacağım şeyden bahsedeyim. Devex'in XtraGrid bileşeni üzerinde datasource verdiğim bir DataTable nesnesinde tekrar SQL sorgusu yazmadan filtrelemeleri hızlı şekilde yapmak mümkündür . Buna bir Panel PC uygulaması yazarken dokunmatik klavye üzerinden ihtiyaç duymuştum. Dokunmatik klavye benim ayrı bir formumdur. Bunun üzerinden Stoklarımı filtrelemem gerekiyordu bunu yapmak içinde epey uğraştım açıkçası. Uğraştığımada değdiğini düşünüyorum. Şimdi lafı uzatmadan bir örnek ile gösteriyorum.

 

Ben Devex 8.2.4 bileşenlerini kullandım .

//Form Load ile manuel bir tablo üzerinde Bilgilerimizi ekliyoruz

 

  private void FrmMain_Load(object sender, EventArgs e)

        {

            dtPersonel.Columns.Add("Name", typeof(string));

            dtPersonel.Columns.Add("Surname", typeof(string));

            dtPersonel.Columns.Add("Age", typeof(int));

            DataRow dRow = dtPersonel.NewRow();

            

            dRow["Name"] = "Visual";

            dRow["Surname"] = "Studio";

            dRow["Age"] = 5 ;

            dtPersonel.Rows.Add(dRow);

            

            dRow = dtPersonel.NewRow();

            dRow["Name"] = "C";

            dRow["Surname"] = "Sharp";

            dRow["Age"] = 4;

            dtPersonel.Rows.Add(dRow);


            dRow = dtPersonel.NewRow();

            dRow["Name"] = "Visual";

            dRow["Surname"] = "Basic";

            dRow["Age"] = 10;

            dtPersonel.Rows.Add(dRow);


            gcMyGrid.DataSource = dtPersonel;

        }


        //Butonların click eventini manuel oluşturup, Properties penceresinden

        //events sekmesi üzerine gelip listeden Click Eventini bulun

        //ve oluşturduğunuz Eventi Seçin

        void ButonTextEkle(object sender, EventArgs e)

        {           

            Button btn=(Button)sender;

            GridFilter(btn.Text);

        }


        void GridFilter(string str)

        {

            //Dilediğimiz Alana Göre Filtreleme Yapıla Bilir

            gColName.FilterInfo = new DevExpress.XtraGrid.Columns.ColumnFilterInfo(DevExpress.XtraGrid.Columns.ColumnFilterType.Custom, null, "[Name] LIKE '" + str + "%'", "[İsim] LIKE '" + str + "%'");

        }

 



 

 

Burada Oluşturduğumuz Tablo İçin Alanların, DataSource Nesnesinin hangi kaynağından değer alacağını Belirtmemiz Gerekiyor..

 

Programın örnek kodunun tamamı : DevexGridFilter.rar (43,21 kb)

Tags: , , ,

CSharp

Month List

Calendar

<<  April 2014  >>
MoTuWeThFrSaSu
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar