Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: Sql Server Veritabanına Tarih Saat Bilgisi Kaydetme  (Okunma sayısı 6230 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı dynamo

  • Kıdemli Üye
  • *****
  • İleti: 120
  • Rep: +3/-1
sql server'de tarih ve saat için iki ayrı veritipi yoktur.smalldatetime ve datetime veritipleri hem tarih hem de saat bilgisini tutar.datetime tipinde tanımlanmış tek bir alanı tarih ve saat olacak şekilde DBGrid'te göstermek için sql sorgusu kullanmak gerekir."Kayit" adlı tabloda datetime tipinde tanımlanmış TarihSaat alanını DBGrid'te Tarih ve Saat olacak şekilde iki ayrı alan oluşturmayı sql kodu ile yapalım:

Kod: Delphi
  1.  
  2.    ADOQuery1.Close;
  3.    ADOQuery1.SQL.Clear;
  4.    ADOQuery1.SQL.Add('select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit');
  5.    ADOQuery1.Open;

Aynı alandan Tarih ve Saat adlı iki alan oluşturduk.Fakat DBGrid'te Tarih alanında sadece tarih,Saat alanında sadece saat bilgisi görünmesi için gridin bağlı olduğu Query'de bu alan formatları belirlenmelidir:

Kod: Delphi
  1.    
  2.    TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';  //sadece tarih bilgisi
  3.    TDateTimeField(ADOQuery1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';    //sadece saat bilgisi

tarih bilgisi formatını, Windows'un kullandığı tarih ayıracı neyse onu otomatik sistemden alması için aşağıdaki şekilde kullanılabilir:

Kod: [Seç]
  TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd'+DateSeparator+'mm'+DateSeparator+'yyyy';
sistemin kullandığı tarih ayıracı, Denetim Masası->Bölge ve Dil Seçenenekleri->Özelleştir->tarih kısmında görülebilir.

Örnek Uygulama:



örnek projede hem query hem de table kullanıldı.Tablodaki tek bir datetime alanının tarih ve saat olacak şekilde DGrid'te iki ayrı alan olarak gösterilmesi bir sql sorgusu ile yapılabilir.Table'de bunu yapmak için veritabanında view kullanıldı. ADOTable bu view'e bağlı.view sql kodunu ADOtable'de kullanamak için oluşturulan veritabanı nesnedir.view kodu:

Kod: [Seç]
select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit
Kod: Delphi
  1. //sql server Türkçe tarih formatı dmy--->gün.ay.yıl
  2. procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
  3. begin
  4.    ADOConnection1.Execute('SET DATEFORMAT DMY');
  5.    //ADOConnection1.Execute('SET LANGUAGE Turkish');
  6. end;


Kod: Delphi
  1. procedure TForm1.qry_tbl;
  2. begin
  3.    if RadioButton1.Checked then begin
  4.       DataSource1.DataSet:=ADOTable1;
  5.       ADOTable1.Cancel;
  6.       ADOTable1.TableName:='Kayit_view'; //Kayit tablosu yerine
  7.       ADOTable1.Open;
  8.  
  9.       TDateTimeField(ADOTable1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';
  10.       TDateTimeField(ADOTable1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';
  11.    end;
  12.    if RadioButton2.Checked then begin
  13.       DataSource1.DataSet:=ADOQuery1;
  14.       ADOQuery1.Close;
  15.       ADOQuery1.SQL.Clear;
  16.       ADOQuery1.SQL.Add('select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit order by TarihSaat');
  17.       ADOQuery1.Open;
  18.  
  19.       TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';
  20.       TDateTimeField(ADOQuery1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';
  21.    end;
  22.  
  23.    DBGrid1.Columns.Clear;
  24.  
  25.    DBGrid1.Columns.Add;
  26.    DBGrid1.Columns[0].FieldName:='Personel';
  27.    DBGrid1.Columns[0].Title.Caption:='Personel';
  28.    DBGrid1.Columns[0].Width:=100;
  29.  
  30.    DBGrid1.Columns.Add;
  31.    DBGrid1.Columns[1].FieldName:='Arac';
  32.    DBGrid1.Columns[1].Title.Caption:='Araç';
  33.    DBGrid1.Columns[1].Width:=100;
  34.  
  35.    DBGrid1.Columns.Add;
  36.    DBGrid1.Columns[2].FieldName:='Tarih';
  37.    DBGrid1.Columns[2].Title.Caption:='Tarih';
  38.    DBGrid1.Columns[2].Width:=80;
  39.  
  40.    DBGrid1.Columns.Add;
  41.    DBGrid1.Columns[3].FieldName:='Saat';
  42.    DBGrid1.Columns[3].Title.Caption:='Saat';
  43.    DBGrid1.Columns[3].Width:=80;
  44.  
  45. end;

filtreleme:

Kod: Delphi
  1. procedure TForm1.filtrele;
  2. var
  3.    y,m,d:Word;
  4.    sa,dk,sn,sl:Word;
  5. begin
  6.    DecodeDate(DateTimePicker3.Date,y,m,d);
  7.    DecodeTime(DateTimePicker4.Time,sa,dk,sn,sl);
  8.    tarih_saat1:=datetimetostr(EncodeDateTime(y,m,d,sa,dk,sn,sl));
  9.  
  10.    DecodeDate(DateTimePicker5.Date,y,m,d);
  11.    DecodeTime(DateTimePicker6.Time,sa,dk,sn,sl);
  12.    tarih_saat2:=datetimetostr(EncodeDateTime(y,m,d,sa,dk,sn,sl));
  13.  
  14.    if RadioButton1.Checked then begin
  15.       ADOTable1.Filtered:=false;
  16.       ADOTable1.Filtered:=true;
  17.    end;
  18.  
  19.    if RadioButton2.Checked then begin
  20.       ADOQuery1.Close;
  21.       ADOQuery1.SQL.Clear;
  22.       ADOQuery1.SQL.Add('select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit where TarihSaat>='''+tarih_saat1+''' and TarihSaat<='''+tarih_saat2+'''');
  23.       ADOQuery1.Open;
  24.  
  25.       //TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd'+DateSeparator+'mm'+DateSeparator+'yyyy';
  26.       TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';
  27.       TDateTimeField(ADOQuery1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';
  28.    end;
  29. end;
  30.  
  31. //ADOTable için filter
  32. procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;var Accept: Boolean);
  33. begin
  34.    Accept:=((DataSet['Tarih']>=tarih_saat1) and (DataSet['Tarih']<=tarih_saat2));
  35. end;
  36.  
  37. //sorgula
  38. procedure TForm1.BitBtn4Click(Sender: TObject);
  39. begin
  40.    if BitBtn4.Caption='Sorgula' then begin
  41.       BitBtn4.Caption:='Sorgu İptal';
  42.       filtrele;
  43.    end
  44.    else begin
  45.       BitBtn4.Caption:='Sorgula';
  46.       ADOTable1.Filtered:=false;
  47.       qry_tbl;
  48.    end;
  49. end;
  50.  

dbgridten edit'lere veri atsın

Kod: Delphi
  1. procedure TForm1.DBGrid1CellClick(Column: TColumn);
  2. begin
  3.    if RadioButton1.Checked then begin
  4.       Edit1.Text:= ADOTable1.FieldByName('Personel').AsString;
  5.       Edit2.Text:= ADOTable1.FieldByName('Arac').AsString;
  6.       DateTimePicker1.Date:= ADOTable1.FieldByName('Tarih').AsDateTime;
  7.       DateTimePicker2.Time:= ADOTable1.FieldByName('Saat').AsDateTime;
  8.    end;
  9.  
  10.    if RadioButton2.Checked then begin
  11.       Edit1.Text:= ADOQuery1.FieldByName('Personel').AsString;
  12.       Edit2.Text:= ADOQuery1.FieldByName('Arac').AsString;
  13.       DateTimePicker1.Date:= ADOQuery1.FieldByName('Tarih').AsDateTime;
  14.       DateTimePicker2.Time:= ADOQuery1.FieldByName('Saat').AsDateTime;
  15.    end;
  16.  
  17.  
  18. end;
  19.  

örnek uygulama ekte.

Program, Data.ini dosyasından kullanıcı adı ve şifreyi almaktadır.Herhangi bir bilgisayarda yüklü sql server'de sa şifresi ini dosyasına kaydedip programı açınız.

Kod: [Seç]
procedure TForm1.FormCreate(Sender: TObject);
var
    IniDosya: TIniFile;
    str_dir,str_file_path,str_file,str_data,str_log:string;
    exe_path:string;
begin
   exe_path:= ExtractFilePath(Application.ExeName) ;

   IniDosya := TIniFile.Create(exe_path+'Data.ini');
   try
      user:=IniDosya.ReadString('Options','User','');
      password:=IniDosya.ReadString('Options','Password','');
      server:=IniDosya.ReadString('Options','Server','');
   finally
      IniDosya.Free;
   end;

   //veritabanı eklenmemişse attach et
   ADOConnection1.Connected:=False;
   ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sa;Initial Catalog=master;Password ='+password+';Data Source=' +server;
   ADOConnection1.Connected:=True;
   if ADOConnection1.Connected then begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from master..sysdatabases WHERE name = ''Data1'' ');
      ADOQuery1.Open;
      if  ADOQuery1.RecordCount = 0 then begin
         str_data:=exe_path+'Data\Data1_data.mdf'  ;
         str_log:=exe_path+'Data\Data1_log.ldf'  ;

         ADOQuery1.Close;
         ADOQuery1.SQL.Clear;
         ADOQuery1.SQL.Text:='EXEC sp_attach_db @dbname = N''Data1'',@filename1 =N'''+str_data+''',@filename2 = N'''+str_log+''' ';
         ADOQuery1.ExecSQL;

         //veritabanına bağlan
         ADOConnection1.Connected :=false;
         ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=false;User ID='+user+';Initial Catalog=Data1;Password ='+password+';Data Source=' +server;
         ADOConnection1.Connected := true;
      end
      else begin
         //veritabanına bağlan
         ADOConnection1.Connected :=false;
         ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=false;User ID='+user+';Initial Catalog=Data1;Password ='+password+';Data Source=' +server;
         ADOConnection1.Connected := true;
      end;
   end;

   qry_tbl;
end;



« Son Düzenleme: 12 Kasım 2007 16:10:22 by Fatih »

Çevrimdışı yaralidost

  • Yeni Üye
  • *
  • İleti: 2
  • Rep: +0/-0
Ynt: Sql Server Veritabanına Tarih Saat Bilgisi Kaydetme
« Yanıtla #1 : 26 Kasım 2008 23:39:17 »
teşekkürler

Çevrimdışı zamane

  • Üye
  • ***
  • İleti: 23
  • Rep: +0/-0
Ynt: Sql Server Veritabanına Tarih Saat Bilgisi Kaydetme
« Yanıtla #2 : 15 Aralık 2009 16:02:27 »
Benimde buna benzer bi sorunum var
bir tane Datetimepicker nesnem var bundan veri tabanına kayıt eklerken tarihide alsın...
SQl server kullanıyorum...tiplerle ilgili bi sorun mu?
kayıt kodum
ADOTable3.Open;
ADOTable3.Append;
ADOTable3gorev_adi.AsString:=DBLookupComboBox2.Text;
ADOTable3tarih.AsString:=datetostr(datetimepicker1.date);
ADOTable3.Post;