Sql üzerindeki Datetime değerinin milisaniye olarak alınması [Çözüldü]
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Sql üzerindeki Datetime değerinin milisaniye olarak alınması [Çözüldü]
Selamlar
Veritabanında bulunan datetime alanı içerisinde getdate() ile kayıt yapıldığında milisaniye olarak veriyi kayıt ediyor
delphi tarafında sorguda bu tarih alanı
Query1.Parameters.ParamByName('PrmZaman').Value := Query2.Parameters.ParamByName('Zaman').AsDateTime;
şeklinde Open edildiğinde eğer veritabanında milisaniye varsa kayıt dönmüyor.
delphi içerisinde milisaniyeyi dikkate alacak şekilde nasıl bir where sql cümlesi oluşturmalıyım. ve parametre atamalıyım.
Teşekkürler
Veritabanında bulunan datetime alanı içerisinde getdate() ile kayıt yapıldığında milisaniye olarak veriyi kayıt ediyor
delphi tarafında sorguda bu tarih alanı
Query1.Parameters.ParamByName('PrmZaman').Value := Query2.Parameters.ParamByName('Zaman').AsDateTime;
şeklinde Open edildiğinde eğer veritabanında milisaniye varsa kayıt dönmüyor.
delphi içerisinde milisaniyeyi dikkate alacak şekilde nasıl bir where sql cümlesi oluşturmalıyım. ve parametre atamalıyım.
Teşekkürler
En son adelphiforumz tarafından 13 Eki 2016 03:20 tarihinde düzenlendi, toplamda 3 kere düzenlendi.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: Sql üzerindeki Datetime değerinin milisaniye olarak alınması
Merhaba,
Örnek verdiğiniz kod sorunu anlamaya yönelik çok bilgi vermiyor gibi. Bir Query parametresi içindeki bilgiyi diğer Query parametresine atama yapıyorsunuz. Ancak ikinci parametre içine atamanın nasıl yapıldığı bilinmiyor.
Bu anlamda biraz daha detay bilgi verebilir misiniz?
Örnek verdiğiniz kod sorunu anlamaya yönelik çok bilgi vermiyor gibi. Bir Query parametresi içindeki bilgiyi diğer Query parametresine atama yapıyorsunuz. Ancak ikinci parametre içine atamanın nasıl yapıldığı bilinmiyor.
Bu anlamda biraz daha detay bilgi verebilir misiniz?
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: Sql üzerindeki Datetime değerinin milisaniye olarak alınması
ertank hocam
en iyi örnek uygulama ile anlatılır diye düşündüm
aşağıda örnek uygulama mevcut
çalışan ve çalışmayan diye iki buton yaptım
üstteki gridden bir kayıt seçip butonlara basın
nedemek istediğimi daha iyi anlamış olursunuz
en iyi örnek uygulama ile anlatılır diye düşündüm
aşağıda örnek uygulama mevcut
çalışan ve çalışmayan diye iki buton yaptım
üstteki gridden bir kayıt seçip butonlara basın
nedemek istediğimi daha iyi anlamış olursunuz
Kod: Tümünü seç
create table [dbo].[TableTestZaman](
[IdAuto] [int] identity(1,1) not null,
[Zaman] [datetime] null,
[Bilgi] [varchar](50) null,
constraint [PK_TableTestZaman] primary key clustered
(
[IdAuto] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [PRIMARY]
) on [PRIMARY]
go
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '1')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '2')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '3')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '4')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '5')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '6')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '7')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '8')
WAITFOR DELAY '00:00:00.010'
insert into TableTestZaman (Zaman, Bilgi) values (getdate(), '9')
Kod: Tümünü seç
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 594
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 34
Top = 112
Width = 447
Height = 135
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object sButton1: TsButton
Left = 73
Top = 263
Width = 75
Height = 25
Caption = #199'al'#305#351'an'
TabOrder = 1
OnClick = sButton1Click
end
object DBGrid2: TDBGrid
Left = 30
Top = 304
Width = 451
Height = 165
DataSource = DataSource2
TabOrder = 2
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object sButton2: TsButton
Left = 241
Top = 259
Width = 75
Height = 25
Caption = #199'al'#305#351'mayan'
TabOrder = 3
OnClick = sButton2Click
end
object ADOQuery1: TADOQuery
Connection = ADOConnection1
CursorType = ctStatic
Parameters = <>
Left = 136
Top = 64
end
object ADOConnection1: TADOConnection
LoginPrompt = False
Provider = 'SQLOLEDB.1'
Left = 52
Top = 12
end
object DataSource1: TDataSource
DataSet = ADOQuery1
Left = 230
Top = 62
end
object DataSource2: TDataSource
DataSet = ADOQuery2
Left = 150
Top = 468
end
object ADOQuery2: TADOQuery
Connection = ADOConnection1
Parameters = <>
Left = 80
Top = 472
end
end
Kod: Tümünü seç
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, sButton, Vcl.Grids, Vcl.DBGrids, Data.DB, Data.Win.ADODB;
type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
sButton1: TsButton;
DataSource2: TDataSource;
ADOQuery2: TADOQuery;
DBGrid2: TDBGrid;
sButton2: TsButton;
procedure sButton1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure sButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'Select *, convert(varchar(24), Zaman, 121) as YeniZaman from TableTestZaman';
ADOQuery1.Open;
end;
procedure TForm1.sButton1Click(Sender: TObject);
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'Select * from TableTestZaman ' +
' where convert(varchar(24), Zaman, 121) = :PrmZaman';
ADOQuery2.Parameters.ParamByName('PrmZaman').Value := ADOQuery1.FieldByName('YeniZaman').AsString;
ADOQuery2.Open;
end;
procedure TForm1.sButton2Click(Sender: TObject);
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'Select * from TableTestZaman ' +
' where Zaman = :PrmZaman';
ADOQuery2.Parameters.ParamByName('PrmZaman').Value := ADOQuery1.FieldByName('Zaman').AsDateTime;
ADOQuery2.Open;
end;
end.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: Sql üzerindeki Datetime değerinin milisaniye olarak alınması
ADO TDateTime atamalarında DateTimeToStr() fonksiyonunda olduğu gibi Tarih içindeki milisaniye bilgisini almaz.
İstediğinizi aşağıdaki şekilde gerçekleştirmeniz mümkün
İstediğinizi aşağıdaki şekilde gerçekleştirmeniz mümkün
Kod: Tümünü seç
ADOQuery2.Parameters.ParamByName('PrmZaman').Value := FormatDateTime('yyyymmdd hh:nn:ss.zzz', ADOQuery1.FieldByName('Zaman').AsDateTime);
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: Sql üzerindeki Datetime değerinin milisaniye olarak alınması
Ertank hocam siz bu yazdığınızı denedinizmiertank yazdı:Mesaj gönderen ertank » 13 Eki 2016 02:34
ADO TDateTime atamalarında DateTimeToStr() fonksiyonunda olduğu gibi Tarih içindeki milisaniye bilgisini almaz.
İstediğinizi aşağıdaki şekilde gerçekleştirmeniz mümkün
KOD: TÜMÜNÜ SEÇ
ADOQuery2.Parameters.ParamByName('PrmZaman').Value := FormatDateTime('yyyymmdd hh:nn:ss.zzz', ADOQuery1.FieldByName('Zaman').AsDateTime);
bu ilk hata ile aynı hatayı veriyor.
Zaman nesnesi zaten milisaniye barındırmıyor sorunum bu.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: Sql üzerindeki Datetime değerinin milisaniye olarak alınması
Parametre için DataType belirlemeniz gerekiyor diye eklemeyi unutmuşum.
Sizin SQL içinde yazdığınız YeniZaman alanı convert kullandığınız için ADO tarafından WideString türünde bir alan olarak algılandığı için ve parametreye string türünde değer verdiğiniz için çalışıyor.
Kod: Tümünü seç
ADOQuery2.Parameters.ParamByName('PrmZaman').DataType := ftWideString;
ADOQuery2.Parameters.ParamByName('PrmZaman').Value := FormatDateTime('yyyymmdd hh:nn:ss.zzz', ADOQuery1.FieldByName('Zaman').AsDateTime);
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: Sql üzerindeki Datetime değerinin milisaniye olarak alınması
ertank hocam dediğiniz şekilde çalıştı teşkkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana