PDA

View Full Version : سوال: جستجو و گزارش گیری از یک تاریخ تا تاریخ بعد



hossein3p2p
چهارشنبه 12 شهریور 1393, 13:22 عصر
باسلام خدمت شما دوستان عزیز
بنده یک برنامه ثبت ماموریت نوشتم
فقط تو قسمت جستجو و ثبت گزارش از یک تاریخ تا تاریخ بعدی گیر کردم
ممنون میشم راهنماییم کنید.
http://8pic.ir/images/4tmhxv7yj8vagwh5zsl5.jpg (http://8pic.ir/)

saeedgharedaghi
چهارشنبه 12 شهریور 1393, 13:26 عصر
ساده ترین راه اینه که به تاریخ مثل یک عدد نگاه کنی مثلا

1393/07/07=13930707
1393/08/07=13930807

بعد راحت میتونی گزارش بگیری و میتونی مثل یه عدد باهاش برخورد کنی
حالا میتونی تاریخ ها جستجو کنی و هیچ مشکلی هم نداری :-D

دلتنگ اسمان
چهارشنبه 12 شهریور 1393, 13:45 عصر
با سلام
جناب saeedgharedaghi (http://barnamenevis.org/member.php?83235-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;

feryt20
چهارشنبه 12 شهریور 1393, 14:08 عصر
مشکلتون کدوم سمته؟
دیتابیس؟
یا ویژوال؟

fakhravari
چهارشنبه 12 شهریور 1393, 14:20 عصر
SELECT BusinessEntityID, RateChangeDateFROM HumanResources.EmployeePayHistory WHERE RateChangeDate BETWEEN '2001/12/12' AND '2002/01/05';

hossein3p2p
چهارشنبه 12 شهریور 1393, 18:04 عصر
دوستان کسی میتونه آموزش بده سرچ و گزارش گیری براساس تاریخ رو؟
لطفا ظبط کنه به صورت یک فیلم آموزشی و تو همین تاپیک قرار بده
خیلی ممنون میشم
به شدت نیاز دارم به این آموزش
هرچی آموزش بوده رو من دانلود کردم ولی به نتیجه نرسیدم
چون تو هیچ آموزشی به این موضوع (تاریخ) پرداخته نشده اگه هم شده باشه به صورت ناقص بوده
پس از همه دوستان این درخواست رو دارم
منتظریم عزیزان

feryt20
چهارشنبه 12 شهریور 1393, 23:35 عصر
عزیز من اون بالا هم پرسیدم مشکلت از کدوم طرفه
تو دیتابیس ؟
فرم کدش به این صورته
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);

محمد آشتیانی
چهارشنبه 12 شهریور 1393, 23:47 عصر
سلام
دوست عزیز hossein3p2p ، خواهش میکنم به چند نکته توجه کن
اول اینکه اگر از امکان جستجوی سایت استفاده میکردی با کمی صبر و حوصله به نتیجه می رسیدی
دوم اینکه اگر سوال درست و کامل مطرح بشه ، احتمال رسیدن به جواب درست بیشتره (شما حتی مشخص نکردی از چه تکنولوژی برای ارتباط با دیتابیس استفاده میکنی ، دیتابیست چیه و یا تاریخ رو با چه فرمتی ذخیره میکنی)
سوم اینکه دوستان راهنمایی کردند و اتفاقا هرکدوم هم به طریقی راه حل هاشون درست هست
چهارم اینکه کمک دوستان رو نباید به حساب وظیفشون گذاشت (هرچقدر که کمک میکنن دستشون درد نکنه)
و نهایتا اینجا کاربر قدیمی یا جدید بودن خیلی تفاوتی نداره و امتیازی محسوب نمیشه - اینجا هدف فقط یاد گیری هست.


لطفا بعد از این از ارسال پست های فاقد محتوای فنی خودداری کنید. / ممنونم
موفق باشید

hossein3p2p
پنج شنبه 13 شهریور 1393, 01:04 صبح
با عرض پوزش استرس حاصل از کار روی این پروژه باعث شد همه حواسم فقط روی مشکلم متمرکز بشه قصد و نیت بدی نداشتم و ممنون میشم اگه با کمک شما دوستان مشکلم حل بشه
میخوام پرمحتوا سوالمو مطرح کنم تا واسه دوستان خوب جا بیفته برنامه از چه قراره
یک برنامه نوشتم که ماموریت های کارکنان مخابرات رو ثبت میکنه
این فرم ثبت ماموریت

