PDA

View Full Version : حرفه ای: در جستجو کردن دیتابیس به حرف ی که میرسد جدول خالی میشود



davidrobert
پنج شنبه 30 خرداد 1392, 21:48 عصر
سلام بر بچه های برنامه نویس من در دات نت با یه باگ بزرگ بر خورد کردم و با یکی از بچه های برنامه نویس هم صحبت کردم ایشون هم همین مشکلی رو داشت . من یه پروژه ایجاد کردم داخل این پروژه امدم اطلاعات رو داخل دیتاگرید نشان دادم و اطلاعات رو نشان داد.و امدم دستور جستجو رو قرار دادم برای جستجو اطلاعات ولی وقتی مقداری رو جستجو میکنم ولی وقتی به حرف ی میریسم اطلاعات رو خالی میکنه من امد اسم سعید رو جستجو کنم به حرف ی سعید رسید داخل دیتاگرید خالی شد و اسم رضا رو امدم جستجو کنم قشنگ رضا رو گشت و اورد و همچنین عدد رو هم خوب میگرده و مقدار که انگلیسی باشه ولی نمی دانم چرا با حرف یه مشکل داره نمیدانم با چه حرف های دیگه هم ایراد داره خواهشن اگه کسی بلد هستش رفع این ایراد رو بگه تا این باگ رو ورداریم تا توی جستجو با مشکل بر خورد نکنیم. ممنون میشم.و این هم نمونه http://uplod.ir/og1rthal2dh3/Windows...ation3.rar.htm (http://uplod.ir/og1rthal2dh3/WindowsFormsApplication3.rar.htm)
ببنید وقتی به حرف ی میریسه مقدار داخل دیتاگرید رو خالی میکنه انگار مقداری پیدا نکرده.

aghayex
پنج شنبه 30 خرداد 1392, 22:03 عصر
دوست عزیز این یه مشکل نیست وقتی دیتابیس شما روی زبان عربی ست باشه و شما با فارسی کوئری سمتش می فرستی طبیعی هست که حروف 'ی' و 'ک' فارسی رو نشناسه و در نتیجه خروجی ندارید .
عناوینی مثل یکسان سازی ی و ک رو سرچ کنی به مقصد می رسی

davidrobert
پنج شنبه 30 خرداد 1392, 22:40 عصر
دوست عزیز این یه مشکل نیست وقتی دیتابیس شما روی زبان عربی ست باشه و شما با فارسی کوئری سمتش می فرستی طبیعی هست که حروف 'ی' و 'ک' فارسی رو نشناسه و در نتیجه خروجی ندارید .
عناوینی مثل یکسان سازی ی و ک رو سرچ کنی به مقصد می رسی
برادر فایل کمکی ندارید یا به وسیله دیتابیس نمیشهCollection رو روی فارسی قرار داد تا در جستجو با مشکل بر خورد نکنیم.

davidrobert
جمعه 31 خرداد 1392, 00:42 صبح
خواهشن یکی کمک کنه این مرد رو چطور میشه Collection دیتابیسی که با add new اضافه میکنیم رو درست کنیم برای به صورت پیش فرض عربی هستش چطور میشه روی ریفالت یا فارسی قرار داد تا با دیتابیس های که به وسیله سی شارپ میسازیم با همچین مشکلاتی بر خورد نکنیم.ممنون میشم بگید چطور.

pesare
جمعه 31 خرداد 1392, 10:34 صبح
زبان فارسی یک زبان UniCode هست شما برای ذخیره و جستجوی داده ها باید بصورت UniCode ذخیره و جستجو کنید

davidrobert
جمعه 31 خرداد 1392, 12:07 عصر
زبان فارسی یک زبان UniCode هست شما برای ذخیره و جستجوی داده ها باید بصورت UniCode ذخیره و جستجو کنید
ما اطلاعات رو به زبان فارسی ذخیره میکنم و ذخیره هم میشه ولی موقع جستجو همه حرف ها رو میشناسه ولی حرف ی میریسه اطلاعات جستجو شده رو پاک میکنه انگار اطلاعاتی رو پیدا نکرده اگه تو پیایگاه داده ما اسم سعید رو دارم وقتی به حرف ی سعید میریسی داخل دیتاگرید رو باید فقط سعید رو باید نشان بده مقدار داخل دیتاگرید رو خالی میکنه انگار چیزی پیدا نکرده.

fakhravari
جمعه 31 خرداد 1392, 12:11 عصر
دستور REPLACE(@MinDate, '/', '') در sql

-------------------------------------------------------------------
از همین جا از بچه های برنامه نویس byby میکنم .
میرم سربازی آموزشی کرمان شهید باهنر.
http://fakhravary.blogfa.com/post-41.aspx

pesare
جمعه 31 خرداد 1392, 12:37 عصر
برو خدا پشتو پناهت
دستور REPLACE(@MinDate, '/', '') در sql

-------------------------------------------------------------------
از همین جا از بچه های برنامه نویس byby میکنم .
میرم سربازی آموزشی کرمان شهید باهنر.
http://fakhravary.blogfa.com/post-41.aspx

pesare
جمعه 31 خرداد 1392, 12:42 عصر
شما باید فارسی رو Unicode ذخیره کنی , کد جستجوت رو بزار اینجا ببینم
ما اطلاعات رو به زبان فارسی ذخیره میکنم و ذخیره هم میشه ولی موقع جستجو همه حرف ها رو میشناسه ولی حرف ی میریسه اطلاعات جستجو شده رو پاک میکنه انگار اطلاعاتی رو پیدا نکرده اگه تو پیایگاه داده ما اسم سعید رو دارم وقتی به حرف ی سعید میریسی داخل دیتاگرید رو باید فقط سعید رو باید نشان بده مقدار داخل دیتاگرید رو خالی میکنه انگار چیزی پیدا نکرده.

veniz2008
جمعه 31 خرداد 1392, 13:03 عصر
-------------------------------------------------------------------
از همین جا از بچه های برنامه نویس byby میکنم .
میرم سربازی آموزشی کرمان شهید باهنر.
http://fakhravary.blogfa.com/post-41.aspx
موفق باشی دوست من.


ما اطلاعات رو به زبان فارسی ذخیره میکنم و ذخیره هم میشه ولی موقع جستجو همه حرف ها رو میشناسه ولی حرف ی میریسه اطلاعات جستجو شده رو پاک میکنه انگار اطلاعاتی رو پیدا نکرده اگه تو پیایگاه داده ما اسم سعید رو دارم وقتی به حرف ی سعید میریسی داخل دیتاگرید رو باید فقط سعید رو باید نشان بده مقدار داخل دیتاگرید رو خالی میکنه انگار چیزی پیدا نکرده.
همونطور که دوست عزیزم جناب فخرآوری هم گفتن یه راهش استفاده از replace هست. بصورت زیر عمل کنید :
به یکی از دو شکل زیر بنویسید و نتیجه رو چک کنید :
اول اینطور بنویسید (ي عربی رو جایگزین ی فارسی میکنه):

txtsearch.Text.Replace("ي", "ی");
اگر جواب نداد بصورت برعکس انجام بدید یعنی :

txtsearch.Text.Replace("ی", "ي");

davidrobert
جمعه 31 خرداد 1392, 14:12 عصر
ممنون بابت تمام دوستان انجام دادم جواب ندا این دستورات

davidrobert
جمعه 31 خرداد 1392, 14:15 عصر
دستور REPLACE(@MinDate, '/', '') در sql

-------------------------------------------------------------------
از همین جا از بچه های برنامه نویس byby میکنم .
میرم سربازی آموزشی کرمان شهید باهنر.
http://fakhravary.blogfa.com/post-41.aspx
برو به سلامت برادر

davidrobert
جمعه 31 خرداد 1392, 14:48 عصر
موفق باشی دوست من.


همونطور که دوست عزیزم جناب فخرآوری هم گفتن یه راهش استفاده از replace هست. بصورت زیر عمل کنید :
به یکی از دو شکل زیر بنویسید و نتیجه رو چک کنید :
اول اینطور بنویسید (ي عربی رو جایگزین ی فارسی میکنه):

txtsearch.Text.Replace("ي", "ی");
اگر جواب نداد بصورت برعکس انجام بدید یعنی :

