PDA

View Full Version : گرفتن ساعت و تاريخ از sql server در شبكه



ariobarzan
شنبه 25 خرداد 1387, 08:14 صبح
با سلام

اگه بخواهيم از ساعت و تاريخ اس كيو ال سرور كه در شبكه قرار داره استفاده كنيم راه حلش چيه؟
واضح تر اينكه به دليل اين كه كاربر ميتونه ساعت و تاريخ سيستمشو تغيير بده يا اينكه ساعت و تاريخ كامپيوتر تنظيم نباشه و لازم باشه كه ساعت و تاريخ ثبت بشه ، معتبر تر خود سروره
اگه دوستان كمك كنند ممنون ميشم
در ضمن نوع فيلد براي ذخيره ساعت و تاريخ چي باشه بهتره؟

DataMaster
شنبه 25 خرداد 1387, 09:30 صبح
تابع GetDate در اسکيوال سرور تاريخ و ساعت سيستم سرور SQL رو بر ميگردونه
اگه شما ميخواي ساعت و تاريخ رو در درج يا ويرايش رکورد داشته باشي بهتره که اين کار رو در طرف ديتا بيس انجام بدي
يعني اگه براي درج يا ويرايش رکورد از پروسيجر هيا اسکيوال استفاده ميکني توي همون پروسيجر تاريخ و ساعت سرور رو با تابع مورد نظر بگير و در رکورد ثبت کن
پيشنهاد مي کنم از همون نوع فيلد DateTime استفاده کنيد و با استفاده از توابع تبديل تاريخ رو به شمسي تبديل کنيد(نظرات متفاوته و بست به نوع کار شما داره)

ariobarzan
شنبه 25 خرداد 1387, 12:31 عصر
با سلام
ممنون از راهنماييتون
من يه فيلد از نوع datetime به نام dateserver تعريف كردم
با استفاده از دستورات زير
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into datetbl(dateserver) values(getdate() )' );
ADOQuery1.ExecSQL;

زمان و تاريخ سرور را گرفتم
حالا مشكل اين كه چطور ميشه ساعت و تاريخ را تفكيك شده داشت و آيا اطلاعات بدست اومده قابل پردازشه ؟
مثلا ميشه ركورد هاي ثبت شده در فاصله زماني مشخص را از جدول نعيين كرد؟
از توجه شما متشكرم

SYNDROME
شنبه 25 خرداد 1387, 21:16 عصر
با سلام
ممنون از راهنماييتون
من يه فيلد از نوع datetime به نام dateserver تعريف كردم
با استفاده از دستورات زير
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into datetbl(dateserver) values(getdate() )' );
ADOQuery1.ExecSQL;

زمان و تاريخ سرور را گرفتم
حالا مشكل اين كه چطور ميشه ساعت و تاريخ را تفكيك شده داشت و آيا اطلاعات بدست اومده قابل پردازشه ؟
مثلا ميشه ركورد هاي ثبت شده در فاصله زماني مشخص را از جدول نعيين كرد؟
از توجه شما متشكرم
بهتر است اول با تابع GetDate زمان را از سرور دریافت کنی و سپس به صورت جداگانه آن را در دو فیلد ذخیره کنی.
حالا می توانید این ذخیره سازی به صورت رشته باشد و یا در یک فیلد از نوع DateTiem ذخیره کنید.
بعد از انجام این عملیات به راحتی می توانید بازه ها را فیلتر کنید.
موفق باشید

ariobarzan
یک شنبه 26 خرداد 1387, 06:55 صبح
با تشكر از توجه شما
در صورت امكان اگه كد روش مورد نظر را بنويسيد .ممنون ميشم ( با كمي توضيح بيشتر )

SYNDROME
یک شنبه 26 خرداد 1387, 07:17 صبح
با تشكر از توجه شما
در صورت امكان اگه كد روش مورد نظر را بنويسيد .ممنون ميشم ( با كمي توضيح بيشتر )
تقریباً می توانید از چنین کدی استفاده کنید.


ADO.SQL.Clear;
ADO.SQL.Add('Select GetDate() As GD');
ADO.Active := True;
S_Date := (Copy(ADO.FieldByName('GD').AsString,1,10));
S_Date := Copy(DateToFarsi(StrToDate(S_Date)),3,8)

موفق باشید

ariobarzan
یک شنبه 26 خرداد 1387, 13:02 عصر
با سلام
خيلي از لطف شما ممنونم
با استفاده از دستور كپي كه اشاره فرموديد ، مشكل حل شد
ولي دستور آخر برنامه شما ظاهرا تاريخ را فارسي مي كنه .
اگه ميشه در اين مورد هم توضيح بديد ( ببخشيد كه پر رو شدم )
باز هم ممنون

SYNDROME
یک شنبه 26 خرداد 1387, 21:21 عصر
ولي دستور آخر برنامه شما ظاهرا تاريخ را فارسي مي كنه .
اگه ميشه در اين مورد هم توضيح بديد
این یک تابع است که تاریخ سیستم را به فارسی تبدیل می کند تا در برنامه مورد استفاده قرار گیرد.
یکی از این Unit ها UfarsiDate است که اگر جستجو کنی قبلا دوستان در سایت قرار داده اند.
موفق باشید

ariobarzan
دوشنبه 27 خرداد 1387, 10:11 صبح
از توجه شما ممنونم
با يه جستجو تو سايت و مراجعه به سايت سالار سافت يونيت را گرفتم كه خيلي با حال بود
شما هم خيلي با مرامي
باز هم تشكر