PDA

View Full Version : سوال: مشکل در تفاوت اعداد فارسی و انگلیسی که در ظاهر یکی هستن .. برای جستجو در بانک



farboodj1375
دوشنبه 03 شهریور 1393, 02:06 صبح
با عرض سلام و خسته نباشید خدمت همه دوستان و اساتید سایت.فکر میکنم مشکل از عنوان تاپیک مشخص باشه!ببینید اگه مثلا کاربر توی برنامه یه رکورد ثبت کنه که مثلا محتوای یکی از فیلدها "فیلم۱" باشه.اگه هنگامی که کاربر اون عدد ۱ رو وارد میکنه کیبوردش روی فارسی باشه , هنگامی که میخواد عمل جستجو رو هم انجام بده , توی کادر جستجو باید اون عدد 1 رو در حالی که کیبورد روی انگلیسی هست تایپ کنه. کسی میدونه چطوری میتونم این مشکلو رفع کنم؟ پیشاپیش ممنون.

hadi vafaii
دوشنبه 03 شهریور 1393, 03:04 صبح
خب میتونی تکست باکستو جوری کد نویسی کنی که فقط حروف فارسی یا انگلیسی رو بگیره

farboodj1375
دوشنبه 03 شهریور 1393, 14:24 عصر
ممنون از پاسختون.
درسته . ولی مشکل این هست که اون فیلد برای مثلا نام فیلم هست. که کاربر باید حق داشته باشه هم کاراکترهای فارسی و هم انگلیسی وارد کنه. و واسه عدد، کاربر چه کیبوردش رو انگلیسی باشه چه رو فارسی، اون عدد رو فارسی میبینه (چون RightToLeft تکست باکس True هست) و درنتیجه متوجه این تفاوت نمیشه.
ممنون میشم راهنمایی کنید.

veniz2008
دوشنبه 03 شهریور 1393, 22:02 عصر
با عرض سلام و خسته نباشید خدمت همه دوستان و اساتید سایت.فکر میکنم مشکل از عنوان تاپیک مشخص باشه!ببینید اگه مثلا کاربر توی برنامه یه رکورد ثبت کنه که مثلا محتوای یکی از فیلدها "فیلم۱" باشه.اگه هنگامی که کاربر اون عدد ۱ رو وارد میکنه کیبوردش روی فارسی باشه , هنگامی که میخواد عمل جستجو رو هم انجام بده , توی کادر جستجو باید اون عدد 1 رو در حالی که کیبورد روی انگلیسی هست تایپ کنه. کسی میدونه چطوری میتونم این مشکلو رفع کنم؟ پیشاپیش ممنون.
ُسلام.
چندین راه برای این کار وجود داره. یه راه ساده می تونه چک کردن در سمت برنامه کاربردی شما و در سمت کدهای سی شارپ با استفاده از متد Replace باشه . کد زیر عدد 1 انگلیسی رو جایگزین عدد ۱ فارسی میکنه :

TxtMovie.Text.Replace('۱', '1');
راه بالا در واقع پیشگیری است. اگر هم داده هایی رو دارید که بصورت اعداد فارسی ذخیره شدن، می تونید با کد زیر اونها رو تصحیح کنید (درمان). منظور از MovieName نام فیلدی است که نام فیلم رو نگهداری میکنه :

Update TblMovie Set MovieName = Replace(MovieName,'۱','1')
کدهای بالا رو می تونید در یک خط به سایر ارقام هم تعمیم بدید :

TxtMovie.Text.Replace("۱", "1").Replace('۲','2');

farboodj1375
سه شنبه 04 شهریور 1393, 01:04 صبح
خیلی ممنون از پاسختون . درسته با این روش میشه این مشکلو دور زد.

و یه سوال دیگه . اگه نوع فیلد در یانک اس کیو ال از نوع int باشه و کاربر عدد رو فارسی بخواد ثبت کنه ، برنامه ارور میده . نمیشه عدد فارسی ذخیره کرد؟ باید با همین روش انگلیسیش کنیم حتما؟! راه دیگه ای نداره؟
بازم ممنون از جوابتون.

veniz2008
سه شنبه 04 شهریور 1393, 10:23 صبح
اگه نوع فیلد در یانک اس کیو ال از نوع int باشه و کاربر عدد رو فارسی بخواد ثبت کنه ، برنامه ارور میده . نمیشه عدد فارسی ذخیره کرد؟ باید با همین روش انگلیسیش کنیم حتما؟! راه دیگه ای نداره؟
بازم ممنون از جوابتون.
اعداد فارسی برای sql server ناشناخته است، بنابراین باید به هر روشی که تمایل دارید (یا سمت سی شارپ یا سمت sql) ورودی های عددی رو کنترل کنید که مقدار صحیح درج بشه.
اگر تعداد جاهایی که باید عدد وارد کنید زیاد هستش برای راحتی کار خودتون یک کلاس بنویسید که نتیجه خروجی اون برگشت اعداد فارسی بصورت انگلیسی هست. اینجوری فقط یکبار کد تبدیل رو می نویسید و دیگه هر بار از دستور Replace استفاده نمی کنید.
موفق باشید.