Sql Server Veritabanına Tarih Saat Bilgisi Kaydetme Gönderen: dynamo Tarih: 12 November 2007 14:32:05
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:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit');
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:
TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy'; //sadece tarih bilgisi
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:
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:
select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit
//sql server Türkçe tarih formatı dmy--->gün.ay.yıl
procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
begin
ADOConnection1.Execute('SET DATEFORMAT DMY');
//ADOConnection1.Execute('SET LANGUAGE Turkish');
end;
procedure TForm1.qry_tbl;
begin
if RadioButton1.Checked then begin
DataSource1.DataSet:=ADOTable1;
ADOTable1.Cancel;
ADOTable1.TableName:='Kayit_view'; //Kayit tablosu yerine
ADOTable1.Open;
TDateTimeField(ADOTable1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';
TDateTimeField(ADOTable1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';
end;
if RadioButton2.Checked then begin
DataSource1.DataSet:=ADOQuery1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit order by TarihSaat');
ADOQuery1.Open;
TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';
TDateTimeField(ADOQuery1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';
end;
DBGrid1.Columns.Clear;
DBGrid1.Columns.Add;
DBGrid1.Columns[0].FieldName:='Personel';
DBGrid1.Columns[0].Title.Caption:='Personel';
DBGrid1.Columns[0].Width:=100;
DBGrid1.Columns.Add;
DBGrid1.Columns[1].FieldName:='Arac';
DBGrid1.Columns[1].Title.Caption:='Araç';
DBGrid1.Columns[1].Width:=100;
DBGrid1.Columns.Add;
DBGrid1.Columns[2].FieldName:='Tarih';
DBGrid1.Columns[2].Title.Caption:='Tarih';
DBGrid1.Columns[2].Width:=80;
DBGrid1.Columns.Add;
DBGrid1.Columns[3].FieldName:='Saat';
DBGrid1.Columns[3].Title.Caption:='Saat';
DBGrid1.Columns[3].Width:=80;
end;
filtreleme:
procedure TForm1.filtrele;
var
y,m,d:Word;
sa,dk,sn,sl:Word;
begin
DecodeDate(DateTimePicker3.Date,y,m,d);
DecodeTime(DateTimePicker4.Time,sa,dk,sn,sl);
tarih_saat1:=datetimetostr(EncodeDateTime(y,m,d,sa,dk,sn,sl));
DecodeDate(DateTimePicker5.Date,y,m,d);
DecodeTime(DateTimePicker6.Time,sa,dk,sn,sl);
tarih_saat2:=datetimetostr(EncodeDateTime(y,m,d,sa,dk,sn,sl));
if RadioButton1.Checked then begin
ADOTable1.Filtered:=false;
ADOTable1.Filtered:=true;
end;
if RadioButton2.Checked then begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select Sira,Personel,Arac,TarihSaat as Tarih,TarihSaat as Saat from Kayit where TarihSaat>='''+tarih_saat1+''' and TarihSaat<='''+tarih_saat2+'''');
ADOQuery1.Open;
//TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd'+DateSeparator+'mm'+DateSeparator+'yyyy';
TDateTimeField(ADOQuery1.FieldByName('Tarih')).DisplayFormat:='dd.mm.yyyy';
TDateTimeField(ADOQuery1.FieldByName('Saat')).DisplayFormat:='hh:mm:ss';
end;
end;
//ADOTable için filter
procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;var Accept: Boolean);
begin
Accept:=((DataSet['Tarih']>=tarih_saat1) and (DataSet['Tarih']<=tarih_saat2));
end;
//sorgula
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
if BitBtn4.Caption='Sorgula' then begin
BitBtn4.Caption:='Sorgu İptal';
filtrele;
end
else begin
BitBtn4.Caption:='Sorgula';
ADOTable1.Filtered:=false;
qry_tbl;
end;
end;
dbgridten edit'lere veri atsın
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if RadioButton1.Checked then begin
Edit1.Text:= ADOTable1.FieldByName('Personel').AsString;
Edit2.Text:= ADOTable1.FieldByName('Arac').AsString;
DateTimePicker1.Date:= ADOTable1.FieldByName('Tarih').AsDateTime;
DateTimePicker2.Time:= ADOTable1.FieldByName('Saat').AsDateTime;
end;
if RadioButton2.Checked then begin
Edit1.Text:= ADOQuery1.FieldByName('Personel').AsString;
Edit2.Text:= ADOQuery1.FieldByName('Arac').AsString;
DateTimePicker1.Date:= ADOQuery1.FieldByName('Tarih').AsDateTime;
DateTimePicker2.Time:= ADOQuery1.FieldByName('Saat').AsDateTime;
end;
end;
ö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.
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;