txtsearch.Text.Replace("ی", "ي");
برادر من جفت دستورات رو دادم در تکس باکس هم در قسمت جستجو من داخل اسکول سرور دیتابیس ساختم و مقداریش رو دیفالت قرار دادم ولی باز به همون جور عمل کرد.بگید نوع دیتابیس رو چی قرار بدم تا بتوانم اطلاعات وارسی رو که به حروف 'ی' و 'ک' ایراد داره درست بیشه به غیر از این دو حرف به حرف های دیگی هم ایراد میگیره تو جستجو ممنون میشم بگید.من کد ها رو به این صورت دادم در تکس لاکس و کوئری جستجو
این در دستور جستجو
public void SearchRecord()
{
cmd.Connection = con;
DataTable dt=new DataTable();
if (textBox1.Text != string.Empty)
{
switch (comboBox1.SelectedIndex)
{
case 0:
{
cmd.CommandText = "select * from TB where name like '%" + textBox1.Text.Replace("ی", "ي") +"%'";
da.SelectCommand = cmd;
da.Fill(dt);
}
break;
این در تکس باکس
private void textBox1_TextChanged(object sender, EventArgs e)
{
SearchRecord();
//textBox1.Text.Replace("ي", "ی");
textBox1.Text.Replace("ی", "ي");
} ههر دو مورد رو امتحان کردم جواب نداد.

davidrobert
جمعه 31 خرداد 1392, 14:57 عصر
بچه ها من به پروزه قبلیم که عمل جستجو رو درست انجام میداد سر زدم قلاً نوشته رو کامل منویشتم می اورد ولی حالا اون نوشته رو نوشتم تا به حرف ی رسید مقدار دیتاگرید رو خالی کرد انگار چیزی پیدا نکرده ممنون میشم اگه کسی فایل کمکی جستجو داره که این خطا ها رو خونسا کنه که مشکل تو هر سیستم درست عمل کنه تو یکی سیستم ممنون میشم میشه چطور جلوش رو گرفت تا تو تمام سیستم ها درست عمل کنه.

khokhan
جمعه 31 خرداد 1392, 15:53 عصر
بچه ها من به پروزه قبلیم که عمل جستجو رو درست انجام میداد سر زدم قلاً نوشته رو کامل منویشتم می اورد ولی حالا اون نوشته رو نوشتم تا به حرف ی رسید مقدار دیتاگرید رو خالی کرد انگار چیزی پیدا نکرده ممنون میشم اگه کسی فایل کمکی جستجو داره که این خطا ها رو خونسا کنه که مشکل تو هر سیستم درست عمل کنه تو یکی سیستم ممنون میشم میشه چطور جلوش رو گرفت تا تو تمام سیستم ها درست عمل کنه.
آقا این راه حل ما رو هم امتحان کن شاید اگه خدا بخواهد جواب داد :لبخند:

در همه ی فرم های پروژتان keypreview = true قرار دهید و کد زیر را در رویداد keypress فرمتان اضافه کنید



if (e.KeyChar == 'ي') e.KeyChar = 'ی';
if (e.KeyChar == 'ك') e.KeyChar = 'ک';




البته اگه در کد جستجو یه "N " بعد از like قرار می دادی شاید جواب می داد


like N'%" + textBoxX1.Text + "%'

fakhravari
جمعه 31 خرداد 1392, 15:57 عصر
حل مشکل ی - ک
در یک new query یک بار روی دیتابیس خود اجرا کن - ی-ک اصلاح میشن.
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

davidrobert
جمعه 31 خرداد 1392, 16:07 عصر
آقا این راه حل ما رو هم امتحان کن شاید اگه خدا بخواهد جواب داد :لبخند:

در همه ی فرم های پروژتان keypreview = true قرار دهید و کد زیر را در رویداد keypress فرمتان اضافه کنید



if (e.KeyChar == 'ي') e.KeyChar = 'ی';
if (e.KeyChar == 'ك') e.KeyChar = 'ک';




البته اگه در کد جستجو یه "N " بعد از like قرار می دادی شاید جواب می داد


like N'%" + textBoxX1.Text + "%'
دستت درد نکونه این خیلی به کارم امد
like N'%" + textBoxX1.Text + "%'