http://8pic.ir/images/7kvmkkmksxep5oajfmgt.jpg (http://8pic.ir/)

1- من از تکنولوژی ADO.Net استفاده کردم
2- ویژوال استدیو 2010 پایگاه داده من SQL SERVER 2008
3- بنده یه متد نوشتم که تاریخ شمسی رو توی تکست باکس های مخصوص تاریخ فراخوانی میکنه (توی تصویر قسمت تاریخ هستش)
4- فیلدهای تاریخ آغاز ماموریت m_date و تاریخ پایان کار m_date1 هستش و اسم جدول tbl_mamooriat و اسم پایگاه داده من db_mokhaberat هستش

http://8pic.ir/images/ma8l13rdubzp7z2e69ad.jpg (http://8pic.ir/)

حالا میخوام ماموریت های مثلا فقط ماه شهریور رو برام سرچ کنه و بیاره توی دیتا گریدم و از این ماموریتهای سرچ شده ی این ماه یک گزارش بگیرم؟؟؟

محمد آشتیانی
پنج شنبه 13 شهریور 1393, 01:46 صبح
سلام مجدد
برای این کار و اینکه بتونی سرچ و مرتب سازی درستی روی تاریخ های شمسی داشته باشی (که البته به صورت 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;
}



شما فقط کانکشن استرینگ رو بنابر نیاز خودت اصلاح کن.

موفق باشید.

hossein3p2p
پنج شنبه 13 شهریور 1393, 02:34 صبح
این متد رو نوشتم واسه گرفتن تاریخ برای 2تا تکست باکسم کا تاریخ آغاز ماموریت و تاریخ پایان کار رو میخوان
http://8pic.ir/images/rth3vrf2uqhwiupxj298.jpg (http://8pic.ir/)

محمد آشتیانی
پنج شنبه 13 شهریور 1393, 02:52 صبح
یعنی برای 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 کاراکتری) تو دیتابیس هم ذخیره کنی دیگه مشکلی نخواهی داشت از بابت تاریخ

hossein3p2p
پنج شنبه 13 شهریور 1393, 23:16 عصر
این دو خط رو اضافه کردم
http://8pic.ir/images/yyh8eb9q0z5l2lbw7xal.jpg (http://8pic.ir/)
این ارور ها رو گرفتم؟؟

alireza_g698
پنج شنبه 13 شهریور 1393, 23:26 عصر
این دو خط رو اضافه کردم
http://8pic.ir/images/yyh8eb9q0z5l2lbw7xal.jpg (http://8pic.ir/)
این ارور ها رو گرفتم؟؟

سلام وقتی کپی کردین این یه تیکه اشتباه شده123093

hossein3p2p
پنج شنبه 13 شهریور 1393, 23:53 عصر
آقا تا اینجا موفق شدیم که 10 کاراکتر توی بانک دخیره کنیم
حالا توی فرم زیر
http://8pic.ir/images/kgb8l9z77om6sg354ia7.jpg (http://8pic.ir/)

قصد داریم عملیات سرچ رو انجام بدیدم
اطلاعات:
1- نام تکس باکس ها (txtdate و txtdate1)
2- نام دکمه جستجو (btnSearch)
--------------------------------------------------

نکته: من از تکنولوژی
ADO.Net
استفاده کردم
ویژوال استدیو 2010 پایگاه داده من
SQL SERVER 2008

فیلدهای تاریخ آغاز ماموریت
m_date
و تاریخ پایان کار
m_date1
هستش و اسم جدول
tbl_mamooriat
و اسم پایگاه داده من
db_mokhaberat
هستش
-------------------------------------------------

حالا چجوری سرچ کنم اطلاعاتم رو طبق این دو تا تکست باکس؟؟

محمد آشتیانی
جمعه 14 شهریور 1393, 02:09 صبح
سلام
تو پست شماره ۱۳ دقیقا همین سوال رو توضیح دادم ، فقط موقع فراخوانی متد dbsearch بعنوان پارامتر ، تاریخ های توی تکست باکس ها رو بنویس

hossein3p2p
جمعه 14 شهریور 1393, 02:14 صبح
متوجه نمیشم اینجاشو
میشه یه کم راحت تر واسم توضیح بدی؟
لطفا با توجه به تصویر پست 18 برام توضیح بدین ممنون میشم؟؟؟
http://8pic.ir/images/9vfxn9hf3kayj2cgx1pg.jpg (http://8pic.ir/)
یعنی اینجوری بنویسم کد ها رو؟؟؟

