ساده ترین راه اینه که به تاریخ مثل یک عدد نگاه کنی مثلا
1393/07/07=13930707
1393/08/07=13930807
بعد راحت میتونی گزارش بگیری و میتونی مثل یه عدد باهاش برخورد کنی
حالا میتونی تاریخ ها جستجو کنی و هیچ مشکلی هم نداری :-D
با سلام
جناب saeedgharedaghi درست راهنمایی کردن. من خودم هم به همین شیوه در دیتابیس ذخیره میکنم.
یعنی تاریخی رو که کاربر وارد میکنه. با حذف '/' به عدد تبدیل میکنم. و بعد از جستجو و انجام کارم وقتی تاریخ رو میخوام نشون بدم مجددا '/' رو جایگزین میکنم.
مثال برای ثبت تاریخ تولد:
public string bearthdey(string year, string mon, string dey1)
{
DateTime date_time = DateTime.Now;
PersianCalendar persianCal = new PersianCalendar();
string bearth = "";
string month = "1";
string dey = "1";
if (dey1.Length < 2) dey = "0" + dey1;
else
dey = dey1;
if (mon.Length < 2) month = "0" + mon;
else
month = mon;
if (year == "") year = "00";
if (year.Length == 2)
bearth = "13" + year + month + dey;
else if (year.Length == 4)
bearth = year + month + dey;
return bearth;
}
برای نمایش تاریخ تولد در دیتاگرید:
private void gridviewShow(DataTable dt)
{
if (dt.Rows.Count != 0)
{
foreach (DataRow aRow in dt.Rows)
{
//دسترسی مستقیم به یک ستون از یک رکورد
string str = aRow[@"bearthdey"].ToString().Trim();
string str1 = str.Substring(0, 4);
string str2 = str.Substring(4, 2);
string str3 = str.Substring(6, 2);
aRow[@"bearthdey"] = str1 + "/" + str2 + "/" + str3;
مشکلتون کدوم سمته؟
دیتابیس؟
یا ویژوال؟
SELECT BusinessEntityID, RateChangeDateFROM HumanResources.EmployeePayHistory WHERE RateChangeDate BETWEEN '2001/12/12' AND '2002/01/05';
دوستان کسی میتونه آموزش بده سرچ و گزارش گیری براساس تاریخ رو؟
لطفا ظبط کنه به صورت یک فیلم آموزشی و تو همین تاپیک قرار بده
خیلی ممنون میشم
به شدت نیاز دارم به این آموزش
هرچی آموزش بوده رو من دانلود کردم ولی به نتیجه نرسیدم
چون تو هیچ آموزشی به این موضوع (تاریخ) پرداخته نشده اگه هم شده باشه به صورت ناقص بوده
پس از همه دوستان این درخواست رو دارم
منتظریم عزیزان
عزیز من اون بالا هم پرسیدم مشکلت از کدوم طرفه
تو دیتابیس ؟
فرم کدش به این صورته
SELECT * FROM Table WHERE [Date] BETWEEN '2001/12/12' AND '2002/01/05'
توی برنامه ت؟
public DataTable Gozaresh( string StartDate, string EndDate)
{
SqlCommand cmd = new SqlCommand("Gozaresh", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@StartDate", StartDate);
cmd.Parameters.AddWithValue("@EndDate", EndDate);
DataTable Table = new DataTable();
con.Open();
SqlDataReader Reader = cmd.ExecuteReader();
Table.Load(Reader);
return Table;
}
توی رویداد کلید جستجوت اینو بنویس
dgv.DataSource = Gozaresh(mtxtFromDateGPB.Text, mtxtEndDateGPB.Text);
آخرین ویرایش به وسیله feryt20 : پنج شنبه 13 شهریور 1393 در 01:07 صبح
سلام
دوست عزیز hossein3p2p ، خواهش میکنم به چند نکته توجه کن
اول اینکه اگر از امکان جستجوی سایت استفاده میکردی با کمی صبر و حوصله به نتیجه می رسیدی
دوم اینکه اگر سوال درست و کامل مطرح بشه ، احتمال رسیدن به جواب درست بیشتره (شما حتی مشخص نکردی از چه تکنولوژی برای ارتباط با دیتابیس استفاده میکنی ، دیتابیست چیه و یا تاریخ رو با چه فرمتی ذخیره میکنی)
سوم اینکه دوستان راهنمایی کردند و اتفاقا هرکدوم هم به طریقی راه حل هاشون درست هست
چهارم اینکه کمک دوستان رو نباید به حساب وظیفشون گذاشت (هرچقدر که کمک میکنن دستشون درد نکنه)
و نهایتا اینجا کاربر قدیمی یا جدید بودن خیلی تفاوتی نداره و امتیازی محسوب نمیشه - اینجا هدف فقط یاد گیری هست.
لطفا بعد از این از ارسال پست های فاقد محتوای فنی خودداری کنید. / ممنونم
موفق باشید
قوانین سایت برنامه نویس [ به سوالات از طریق پیام خصوصی پاسخ داده نمی شود ]
با عرض پوزش استرس حاصل از کار روی این پروژه باعث شد همه حواسم فقط روی مشکلم متمرکز بشه قصد و نیت بدی نداشتم و ممنون میشم اگه با کمک شما دوستان مشکلم حل بشه
میخوام پرمحتوا سوالمو مطرح کنم تا واسه دوستان خوب جا بیفته برنامه از چه قراره
یک برنامه نوشتم که ماموریت های کارکنان مخابرات رو ثبت میکنه
این فرم ثبت ماموریت
1- من از تکنولوژی ADO.Net استفاده کردم
2- ویژوال استدیو 2010 پایگاه داده من SQL SERVER 2008
3- بنده یه متد نوشتم که تاریخ شمسی رو توی تکست باکس های مخصوص تاریخ فراخوانی میکنه (توی تصویر قسمت تاریخ هستش)
4- فیلدهای تاریخ آغاز ماموریت m_date و تاریخ پایان کار m_date1 هستش و اسم جدول tbl_mamooriat و اسم پایگاه داده من db_mokhaberat هستش
حالا میخوام ماموریت های مثلا فقط ماه شهریور رو برام سرچ کنه و بیاره توی دیتا گریدم و از این ماموریتهای سرچ شده ی این ماه یک گزارش بگیرم؟؟؟
آخرین ویرایش به وسیله hossein3p2p : پنج شنبه 13 شهریور 1393 در 02:18 صبح
سلام مجدد
برای این کار و اینکه بتونی سرچ و مرتب سازی درستی روی تاریخ های شمسی داشته باشی (که البته به صورت nVarChar توی دیتابیس ذخیره میشن) اول باید تاریخ رو بصورت کامل توی دیتابیس ذخیره کنی یعنی 10 کاراکتر ، به این صورت 1393/06/12 ، اینجوری هم میتونی درست مرتب سازی انجام بدی و هم جستجوی درستی داری (توی فرم نمونه شما من دیدم روزها و ماه های 1 رقمی به همون صورت ذخیره میشن ظاهرا)
اگر شما ذخیره تاریخ رو به این صورت انجام بدی ، به سادگی با یک کوئری میتونی اطلاعات مورد نظرت رو فیلتر کنی
یه متد به اسم dbsearch برای شما نوشتم ، این متد رو اگر استفاده کنی ، دوتا پارامتر ورودی میگیره که date1میشه تاریخ شروع بازه گزارشگیری شما و date2 انتهای بازه ، مثلا برای ماه 6 سال 93 به اینصورت فراخوانی میشه (و چون مقدار برگشتی این متد از نوع dataTable هست بنابراین میشه انتساب دادش به دیتاگرید)
dataGridView1.DataSource = dbSearch("1393/06/01", "1393/06/31");
اینم متد
private DataTable dbSearch(string date1, string date2)
{
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataReader dr;
DataTable Tbl = new DataTable();
con.ConnectionString = "YourConnectionString";
con.Open();
cmd.Connection = con;
cmd.Parameters.AddWithValue("@date1", date1);
cmd.Parameters.AddWithValue("@date2", date2);
cmd.CommandText = "SELECT * FROM tbl_mamooriat WHERE m_date >= @date1 AND m_date1 <= @date2";
dr = cmd.ExecuteReader();
Tbl.Load(dr);
con.Close();
dr.Dispose(); cmd.Dispose(); con.Dispose();
return Tbl;
}
شما فقط کانکشن استرینگ رو بنابر نیاز خودت اصلاح کن.
موفق باشید.
قوانین سایت برنامه نویس [ به سوالات از طریق پیام خصوصی پاسخ داده نمی شود ]
یعنی برای 10 کاراکتری نمایش دادن تاریخ؟
فقط دو خط کدتو اصلاح کن که روزها و ماه هایی که یک رقمی هستن رو یه صفر قبلشون اضافه کنه ، اینجوری
d = Convert.ToString(pc.GetDayOfMonth(DateTime.Now)).P adLeft(2, Convert.ToChar("0"));
m = Convert.ToString(pc.GetMonth(DateTime.Now)).PadLef t(2, Convert.ToChar("0"));
اگر با همین فرمت (10 کاراکتری) تو دیتابیس هم ذخیره کنی دیگه مشکلی نخواهی داشت از بابت تاریخ
قوانین سایت برنامه نویس [ به سوالات از طریق پیام خصوصی پاسخ داده نمی شود ]
سلام وقتی کپی کردین این یه تیکه اشتباه شده3.PNG
آقا تا اینجا موفق شدیم که 10 کاراکتر توی بانک دخیره کنیم
حالا توی فرم زیر
قصد داریم عملیات سرچ رو انجام بدیدم
اطلاعات:
1- نام تکس باکس ها (txtdate و txtdate1)
2- نام دکمه جستجو (btnSearch)
--------------------------------------------------
نکته: من از تکنولوژیADO.Netاستفاده کردم
ویژوال استدیو 2010 پایگاه داده منSQL SERVER 2008
فیلدهای تاریخ آغاز ماموریتm_dateو تاریخ پایان کارm_date1هستش و اسم جدولtbl_mamooriatو اسم پایگاه داده منdb_mokhaberatهستش-------------------------------------------------
حالا چجوری سرچ کنم اطلاعاتم رو طبق این دو تا تکست باکس؟؟
سلام
تو پست شماره ۱۳ دقیقا همین سوال رو توضیح دادم ، فقط موقع فراخوانی متد dbsearch بعنوان پارامتر ، تاریخ های توی تکست باکس ها رو بنویس
قوانین سایت برنامه نویس [ به سوالات از طریق پیام خصوصی پاسخ داده نمی شود ]
متوجه نمیشم اینجاشو
میشه یه کم راحت تر واسم توضیح بدی؟
لطفا با توجه به تصویر پست 18 برام توضیح بدین ممنون میشم؟؟؟
یعنی اینجوری بنویسم کد ها رو؟؟؟
------------------------------------------
اینم کلاس برنامم هستش :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace mokhaberat
{
class database
{
public static DataTable DoQuery(string q)
{
SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=db_mokhaberat;Integrated Security=True");
SqlDataAdapter adapter = new SqlDataAdapter(q, connection);
DataTable table = new DataTable();
adapter.Fill(table);
return table;
}
public static void DoDml(string qq)
{
SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=db_mokhaberat;Integrated Security=True");
SqlCommand command = new SqlCommand(qq, connection);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
}
آخرین ویرایش به وسیله hossein3p2p : جمعه 14 شهریور 1393 در 03:54 صبح
ببین دوست عزیز ، مگه شما توی تکست باکس ها برای جستجو تاریخ شروع و پایان وارد نمیکنی؟
اگر اینطوره ، شما موقع فراخوانی اون متد که بالاتر عرض شدبه این ترتیب عمل میکنی
dgvMamoriat.DataSource = dbSearch(txtdate.Text, txtdate1.Text);
آخرین ویرایش به وسیله محمد آشتیانی : جمعه 14 شهریور 1393 در 04:09 صبح
قوانین سایت برنامه نویس [ به سوالات از طریق پیام خصوصی پاسخ داده نمی شود ]
دمت گرم داش فری tbl_mamoriat بود من نوشته بودم tbl_mamooriat چشم کتابم میخونم
مرسی تا اینجا درست شد.
حالا مونده گزارش گیریش که تو stimulreport میخوام انجام بدم
میشه بگید چطور باید اینکارو انجام بدم؟
نرم افزار استیمول سافت رو دانلود کن (من از 2010 استفاده میکنم)
نصب کن
یه سرچ کوچیک بکنی 2 تا فیلم آموزشی دانلود کنی راحت میتونی طرز استفاده شو یاد بگیری
نرم افزار استیمول ریپورت 2010 رو نصب کردم
تمام فیلم های آموزشی که تو اینترنت هست در مورد این موضوع گزارش گیری رو دیدم
ولی هیچکدومشون در مورد گزارش گیری بین 2 تا تاریخ خاص نبوده
میتونید کمک کنید که تو این تاپیک حداقل برای اولین بار این کار رو انجام بدیم؟؟؟
سلامتمام فیلم های آموزشی که تو اینترنت هست در مورد این موضوع گزارش گیری رو دیدم
ولی هیچکدومشون در مورد گزارش گیری بین 2 تا تاریخ خاص نبوده
طبق این آموزش خواهید توانست DataTable را به Stimulsoft ارسال کنید و به راحتی کوئری مورد نظرتون را چاپ کنید.
http://s5.picofile.com/file/81390372...lsoft.zip.html
آموزش از pro_man
آخرین ویرایش به وسیله مهدی اسماعیلی : جمعه 14 شهریور 1393 در 17:54 عصر
من تو قسمت گزارش گیری با این ارور روبرو شدم؟
کسی میدونه قضیه چیه؟؟؟
دلیل این ارور چیه به نظرتون؟
قصد داریم عملیات گزارشگیری رو انجام بدیدم
اطلاعات:
1- نام تکس باکس ها (txtdate و txtdate1)
2- نام دکمه جستجو (btnReport)
--------------------------------------------------
نکته: من از تکنولوژیADO.Netاستفاده کردم
ویژوال استدیو 2010 پایگاه داده منSQL SERVER 2008
فیلدهای تاریخ آغاز ماموریتm_dateو تاریخ پایان کارm_date1هستش و اسم جدولtbl_mamooriatو اسم پایگاه داده منdb_mokhaberatهستش-------------------------------------------------
چجوری میتونم با استیمول ریپورت وقتی نتیجه سرچ بدست اومد گزارش بگیرم؟
آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 21 شهریور 1393 در 18:48 عصر
بهترین راه اینه که تاریخ ها رو در دیتابیس از نوع datetime در نظر بگیری و موقع ثبت رکورد ابتدا تکس باکس رو تبدیل به تاریخ میلادی کنی و بعد ذخیره کنی و هنگام جستجو هم تکس باکس ها رو تبدیل به میلادی کنی و در دستور سلکت همون تاریخ های میلادی رو بیاری
درود بر تمام دوستان گرامی
بهترین راه رو درست فرمودید، اما راه بهتری هم هست که می تونید تاریخ شمسی رو با تمام امکاناتش در دیتابیس SQL Server داشته باشید. (تاکید می کنم با تمام امکانات)
می تونید برای اطلاعات بیشتر این مطالب رو از جناب آقای قنادی بخونید. بسایر جالب و کاربردی و با سرعت بالا. ما از این نوع داده در آخرین پروژه شرکت که پروژه ای با جداول بزرگ هست نیز استفاده کردیم که بسایر عالی جواب خودش رو پس داده
قسمت اول
قسمت دوم
قسمت سوم
آخرشم هیچکی نتونست کمک کنه
با سلام برنامه ای نوشتم که اطلاعات داخل گرید ویو رو برام سرچ میکنه بر اساس دو تا تاریخ
حالاتوی رویداد Form_Load این صفحه یه متد نوشتم که این جستجو رو واسم انجام میده
برنامه رو با تکنولوژی ADO در #C با بانک اطلاعاتی sql نوشتم
حالا میخوام گزارش بگیرم از اطلاعات فقط جستجو شده با توجه اطلاعاتی که در بالا ذکر کردم چه فرمولی رو باید زیر این دکمه گزارش بنویسم:
لطفا قطعه کدش رو واسم توضیح بدید با تشکر؟؟؟
سلام اینم کد دوستان عزیز مطلب رو خیلی پیچوندند
SqlDataAdapter ad = new SqlDataAdapter("select * from Table5 datem >= @p1 and datem <= @p2", con); ad.SelectCommand.Parameters.AddWithValue("@p1", dt.ToShortDateString());
ad.SelectCommand.Parameters.AddWithValue("@p2", dt1.ToShortDateString());
ad.Fill(ds, "Table5");
stiReport1.Load(System.Windows.Forms.Application.S tartupPath + @"\Rpt\Rtankhah.mrt");
(stiReport1.GetComponentByName("date1") as StiText).Text = maskedTextBoxAdv2.Text;
(stiReport1.GetComponentByName("date2") as StiText).Text = maskedTextBoxAdv3.Text;
stiReport1.RegData("Table9", ds1);
stiReport1.RegData("Table5", ds);
stiReport1.Show();