View Full Version : مشکل با فیلدهای فارسی در فیلتر کردن خروجی
veniz2008
جمعه 21 مهر 1391, 09:58 صبح
خدایا توبه از دست این زبان شیرین پارسی.:گریه:
من دو تا جدول به نام های TblActiveExam(آزمون های فعال داوطلب) و TblTypeExam( نوع آزمون) دارم که فیلد مشترکشون TypeExamID هستش. حالا میخوام همزمان از این دو جدول شماره دانشجویی، کد نوع آزمون و (نام)نوع آزمون رو بیرون بکشم به شرطی که نوع آزمون اون شامل "پیشرفت تحصیلی" نباشه.
من کوئری زیر رو نوشتم ولی پیشرفت تحصیلی رو هم میاره.(کلمه "پیشرفت تحصیلی" رو از خود جدول هم کپی و پیست کردم ولی فرقی نکرد. با کلمه "تیزهوشان" هم تست کردم ولی بازم کلمه تیزهوشان در خروجی میاد). این مشکل رو با فیلدهای فارسی تقریبا دارم.(دلیل کلمه تقریبا بخاطر اینه که مثلا براساس نام دانشجو که جستجو میکنم جواب میده ولی اینجا ...).
اینم بگم که از کلمه not like هم استفاده کردم ولی اونم بی تاثیر بود.
این کوئری که نوشتم :
select distinct StudentID,TblActiveExam.TypeExamID,TypeExam from TblActiveExam inner join TblTypeExam on TblActiveExam.TypeExamID = TblTypeExam.TypeExamID where StudentID = 22001111 and TblActiveExam.YearExam = 1391 and TypeExam != 'پیشرفت تحصیلی'
جدول آزمون های فعال :
93868
جدول نوع آزمون :
93869
veniz2008
جمعه 21 مهر 1391, 10:26 صبح
دوستان با تست های مختلفی که انجام دادم مشخص شد که مشکل از حرف "ی" هستش. یعنی اگر کوئری رو بصورت زیر بنویسم کلمه پیشرفت تحصیلی رو نمیاره(کلماتی که با حرف پ شروع نمیشن):
select distinct StudentID,TblActiveExam.TypeExamID,TypeExam from TblActiveExam inner join TblTypeExam on TblActiveExam.TypeExamID = TblTypeExam.TypeExamID where StudentID = 22001111 and TblActiveExam.YearExam = 1391 and TypeExam not like 'ﭘ%'
برای رفع این مشکل چه کاری باید کرد؟. من از حرف ﻲ عربی در جدولم استفاده کردم و در کوئری هم از حرف عربی استفاده کردم ولی بازم جواب درست نمیده. انگار حالیش نیست که حرف ی هم وجود داره(چه بصورت فارسی چه بصورت عربی).
FastCode
جمعه 21 مهر 1391, 15:11 عصر
از Collation ه Persian_CI_AS استفاده کنید.ممکنه حل بشه.
veniz2008
جمعه 21 مهر 1391, 16:40 عصر
اگر مشکلت با فارسی کردن collation حل نشد
داخل جدول نوع آزمون یک فیلد کلید از نوع int تعریف کنید برای کد نوع آزمون. بعد در جستجوها به جای اسم نوع آزمون از کدنوع آزمون استفاده کنید.
خوب الان داخل جدول نوع آزمون یک کد دارم دیگه( منظورم TypeExamID هست که منحصر بفردم هست).واسه سال بعد این کدها تغییر میکنه ولی نام ها همچنان باقی میمونن. من عملا نمیدونم سال بعدی پیشرفت تحصیلی معادل چه کدی میشه. خلاصه بگم شاخص واسه من کلمه "پیشرفت تحصیلی"هست.
در مورد توصیه جناب FastCode هم ، همون کار رو کردم ولی همچنان با حرف ی همون مشکل وجود داره. آیا امکان داره این "ی" دارای یونیکد خاصی باشه؟. من زبان فارسی ویندوزم( ویندوز7) رو از language کنترل پنل نصب کردم.(چون بعضی از دوستان میگن ممکنه ویندوز دستکاری شده باشه و زبان فارسی اون استاندارد نباشه!).
Nima_kyan
جمعه 21 مهر 1391, 19:33 عصر
همچنان با حرف ی همون مشکل وجود داره
محمد جان وقتی collation رو Arabic باشه و زبان سیستم ما فارسی باشه حرف ی به صورت فارسی ثبت میشه. حالا تو همون حالت وقتی میخوای گزارش بگیری از اطلاعات (select) و از حرف ی استفاده کنی این حرف ی رو عربی درنظر میگیره(چرا؟ نمیدونم) من امتحان کردم زبان عربی رو به سیستمت اضافه کن چند داده جدید ثبت کن و مجدد گزارش بگیر. مشکلی نداره.
*ولی collationفارسی رو با فارسی بودن زبان سیستم امتحان نکردم*
veniz2008
جمعه 21 مهر 1391, 22:23 عصر
همونطور که دوست عزیزم جناب Nima_kyan (http://barnamenevis.org/member.php?155260-Nima_kyan) گفتن، زبان عربی ( Arabic Bahrain) رواضافه کردم. اگر با عربی درون جدولم ذخیره کنم و عربی هم جستجو کنم مشکلی نیست و درست کار میکنه. ولی من کلی تکست باکس دارم که ورودی اونها فقط فارسی میگیره. آیا راهی هست که بتونم با یه بار کد نوشتن تمام تکست باکس ها رو در موقع نوشتن چک کنم که حروف ی و ک فارسی رو به عربی تبدیل کنم؟
Arash_janusV3
شنبه 22 مهر 1391, 00:55 صبح
درود بر شما
می بایست از ابتدا حروف ی و ک را درست وارد کنید
این دستور را برای textbox ها استفاده کنید
private static void txt_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == char.ConvertFromUtf32(1740).ToCharArray()[0])
{
e.KeyChar = Char.ConvertFromUtf32(1610).ToCharArray()[0];
}
if (e.KeyChar == char.ConvertFromUtf32(1705).ToCharArray()[0])
{
e.KeyChar = Char.ConvertFromUtf32(1603).ToCharArray()[0];
}
}
Arash_janusV3
شنبه 22 مهر 1391, 01:01 صبح
برای اطمینان خاطر شما باید هر چند وقت یکبار تمام ی و ک ها را در دیتابیس تبدیل کنید
یک کوئری هست من ندارم ولی در این تالار هستش
اون را پیدا کنید و هرچند یک بار به طور خودکار ازش استفاده کنید
موفق و پیروز باشید
Nima_kyan
سه شنبه 25 مهر 1391, 14:20 عصر
این هم یه روششه که دیگه نیازی نیست تو زبان میزبانمون تبدیل کاراکتر داشته باشیم.
select * from Tbl_Nomre where name like N'%مقدار مورد نظر%' or name like '%مقدار مورد نظر%'
با این کد حرف عربی وارد شده باشه یا فارسی نمایشش میده
veniz2008
سه شنبه 25 مهر 1391, 15:03 عصر
این هم یه روششه که دیگه نیازی نیست تو زبان میزبانمون تبدیل کاراکتر داشته باشیم.
select * from Tbl_Nomre where name like N'%مقدار مورد نظر%' or name like '%مقدار مورد نظر%'
با این کد حرف عربی وارد شده باشه یا فارسی نمایشش میده
بسیار عالی. کارت درست بود عزیز.
اين كد عینا برای من جواب نداد. در واقع مشکل در or دوم هست. ولی بهرحال همون N ای که آورده بودید کافی بود و من به اونی که میخواستم رسیدم. شاید دلیل اینکه or دوم برای من جواب نداد این باشه که من موقع ذخیره استورد پروسیجر اونو با utf8 ذخیره کردم.
بهرحال پاسخ شما برای من مفید بود. مرسی عزیز.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.