PDA

View Full Version : سوال: مشكل در جستجو بين دو تاريخ



ali_kashani
جمعه 24 خرداد 1387, 00:26 صبح
با سلام خدمت تمامي دوستان عزيزم

مي خواستم اين كد من را يك نگاهي بكنيد وبگوئيد مشكل از كجاست بانك من اكسس است و مي خواهم يك جستجو از روي تاريخ انجام دهم كه فيلد date_en از نوع date/time مي باشد كه با فشردن دكمه boutton3 بر روي اين خط((da3.fill(dt3) يك استثنا رخ ميدهدكه اين ايراد رامي گيرد
Data type mismatch in criteria expression


privatevoid button3_Click(object sender, EventArgs e)
{
int fYear, fMonth, fDay, sYear, sMonth, sDay;
fYear = System.Convert.ToInt16(txtfirsttime.Text.Substring (0, 4));
fMonth = System.Convert.ToInt16(txtfirsttime.Text.Substring (5, 2));
fDay = System.Convert.ToInt16(txtfirsttime.Text.Substring (8, 2));
sYear = System.Convert.ToInt16(txtseconddate.Text.Substrin g(0, 4));
sMonth = System.Convert.ToInt16(txtseconddate.Text.Substrin g(5, 2));
sDay = System.Convert.ToInt16(txtseconddate.Text.Substrin g(8, 2));
PersianCalendar pc = newPersianCalendar();
DateTime firsttime = pc.ToDateTime(fYear, fMonth, fDay, 0, 0, 0, 0);
DateTime lasttime = pc.ToDateTime(sYear, sMonth, sDay, 0, 0, 0, 0);
da3 = newOleDbDataAdapter("select * from detail_e where (date_en > '" + firsttime + "' ) and (date_en < '" + lasttime + "')", con);
//OleDbCommandBuilder cb3 = new OleDbCommandBuilder(da3);
da3.Fill(dt3);
int pos10;
for (pos10 = 0; pos10 < dt3.Rows.Count; pos10++)
{
ListViewItem f;
f = listView1.Items.Add(dt3.Rows[pos10]["ID"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["name_farsi"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["code_fanni"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["code_kala"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["num"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["tahvil_g"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["tahvil_d"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["group_g"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["date_t"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["shift"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["sh_form"].ToString());
f.SubItems.Add(dt3.Rows[pos10]["commentkh"].ToString());
}
}

linux
جمعه 24 خرداد 1387, 01:50 صبح
این dt3 را کجا ساختی؟ بجای فرستادن دستور اینجور از between استفاده کن و با پارامترها کار کن

ali_kashani
جمعه 24 خرداد 1387, 04:05 صبح
این dt3 را کجا ساختی؟ بجای فرستادن دستور اینجور از between استفاده کن و با پارامترها کار کن
dt3 را در داخل كلاس form از نوع datatable ساختم .
چه جوري از between استفاده كنم؟

مهدی رحیم زاده
جمعه 24 خرداد 1387, 09:06 صبح
می تونی برای فیلد های تاریخ از رشته ها استفاده کنی فقط باید دقت کنی که تاریخ ها کامل بخوره یعنی به عنوان مثال در 1387/2/1 تاریخ همراه با صفرهاش و کامل بخوره یعنی 1387/02/01 .
من خودم همیشه از این استفاده می کنم و درست هم عمل می کنه .
موفق باشید .

haghft
جمعه 24 خرداد 1387, 11:27 صبح
شما تاریخ ها رو DateTime نکنین بلکه به صورت string استفاده کرده و سپس از دستور between در OLEDB استفاده کنید.من خودم تو پروژه هام این کارو کردم همیشه بدون عیب جواب داده.
:چشمک::چشمک:

Mrs.Net
جمعه 24 خرداد 1387, 12:34 عصر
یک oledbcommand بساز و برای تاریخهات بجای string از کامند پارامتر استفاده کن. و شرط هم بصورتی که نوشتی قرار بده.
اگر نفهمیدی بگو کدش بزارم.

linux
جمعه 24 خرداد 1387, 12:45 عصر
می تونی برای فیلد های تاریخ از رشته ها استفاده کنی فقط باید دقت کنی که تاریخ ها کامل بخوره یعنی به عنوان مثال در 1387/2/1 تاریخ همراه با صفرهاش و کامل بخوره یعنی 1387/02/01 .
من خودم همیشه از این استفاده می کنم و درست هم عمل می کنه .
موفق باشید .
روش اشتباه خودتان را به دیگران توصیه نکنید

linux
جمعه 24 خرداد 1387, 12:46 عصر
شما تاریخ ها رو DateTime نکنین بلکه به صورت string استفاده کرده و سپس از دستور between در OLEDB استفاده کنید.من خودم تو پروژه هام این کارو کردم همیشه بدون عیب جواب داده.

:چشمک::چشمک:

شما هم روش اشتباه خودتان را به دیگران یاد ندهید.

مهدی رحیم زاده
جمعه 24 خرداد 1387, 18:39 عصر
روش اشتباه خودتان را به دیگران توصیه نکنید
سلام دوست گلم
ممنون بابت توجهتون به پست ها . اما من یادم نمیاد که جایی نوشته باشم روشی که استفاده می کنم درسته !!! من گفتم که از این روش استفاده می کنم چون هم سادست و هم کارآمد و تا حالا هم با اون به مشکلی بر نخوردم و اینکه برای ذخیره تاریخ شمسی هم راه خیلی ساده ایه .

haghft
جمعه 24 خرداد 1387, 19:09 عصر
شما هم روش اشتباه خودتان را به دیگران یاد ندهید.
اگه شما راه بهتری دارین کد دقیق و بدون عیبشو بذارین.
:قهقهه::شیطان:

linux
جمعه 24 خرداد 1387, 23:17 عصر
اگه شما راه بهتری دارین کد دقیق و بدون عیبشو بذارین.
:قهقهه::شیطان:

امیدوارم به کارتون بیاید.

ali_kashani
شنبه 25 خرداد 1387, 16:17 عصر
سلام خدمت دوستان عزيزم كه سعي در راهنمايي اين جانب دارند من با اين مشكل زماني برخوردم كه مجبور شدم از Database اكسس استفاده نمايم چون زماني كه از Sqlserverاستفاده مي كنم اين مشكل را ندارم و راحت بين دو تاريخ جستجو ميكنم ، به اين ترتيب كه يك DataSet درست مي كنم و جدول مورد نظر را به اين DataSet اضافه مي كنم و روي DataAdapter كليك راست مي كنم و يك گزارش جديد درست مي كنم و در ان گزارش دو متغير تعريف مي كنم و همين دستور SQL را انجا قرار مي دهم و وقتي اين DataAdapter را Fill ميكنم به طور اتوماتيك دو مقدار DateTime از من ميگيرد و به راحتي جستجو انجام مي شود ولي براي DtaBase اكسس همين كار را انجام ميدهم در هنگام Fill كردن DataAdapter اين دو مقدار را دريافت نمي كند

با تشكر

ali_kashani
شنبه 25 خرداد 1387, 16:38 عصر
با تشكر از Linux ، مثال خيلي عالي بود و مشكلم حل شد اگر وقت داشتيد اين مسئله كه گفتم را امتحان نمائيد.

linux
شنبه 25 خرداد 1387, 22:30 عصر
سلام خدمت دوستان عزيزم كه سعي در راهنمايي اين جانب دارند من با اين مشكل زماني برخوردم كه مجبور شدم از Database اكسس استفاده نمايم چون زماني كه از Sqlserverاستفاده مي كنم اين مشكل را ندارم و راحت بين دو تاريخ جستجو ميكنم ، به اين ترتيب كه يك DataSet درست مي كنم و جدول مورد نظر را به اين DataSet اضافه مي كنم و روي DataAdapter كليك راست مي كنم و يك گزارش جديد درست مي كنم و در ان گزارش دو متغير تعريف مي كنم و همين دستور SQL را انجا قرار مي دهم و وقتي اين DataAdapter را Fill ميكنم به طور اتوماتيك دو مقدار DateTime از من ميگيرد و به راحتي جستجو انجام مي شود ولي براي DtaBase اكسس همين كار را انجام ميدهم در هنگام Fill كردن DataAdapter اين دو مقدار را دريافت نمي كند

با تشكر
راستش من از اکسس استفاده نمی کنم و این مثال را برای شما درست کردم،
اگر به یک دیتابیس جم و جور احتیاج دارید که حجم کمی داشته باشه و کار شما را راه بندازد من sql server compact edition را پیشنهاد می کنم