ورود

View Full Version : ساعت در دلفی و sql و بازیابی؟



oghab
دوشنبه 09 آبان 1384, 14:27 عصر
سلام
من تو sql یه table دارم. که یه فیلد از نوع datetime است. تو دلفی یه maskEdit گذاشتم که توش ساعت و وارد می کنم و بعد توسط adocmmand به table ام insert می کنم.
یه dbgrid هم به این table وصل است.
حالا من تو maskedit ام وارد می کنم. 08:00:00
بعد هم insert می کنم. هیچ مشکلی نیست. توی sql هم که میرم. وقتی روی table ام میرم و return all rows را میزنم دقیقا همین را نوشته.
ولی وقتی از دلفی به table ام وصل میشم. توی grid یا هر جای دیگه که محتویات فیلد مورد نظرمو نمایش میدم. نوشته : 30/12/1899 08:00:00AM
من می خواهم فیلدم فقط محتوی ساعت باشه نه هیچ تاریخی.
حالا باید چیکار کنم؟
ممنونم
-----------------
التماس دعا

Touska
دوشنبه 09 آبان 1384, 15:47 عصر
میتونی برای کار با ساعت از string استفاده کنید نمی خواهید که عملیات روش انجام بدی

برای sort هم مشکلی با string نداره.

oghab
دوشنبه 09 آبان 1384, 16:57 عصر
سلام
ممنونم

disappear
سه شنبه 10 آبان 1384, 00:08 صبح
یک کاره دیگه هم می تونی بکنی . در Gettext فیلد مورد نظر بری تعریف کنی که فقط 10 کاراکتر اول رو نشون بده .

oghab
سه شنبه 10 آبان 1384, 12:18 عصر
سلام. مرسی
اگه گرید باشه. چطوری؟

Touska
سه شنبه 10 آبان 1384, 12:21 عصر
خوب گفتم از فیلد string استفاده کنید اگر نمی خواهید کار محساباتی انجام دهید.

کار دیگه هم می تونید بکنید اینکه فرمت date و Time را در Sql server عوض کنید.

oghab
سه شنبه 10 آبان 1384, 22:08 عصر
سلام
ممنون
برای بعشی از فیلدهام میشه. از string استفاده کنم. . راه خوب و بی دردسرس است.
ولی بعضی از فیلدها را تصمیم دارم بعدا روش کار محاسباتی انجام بدم. مثلا ساعت ورود و خروج افراد. که ساعت خروج و ورود را از هم کم کنه و کل ساعت بودن شخص در واه را نشون بده. ولی راجع به این مرحله هنوز کافی فکر نکردم. و فعلا در مرحله ثبت اطلاعاتم. شاید بازم تبدیل اینا به tmie بعد از یازیابی از sql به صورت srting راه خوبی است.
راستش دقیق نمی دونم این محاسباتو چطور باید انجام بدم و هنوز به اون مرحله نرسیدم. برا همین اگه فرمت فیلد data باشه شاید واسه بعد ارحتر باشه. ولی مطمئن نیستم.
از لطف شما ممنون.
-------------------
التماس دعا

vcldeveloper
چهارشنبه 11 آبان 1384, 02:32 صبح
ولی وقتی از دلفی به table ام وصل میشم. توی grid یا هر جای دیگه که محتویات فیلد مورد نظرمو نمایش میدم. نوشته : 30/12/1899 08:00:00AM
من می خواهم فیلدم فقط محتوی ساعت باشه نه هیچ تاریخی.
مبنای TDateTime همون تاریخ 1899/12/30، ساعت 12 نیمه شب هست. وقتی شما به فیلد فقط مقدار 08:00:00AM میدید و تاریخ را تغییر نمی دید، نتیجه میشه همون 30/12/1899 08:00:00AM
برای اینکه فیلد شما همیشه مقدار ساعت رو برگردونه، می تونید در رویداد OnGetText اون از تابع TimeToStr استفاده کنید:


Text := TimeToStr(TDateTime(Value);

سید مسعود موحد
پنج شنبه 12 آبان 1384, 09:12 صبح
دقیقا روش آقای کشاورز دقیقترین روش است که بدون دستکاری در نوع فیلد نوع نمایش آنرا تغییر میدهید

oghab
شنبه 14 آبان 1384, 16:16 عصر
سلام
خیلی ممنون
من فهمیدم چی می گید!
ولی در پنجره object Inspector در قسمت events نه برای adotable و نه برای dbgrid و نه وقتی cloumn های dbgird را انتخاب می کنم این رویداد وجود داره!!!
خواستم از طریق کد نویسی این کارو انجام بدم و در formcreat و یا هر جای دیگه قبل از اینکه adotable مورد نظر را active اش را true کنم بنویسم. بازم نشد. یعنی بلد نبودم! نمی دونستم پارامترهاشو چی بدم. سعی کردم خودم بفهمم نشد و باز نیاز به راهنمایی شما دارم!
خواستم با استفاده از یکی از دو کد زیر مشکلو حل کنم. هر پارامتری به مغزم رسی دادم ولی درست نبود!


DBGrid1.Fields[2].OnGetText();
ADOTable1.Fields[2].OnGetText();


مثلا پارامترها را اینجور دادم


DBGrid1.Fields[2].OnGetText(DBGrid1.Fields[2],'Text := TimeToStr(TDateTime(Value)',true);

ولی نمیشه! نمیدونم چطور بنویسم. جای دیگه هم اون رویداد پیدا نکردم تا فقط کدی که گفتید را بنویسم!
شما که راهنمایی می کنید. خب من بیسوادم. یک کم بیشتر توضیح بدید!
ممنون میشم!
نیاز دارم فیلدم از نوع datatime باشه و گرنه راحت میرفتمو از همون نوع string استفاده می کردم!
------------------------
التماس دعا

vcldeveloper
یک شنبه 15 آبان 1384, 02:49 صبح
روی شی AdoTable ایی که دارید دابل کلیک کنید . در پنجره ایی که باز میشه راست کلیک کنید و گزینه Add All Fields را انتخاب کنید.
از طریق کدنویسی:


private
{ Private declarations }
procedure Field2_GetText(Sender: TField; var Text: String; DisplayText: Boolean);
public
{ Public declarations }
end;
...

implementation

{$R *.dfm}

procedure TForm1.Field2_GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
Text := TimeToStr(TDateTime(Sender.Value));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AdoTable1.Fields[2].OnGetText := Field2_GetText;
end;

oghab
یک شنبه 15 آبان 1384, 09:22 صبح
سلام
خیلی ممنونم
امیدوارم موفق باشید
----------------------------
التامس دعا