PDA

View Full Version : سوال: جستجو بین 2 تاریخ مشخص



veniz2008
شنبه 25 تیر 1390, 22:35 عصر
سلام،من یک جدول با 2 فیلد با نام های date1(از نوع char) و name_kala( از نوع nvarchar) دارم،حالا میخوام که اسامی تمام کالاهایی که بین 2 تاریخ مشخص ثبت شدن رو نشون بدم، 2 تا textbox روی فرمم گذاشتم که کاربر با وارد کردن تاریخ دلخواه،لیست کالاها رو ببینه، دستور select رو چطوری باید بنویسم؟،تشکر از راهنمایی دوستان.

Esmail Solhkhah
شنبه 25 تیر 1390, 22:51 عصر
چرا تو جدول دو تا تاریخ دارید؟

مبنای جستجو بر اساس تاریخ کدوم یکیه؟

اگه بر اساس date1 باشه :

string query = "Select name_kala From Kala Where Kala.date1 Between '" + txtDateAz.Text +
"' And '" + txtDateTa.Text + "'";

hosaini
یک شنبه 26 تیر 1390, 00:11 صبح
USE [biranCo]
GO
/****** Object: StoredProcedure [dbo].[SelectQueryDateReport] Script Date: 07/17/2011 00:27:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SelectQueryDateReport]
(
@StartDate nvarchar(50),
@EndDate nvarchar(50)

)
AS
SET NOCOUNT ON
SELECT CodeMahsol, Tsabt, Id, IdMahsol, NSargh, TRozaneh, SazandehKoreh, ToleKoreh, MinDama, MaxDama, Zmankol, ZmanEghamat, TedadmantagehPokt, NEstandard,
IdEmal, IdAmalChap, IdAmalLoab, ProductType, ProductTranceparencyType, ProductBrightness, IdColor, a, b, l, w, yi, JazbAb, Enbsat1, Enbsat2, Enbsat3, Enbsat4,
Iso10545Hcl, MSayeshiDoor, MSayeshiClass, LakClass1, ChanghColor, SockhHrarti, Azmonyakhzadgee, NameKarkaneh, Name, AmalAngob, NameLoab, NameChap,
Tranceparency, Type, Brightness, IsoMeliHcl, ChapKosk, Color, ExportKoshkon, FlatColor, NKoshkon, RotoColor, VaznAb, IdUser, ProjectOk, ElatAdamTaeed,
CodeMahsol1, OlvyatProject, StartDateProject, EndDate, MasolProject, BronsparyProject, Note, OkManager, RealEnd, OkMasolProjeh
FROM ViewMahsol1
where (StartDateProject >= @StartDate) AND (EndDate <= @EndDate)

veniz2008
یک شنبه 26 تیر 1390, 09:32 صبح
تشکر از راهنمایی دوستان،من دستور select رو طبق گفته دوستمون براساس date1 نوشتم ولی مشکلم اینه که مثلا از تاریخ 12/03/1383 تا 24/10/1389 فقط روز رو فیلتر میکنه(یعنی فقط کالاهایی رو نشون میده که روزشون بین 12 تا 24 بوده و ماه و سال رو بررسی و فیلتر نمیکنه)،من دستوری رو که نوشتم میذارم،مشکلش کجاست؟

"select name_kala from kala where date1 between '" + textBox1.Text +"' and '" +textBox2.Text +"'"

Esmail Solhkhah
یک شنبه 26 تیر 1390, 12:40 عصر
اگه شما تاریخ رو تو دیتابیس بصورت شمسی (1389/01/01) (varchar(10)) ذخیره کنید و تو تکست باکسها هم این موضوع رو لحاظ کنید موردی پیش نمیاد.

بررسی کنید ببینید کجا مورد دارید.

hardworker110
یک شنبه 26 تیر 1390, 12:59 عصر
بررسی کن ببین زمانی که داریم از تکس باکس میخونی به فرمت درست تاریخ را دریافت میکنی یا نه
و بعد در تبدیل رشته به تاریخ هم دقت بکن

veniz2008
یک شنبه 26 تیر 1390, 17:38 عصر
دوستان مشکلم حل نشد،به همون فرمتی که در sql ذخیره کردم(تاریخ رو شمسی و مثلا بصورت 1389/05/25 ذخیره کردم) به همین شکلم در textbox ها وارد میکنم ولی فقط روز رو بررسی و فیلتر میکنه،کسی ایده ای به نظرش نمیاد؟

Esmail Solhkhah
یک شنبه 26 تیر 1390, 21:22 عصر
اگه میشه کد بزارید برا بررسی

RIG000
یک شنبه 26 تیر 1390, 22:45 عصر
تشکر از راهنمایی دوستان،من دستور select رو طبق گفته دوستمون براساس date1 نوشتم ولی مشکلم اینه که مثلا از تاریخ 12/03/1383 تا 24/10/1389 فقط روز رو فیلتر میکنه(یعنی فقط کالاهایی رو نشون میده که روزشون بین 12 تا 24 بوده و ماه و سال رو بررسی و فیلتر نمیکنه)،من دستوری رو که نوشتم میذارم،مشکلش کجاست؟

"select name_kala from kala where date1 between '" + textBox1.Text +"' and '" +textBox2.Text +"'"
از OR به جای AND استفاده کن بببین درست میشه؟

veniz2008
دوشنبه 27 تیر 1390, 09:21 صبح
ممنون از توجه دوستان،من کدها و یه عکس از اجرا و خروجی برنامه رو میذارم.

SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog=test2;Integrated Security=True");
SqlDataAdapter Adapter = new SqlDataAdapter("select * from kala where date1 between '" + textBox1.Text +"' and '" +textBox2.Text +"'", con);
DataTable dt = new DataTable();
Adapter.Fill(dt);
dataGridView1.DataSource = dt;
اینم عکسی از خروجی برنامه:(همونطور که می بینید فقط روز رو فیلتر میکنه و ماه و سال رو فیلتر نمیکنه)
72572
http://barnamenevis.org/images/misc/pencil.png

sadra1234
دوشنبه 27 تیر 1390, 10:01 صبح
سلام
دوست عزیز کوئری رو به شکل زیر بنویس

"select * from kala where date1 >= '" + textBox1.Text +"' and date1<= '" +textBox2.Text +"'"
البته تاریخ توی sql باید nvarchar باشد

veniz2008
دوشنبه 27 تیر 1390, 10:26 صبح
بازم جواب نداد،واسه خودم هم عجیبه،یه درخواست از دوستان دارم،جسارته ولی اگه ممکنه همین مثال ساده رو واسم بنویسید و بزاریدش تا دانلودش کنم،شاید با دیدن برنامه شما مشکل کارم رو متوجه شم،سپاسگزارم از همه دوستان.

sadra1234
دوشنبه 27 تیر 1390, 12:06 عصر
سلام
مشکل این کد کجاست؟(خطا میده؟)
مطمئن باش این کد درسته ، من چند روز پیش برای انتخاب تاریخ از همین کد توی پروژه ای ازش استفاده کردم.
خودت یه جایی اشتباه می کنی

sadra1234
دوشنبه 27 تیر 1390, 12:14 عصر
ببین این کد بازم خطا میده:

using system.data.sqlclient
sqlconnection con = new sqlconnection();
sqlcommand cmd = new sqlcommand();
sqldataadapter da=new sqldataadapter();
dataset ds = new dataset();
string str = "Data Source = (local);Initial Catalog=test2;Integrated Security=True"

توی رویداد کلیک دکمه جستجو هم این کد ها رو وارد کن


con.connectionstring=str;
con . open();
cmd. commandtext="select * from kala where date1 >= '" + textBox1.Text +"' and date1<= '" +textBox2.Text +"'";
new sqldataadapter(cmd.commandtext,con).fill(ds,"kala");
datagridview1.datasource=ds.tables["kala"];
con.close();

Arsham**
دوشنبه 27 تیر 1390, 12:52 عصر
میتونی نوع فیلد تاریخ رو int بگیری و با یه تبدیل ساده میلادی به شمسی (در هنگام ثبت تاریخ) اون رو تو جدول بدون / ذخیره کنی
لیست کالاهای مورد نظرت هم به سادگی با مقایسه تاریخ اون کالا با تاریخ های وارد شده بدست میاد
مثلا
select name-kala where date1>@textbox1.text and date1<textbox2.text

veniz2008
دوشنبه 27 تیر 1390, 16:35 عصر
دوست عزیز sadra 1234 ، کد شما هم همون جواب رو میده که کد خودم نشون میداد،من برنامه رو میذارم،لطف کنید برنامه رو روی سیستم خودتون تست کنید ببینید مشکل از کجاست،این مساله خیلی جالب شده،همه دوستان میگن کد مشکل نداره ولی خروجی نامناسب نشون میده،تشکر از همه دوستان.برنامه با sql 2005 و vs 2005 هست.
72603

veniz2008
دوشنبه 27 تیر 1390, 23:13 عصر
کسی نیست مشکل کار رو به من بگه؟:گریه::گریه: