PDA

View Full Version : مشکل در سرچ حرف ی بعد از تبدیل به فارسی



shaima
شنبه 16 آبان 1388, 09:36 صبح
سلام
تو برنامه ام یه کمبوباکس دارم که اطلاعاتش رو از یه فیلد از جدول میاره و خاصیت autocomplete اش هم ست شده و برای سرچ یه نام ازش استفاده می کنم,
من در سرچ حرف ک و ی مشکل داشتم به دلیل اینکه اطلاعات دیتابیس با کیبورد عربی وارد شده بود و کیبورد من فارسی بود, با استفاده از این کد:



update member
set member_last_name_vc=replace(member_last_name_vc,N' ك',N'ک')
update member
set member_last_name_vc=replace(member_last_name_vc,N' ي',N'ی')


همه اطلاعات دیتابیس رو به فارسی تبدیل کردم و یه تریگر هم برای تیبلم نوشتم بعد از آپدیت و اینسرت حروف ک و ی رو به فارسی تبدیل کنه, برای حرف ک مشکل حل شد و سرچ به طور کامل انجام میشه ولی حرف ی وقتی فارسی میشه فقط موقع نوشتن کلمه autocomplete به درستی کار میکنه ولی اون کلمه تو دیتابیس ÷یدا نمیشه و اطلاعات دیگه اش نمایش داده نمیشه, مشکل چیه؟!
ممکنه ربطی به کالکشن دیتابیسم داشته باشه؟ کالکشنم arabic_cs_as_ks_ws هست.

nkhozooii
شنبه 16 آبان 1388, 12:41 عصر
معمولا كالكشن صحيح Arabic_CI_AI انتخاب مي شود . در مورد حرف ي هم سه نوع ي با كدهاي اسكي زير وجود دارد:

ى 1609 Arabic Windows 2k or higher (Alt + 238)
ی 1610 Arabic Windows 98 (Alt + 239)

ی 1740 Windows XP

mustafa13
شنبه 16 آبان 1388, 13:13 عصر
سلام
در صورتی که مشکلتون حل نشد می توانی به جای تایپ خود حرف ی از شیفت+ط استفاده کن ي در جستجو مشکل حل می شود

shaima
شنبه 16 آبان 1388, 14:26 عصر
معمولا كالكشن صحيح Arabic_CI_AI انتخاب مي شود . در مورد حرف ي هم سه نوع ي با كدهاي اسكي زير وجود دارد:

ى 1609 Arabic Windows 2k or higher (Alt + 238)
ی 1610 Arabic Windows 98 (Alt + 239)

ی 1740 Windows XP

کالکشن رو تغییر دادم ولی فرقی نکرد, بعد من نگرفتم این کدهای اسکی رو که گفتید چه جوری باید استفاده کنم!



سلام
در صورتی که مشکلتون حل نشد می توانی به جای تایپ خود حرف ی از شیفت+ط استفاده کن ي در جستجو مشکل حل می شود


بله با اینی که میگید مشکل حل میشه ولی اصل مشکل پابرجاست بعد من نمی تونم به کاربر بگم به جای ی از شیفت و ط استفاده کنه که :(

moharrami
شنبه 16 آبان 1388, 15:04 عصر
شما می تونید موقعی که می خوایید از رشته تون استفاده کنید همه ی "ی"ها رو به "ي" تغییر بدید

str.Replace('ی','ي');

nkhozooii
دوشنبه 18 آبان 1388, 12:41 عصر
استفاده از كد اسكي :



char s;
int ascii=1740;
s=(char)ascii

كد در كد بالا به اين طريق كد را به كاراكتر تبديل مي كني يا برعكس.
در مورد عمل Replace هم به اين صورت مي شود:


string Str = txt.Replace((char)1740, (char)1610);

captain_black81
دوشنبه 18 آبان 1388, 18:04 عصر
میتونی توی سرچت هردو حالتو بذاری
مثلا
select * from table where name like N'%myName(persian)%' or name like'%myName(persian)%' ok?

HBRayan
دوشنبه 18 آبان 1388, 21:52 عصر
بهتره KeyPreview فرم رو فعال کنی و کد زیر رو در رویداد KeyPress بنویسی
IF Key = #152 Then Key := #223;
IF Key = #236 Then Key := #237;
اولی برای رفع مشکل حرف ک و دومی برای حرف ی

Happy_davood
سه شنبه 19 آبان 1388, 11:53 صبح
سلام
بهترین روش برای خلاص شدن از این مشکل این هست اصلاً اجازه ندید تا انواع مختلف کاراکتر های "ی" یا "ک" وارد برنامه بشه . روش های خیلی اصولی و فنی برای انجام این کار هست . مثلاً در KeyDown فرم این کاراکتر ها رو اصلاح کنید تا فرم اصلاً اجازه ورود این کاراکتر ها رو به برنامه نده . می تونید برای راحتی یه کلاس جدید از کلاس Form مشتق کنید (که "ی" ها رو اصلاح می کنه) و همیشه فرم های خودتون رو از این فرم ایجاد کنید . این کار یکبار برای همیشه شما رو راحت می کنه

حتی می تونید کنترل هایی مثل TextBox یا Combo رو هم مشتق کنید و این امکان رو براشون ایجاد کنید و همیشه به جای TextBox عادی از TextBox مشتق شده استفاده کنید . البته روش مشتق کردن Form بهتر از این هست که تک به تک کنترل ها رو مشتق کنید . هرچند در پروژه های بزرگ عملاً به این کار نیاز میشه (سفارشی کردن تقریباً تمام کنترل ها)

kia1349
سه شنبه 19 آبان 1388, 12:12 عصر
ما هم توی سازمانمون مشکلات مشابهی داشتیم که با اجرای این اسکریپت سعی کردیم حلش کنیم
یه نگاهی بهش بندازید شاید به دردتون خورد




USE yourDB;

DECLARE @Table NVARCHAR(MAX),
@Col NVARCHAR(MAX)

DECLARE Table_Cursor CURSOR
FOR

SELECT a.name, --table
b.name --col
FROM sysobjects a,
syscolumns b
WHERE a.id = b.id
AND a.xtype = 'u' --User table
AND (
b.xtype = 99 --ntext
OR b.xtype = 35 -- text
OR b.xtype = 231 --nvarchar
OR b.xtype = 167 --varchar
OR b.xtype = 175 --char
OR b.xtype = 239 --nchar
)

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @Table,@Col
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC (
'update [' + @Table + '] set [' + @Col +
']= REPLACE(REPLACE(CAST([' + @Col +
'] as nvarchar(max)) , NCHAR(1740), NCHAR(1610)),NCHAR(1705),NCHAR(1603)) '
)

FETCH NEXT FROM Table_Cursor INTO @Table,@Col
END CLOSE Table_Cursor DEALLOCATE Table_Cursor

Happy_davood
سه شنبه 19 آبان 1388, 12:27 عصر
ما هم توی سازمانمون مشکلات مشابهی داشتیم که با اجرای این اسکریپت سعی کردیم حلش کنیم
یه نگاهی بهش بندازید شاید به دردتون خورد


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

aliprf
سه شنبه 19 آبان 1388, 14:56 عصر
براي تبديل اين حروف از كد زير استفاده كنيد

publicstring correct(string str)
{
char[] ch = str.ToCharArray();
char[] ch1=newchar[ch.Length];
string temp="";
for (int i = 0; i < str.Length; i++)
{
if (ch[i] == 'ی')
ch1[i] = 'ï';
else
ch1[i] = ch[i];
}
for(int i=0;i<ch1.Length;i++)
temp+=ch1[i];
return temp;
}