------------------------------------------
اینم کلاس برنامم هستش :


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();
}


}
}

محمد آشتیانی
جمعه 14 شهریور 1393, 02:41 صبح
ببین دوست عزیز ، مگه شما توی تکست باکس ها برای جستجو تاریخ شروع و پایان وارد نمیکنی؟
اگر اینطوره ، شما موقع فراخوانی اون متد که بالاتر عرض شدبه این ترتیب عمل میکنی


dgvMamoriat.DataSource = dbSearch(txtdate.Text, txtdate1.Text);

hossein3p2p
جمعه 14 شهریور 1393, 15:32 عصر
وقتی رو دکمه جستجو کلیک میکنم این ارور رو میده؟
http://8pic.ir/images/jo2z1rzcnv557gohpbo1.jpg (http://8pic.ir/)
به نظرت چیه مشکلم؟

feryt20
جمعه 14 شهریور 1393, 15:44 عصر
وقتی رو دکمه جستجو کلیک میکنم این ارور رو میده؟
http://8pic.ir/images/jo2z1rzcnv557gohpbo1.jpg (http://8pic.ir/)
به نظرت چیه مشکلم؟

احتراما به شما توصیه میکنم قبل از برنامه نویسی چندتا کتاب بخونید چندتا فیلم آموزشی ببینید که حداقل مبانی برنامه نویسی رو یاد بگیرید

ایراد از نام table
نامی که توی دیتا بیس واسه این کار انتخاب کردین رو جای اون خط بنویسین

hossein3p2p
جمعه 14 شهریور 1393, 16:02 عصر
دمت گرم داش فری tbl_mamoriat بود من نوشته بودم tbl_mamooriat چشم کتابم میخونم
مرسی تا اینجا درست شد.
حالا مونده گزارش گیریش که تو stimulreport میخوام انجام بدم
میشه بگید چطور باید اینکارو انجام بدم؟

feryt20
جمعه 14 شهریور 1393, 16:19 عصر
نرم افزار استیمول سافت رو دانلود کن (من از 2010 استفاده میکنم)
نصب کن
یه سرچ کوچیک بکنی 2 تا فیلم آموزشی دانلود کنی راحت میتونی طرز استفاده شو یاد بگیری

hossein3p2p
جمعه 14 شهریور 1393, 16:27 عصر
نرم افزار استیمول ریپورت 2010 رو نصب کردم
تمام فیلم های آموزشی که تو اینترنت هست در مورد این موضوع گزارش گیری رو دیدم
ولی هیچکدومشون در مورد گزارش گیری بین 2 تا تاریخ خاص نبوده
میتونید کمک کنید که تو این تاپیک حداقل برای اولین بار این کار رو انجام بدیم؟؟؟

مهدی اسماعیلی
جمعه 14 شهریور 1393, 16:41 عصر
تمام فیلم های آموزشی که تو اینترنت هست در مورد این موضوع گزارش گیری رو دیدم
ولی هیچکدومشون در مورد گزارش گیری بین 2 تا تاریخ خاص نبوده
سلام
طبق این آموزش خواهید توانست DataTable را به Stimulsoft ارسال کنید و به راحتی کوئری مورد نظرتون را چاپ کنید.
http://s5.picofile.com/file/8139037226/Amoozesh_Stimulsoft.zip.html

آموزش از pro_man (http://barnamenevis.org/member.php?215381-pro_man)

hossein3p2p
جمعه 21 شهریور 1393, 14:41 عصر
من تو قسمت گزارش گیری با این ارور روبرو شدم؟
کسی میدونه قضیه چیه؟؟؟
http://8pic.ir/images/0r2r22qgcdukeawc865c.jpg (http://8pic.ir/)

دلیل این ارور چیه به نظرتون؟



http://8pic.ir/images/kgb8l9z77om6sg354ia7.jpg (http://8pic.ir/)

قصد داریم عملیات گزارشگیری رو انجام بدیدم
اطلاعات:
1- نام تکس باکس ها (txtdate و txtdate1)
2- نام دکمه جستجو (btnReport)
--------------------------------------------------

نکته: من از تکنولوژی

ADO.Net

استفاده کردم
ویژوال استدیو 2010 پایگاه داده من

SQL SERVER 2008


فیلدهای تاریخ آغاز ماموریت

m_date

و تاریخ پایان کار

m_date1

هستش و اسم جدول

tbl_mamooriat

و اسم پایگاه داده من

db_mokhaberat

هستش

-------------------------------------------------
چجوری میتونم با استیمول ریپورت وقتی نتیجه سرچ بدست اومد گزارش بگیرم؟

hghprogramer
جمعه 21 شهریور 1393, 16:31 عصر
بهترین راه اینه که تاریخ ها رو در دیتابیس از نوع datetime در نظر بگیری و موقع ثبت رکورد ابتدا تکس باکس رو تبدیل به تاریخ میلادی کنی و بعد ذخیره کنی و هنگام جستجو هم تکس باکس ها رو تبدیل به میلادی کنی و در دستور سلکت همون تاریخ های میلادی رو بیاری

mohammad reza beizavi
جمعه 21 شهریور 1393, 18:13 عصر
بهترین راه اینه که تاریخ ها رو در دیتابیس از نوع datetime در نظر بگیری و موقع ثبت رکورد ابتدا تکس باکس رو تبدیل به تاریخ میلادی کنی و بعد ذخیره کنی و هنگام جستجو هم تکس باکس ها رو تبدیل به میلادی کنی و در دستور سلکت همون تاریخ های میلادی رو بیاری
درود بر تمام دوستان گرامی
بهترین راه رو درست فرمودید، اما راه بهتری هم هست که می تونید تاریخ شمسی رو با تمام امکاناتش در دیتابیس SQL Server داشته باشید. (تاکید می کنم با تمام امکانات)
می تونید برای اطلاعات بیشتر این مطالب رو از جناب آقای قنادی بخونید. بسایر جالب و کاربردی و با سرعت بالا. ما از این نوع داده در آخرین پروژه شرکت که پروژه ای با جداول بزرگ هست نیز استفاده کردیم که بسایر عالی جواب خودش رو پس داده
قسمت اول (http://www.dotnettips.info/post/1297/%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%DB%8C%DA%A9-datatype-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%86%DA%AF%D9%87%E2%80%8C%D8%AF%D8%A7%D8%B1%DB%8 C-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%AE%D9%88%D8%B1%D8%B4%DB%8C%D8%AF%DB%8C-1)
قسمت دوم (http://www.dotnettips.info/post/1299/%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%DB%8C%DA%A9-datatype-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%86%DA%AF%D9%87%E2%80%8C%D8%AF%D8%A7%D8%B1%DB%8 C-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%AE%D9%88%D8%B1%D8%B4%DB%8C%D8%AF%DB%8C-2)
قسمت سوم (http://www.dotnettips.info/post/1303/%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%DB%8C%DA%A9-datatype-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%86%DA%AF%D9%87%E2%80%8C%D8%AF%D8%A7%D8%B1%DB%8 C-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%AE%D9%88%D8%B1%D8%B4%DB%8C%D8%AF%DB%8C-3)

hossein3p2p
شنبه 22 شهریور 1393, 18:55 عصر
آخرشم هیچکی نتونست کمک کنه

hossein3p2p
شنبه 22 شهریور 1393, 21:42 عصر
با سلام برنامه ای نوشتم که اطلاعات داخل گرید ویو رو برام سرچ میکنه بر اساس دو تا تاریخ
http://8pic.ir/images/cla9us1fo3v5htg7rygk.jpg (http://8pic.ir/)


حالاتوی رویداد Form_Load این صفحه یه متد نوشتم که این جستجو رو واسم انجام میده
http://8pic.ir/images/fcy6qq0z6soxvcodvhcq.jpg (http://8pic.ir/)

http://8pic.ir/images/2xj9l9gpgn02z2th7u14.jpg (http://8pic.ir/)


برنامه رو با تکنولوژی ADO در #C با بانک اطلاعاتی sql نوشتم

حالا میخوام گزارش بگیرم از اطلاعات فقط جستجو شده با توجه اطلاعاتی که در بالا ذکر کردم چه فرمولی رو باید زیر این دکمه گزارش بنویسم:
http://8pic.ir/images/sq517mc4i29nf9g75126.jpg (http://8pic.ir/)


لطفا قطعه کدش رو واسم توضیح بدید با تشکر؟؟؟

علی فتحی
سه شنبه 08 خرداد 1397, 01:37 صبح
سلام اینم کد دوستان عزیز مطلب رو خیلی پیچوندند



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();