PDA

View Full Version : search برای چند جدول ترکیبی



mary3541
یک شنبه 19 مهر 1388, 10:51 صبح
توی برنامم یک dgv دارم که درون اون اطلاعات ترکیب 3 تا جدول اومده.برای search کردن در این dgv روی فرمم یک ComboBox برای انتخاب اینکه Search بر اساس چه گزینه ای باشد و یک TextBox برای کلمه مورد نظر در search و یک دکمه برای Search. ولی وقتی درون TextBox مثلا نام کامل یک دانش آموز رو مینویسم و میخوام Search کنم چیزی نشون نمیده ولی اگه دو حرف از نام رو تایپ کنم نمایش میده.
میشه بگید مشکل کجاست؟
برای Search هم کدهای زیر رو نوشتم
در لایه Data

public DataTable SearchLastNameFa(string LastNameFa)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent join Course ON Course.ID = CourseTermStudent.Course_ID join Term ON Term.ID = CourseTermStudent.Term_ID join Student ON Student.ID= CourseTermStudent.Student_ID where Student.LastNameFa like '%{0}%'", LastNameFa);
SqlDataAdapter sda = new SqlDataAdapter(strFilter, con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
public DataTable SearchTerm(string Term_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent join Course ON Course.ID = CourseTermStudent.Course_ID join Term ON Term.ID = CourseTermStudent.Term_ID join Student ON Student.ID= CourseTermStudent.Student_ID where CourseTermStudent.Term_ID like '{0}'", Term_ID);
SqlDataAdapter sda = new SqlDataAdapter(strFilter, con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
public DataTable SearchCourse(string TitleEn)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent join Course ON Course.ID = CourseTermStudent.Course_ID join Term ON Term.ID = CourseTermStudent.Term_ID join Student ON Student.ID= CourseTermStudent.Student_ID where Course.TitleEn like '{0}%'", TitleEn);
SqlDataAdapter sda = new SqlDataAdapter(strFilter, con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
در لایه business

public DataTable SearchLastNameFa(string LastNameFa)
{
return objcts.SearchLastNameFa(LastNameFa);
}
public DataTable SearchTerm(string Term)
{
return objcts.SearchTerm(Term);
}
public DataTable SearchCourse(string TitleEn)
{
return objcts.SearchCourse(TitleEn);
}
در لایه نمایش

private void btnSearch_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
if (cmbSearch.SelectedIndex == 0)
{
dt = objcts.SearchLastNameFa(txtSearch.Text);
}
else if (cmbSearch.SelectedIndex == 1)
{
dt = objcts.SearchCourse(txtSearch.Text);
}
else
{
dt = objcts.SearchTerm(txtSearch.Text);
}
dgv.DataSource = dt;
}
}

اَرژنگ
یک شنبه 19 مهر 1388, 11:55 صبح
توی برنامم یک dgv دارم که درون اون اطلاعات ترکیب 3 تا جدول اومده.برای search کردن در این dgv روی فرمم یک ComboBox برای انتخاب اینکه Search بر اساس چه گزینه ای باشد و یک TextBox برای کلمه مورد نظر در search و یک دکمه برای Search. ولی وقتی درون TextBox مثلا نام کامل یک دانش آموز رو مینویسم و میخوام Search کنم چیزی نشون نمیده ولی اگه دو حرف از نام رو تایپ کنم نمایش میده.
میشه بگید مشکل کجاست؟
برای Search هم کدهای زیر رو نوشتم
در لایه Data

public DataTable SearchLastNameFa(string LastNameFa)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent join Course ON Course.ID = CourseTermStudent.Course_ID join Term ON Term.ID = CourseTermStudent.Term_ID join Student ON Student.ID= CourseTermStudent.Student_ID where Student.LastNameFa like '%{0}%'", LastNameFa);
SqlDataAdapter sda = new SqlDataAdapter(strFilter, con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
public DataTable SearchTerm(string Term_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent join Course ON Course.ID = CourseTermStudent.Course_ID join Term ON Term.ID = CourseTermStudent.Term_ID join Student ON Student.ID= CourseTermStudent.Student_ID where CourseTermStudent.Term_ID like '{0}'", Term_ID);
SqlDataAdapter sda = new SqlDataAdapter(strFilter, con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
public DataTable SearchCourse(string TitleEn)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent join Course ON Course.ID = CourseTermStudent.Course_ID join Term ON Term.ID = CourseTermStudent.Term_ID join Student ON Student.ID= CourseTermStudent.Student_ID where Course.TitleEn like '{0}%'", TitleEn);
SqlDataAdapter sda = new SqlDataAdapter(strFilter, con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
در لایه business

public DataTable SearchLastNameFa(string LastNameFa)
{
return objcts.SearchLastNameFa(LastNameFa);
}
public DataTable SearchTerm(string Term)
{
return objcts.SearchTerm(Term);
}
public DataTable SearchCourse(string TitleEn)
{
return objcts.SearchCourse(TitleEn);
}
در لایه نمایش

private void btnSearch_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
if (cmbSearch.SelectedIndex == 0)
{
dt = objcts.SearchLastNameFa(txtSearch.Text);
}
else if (cmbSearch.SelectedIndex == 1)
{
dt = objcts.SearchCourse(txtSearch.Text);
}
else
{
dt = objcts.SearchTerm(txtSearch.Text);
}
dgv.DataSource = dt;
}
}

مشکل از شماست (باید خودتان را دیباگ کنید :لبخند:)

قسمت جستجو ربطی به اسم کامل ندارد، به این خط توجه کنید :


string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent
join Course ON Course.ID = CourseTermStudent.Course_ID
join
Term ON Term.ID = CourseTermStudent.Term_ID join
Student ON Student.ID= CourseTermStudent.Student_ID
where Student.LastNameFa like '%{0}%'", LastNameFa);

شما اسم کامل را میدید، ولی برنامه‌ بیچاره به جز اینکه قسمت فامیل را بگرده نمیدانه.

قصد اضافه کردن گشتن هر قسمتی از اسم و فامیل را دارید؟

mary3541
یک شنبه 19 مهر 1388, 12:15 عصر
مشکل از شماست (باید خودتان را دیباگ کنید :لبخند:)

قسمت جستجو ربطی به اسم کامل ندارد، به این خط توجه کنید :


string strFilter = String.Format("select CourseTermStudent.ID, CourseTermStudent.Term_ID,CourseTermStudent.Course _ID, Course.TitleEn , CourseTermStudent.Student_ID, Student.LastNameFa from CourseTermStudent
join Course ON Course.ID = CourseTermStudent.Course_ID
join
Term ON Term.ID = CourseTermStudent.Term_ID join
Student ON Student.ID= CourseTermStudent.Student_ID
where Student.LastNameFa like '%{0}%'", LastNameFa);

شما اسم کامل را میدید، ولی برنامه‌ بیچاره به جز اینکه قسمت فامیل را بگرده نمیدانه.

قصد اضافه کردن گشتن هر قسمتی از اسم و فامیل را دارید؟

نه:ناراحت:
فقط می خوام جستجو بر اساس فامیل باشه ولی فقط 2 حرف اول فامیل رو میتونه بر اساسش جستجو کنه اگه بیشتر بدم نمی تونه البته این فقط برای فامیلهایی است که بیشتر از 2 حرف مشترک دارند
مثلا من 2 تا فامیلی به نام شریفی و شریعتی دارم
اگه بزنم شر هر دو رو میاره ولی اگه بزنم شری یا بیشتر هیچکدوم رو نمییاره
(فکر کنم اینجا نیازی به debug کردن خودم ندارم:چشمک:)

اَرژنگ
یک شنبه 19 مهر 1388, 12:46 عصر
نه:ناراحت:
فقط می خوام جستجو بر اساس فامیل باشه ولی فقط 2 حرف اول فامیل رو میتونه بر اساسش جستجو کنه اگه بیشتر بدم نمی تونه البته این فقط برای فامیلهایی است که بیشتر از 2 حرف مشترک دارند
مثلا من 2 تا فامیلی به نام شریفی و شریعتی دارم
اگه بزنم شر هر دو رو میاره ولی اگه بزنم شری یا بیشتر هیچکدوم رو نمییاره
(فکر کنم اینجا نیازی به debug کردن خودم ندارم:چشمک:)

قبل از اینکه بخواهیم کد را دستکاری کنیم، یک امتحان:
۲ تا شاگرد با فامیلهایه :

اسدالله و
اسدالله‌میرزا
وارد کنید، ببینیم تا چند حرف هر دو دیده میشند.

mary3541
یک شنبه 19 مهر 1388, 13:38 عصر
قبل از اینکه بخواهیم کد را دستکاری کنیم، یک امتحان:
۲ تا شاگرد با فامیلهایه :

اسدالله و
اسدالله‌میرزا
وارد کنید، ببینیم تا چند حرف هر دو دیده میشند.

تا اسدالله هر دو رو پیدا میکنه وقتی که مینویسم اسدالله م ، اسدالله میرزا رو فقط پیدا میکنه ولی وقتی بیشتر مینویسم هیچکدوم رو نمیاره

اَرژنگ
یک شنبه 19 مهر 1388, 13:55 عصر
تا اسدالله هر دو رو پیدا میکنه وقتی که مینویسم اسدالله م ، اسدالله میرزا رو فقط پیدا میکنه ولی وقتی بیشتر مینویسم هیچکدوم رو نمیاره
پس مشکل شما ربطی به کد ندارد!
اشکال از 'ی' عربی است، قبل از ورود به داتابیس باید 'ی' ها را با 'ی' فارسی جیگزین کنید
'ی' عربی زیرش ۲ نقطه دارد.

aliprf
یک شنبه 19 مهر 1388, 14:07 عصر
پس مشکل شما ربطی به کد ندارد!
اشکال از 'ی' عربی است، قبل از ورود به داتابیس باید 'ی' ها را با 'ی' فارسی جیگزین کنید
'ی' عربی زیرش ۲ نقطه دارد.


همون طور که آرژنگ گفت مشکل در استفاده از این حروفه
من یه Dll با دستور کارش را میزارم که با استفاذه ازش میتونید keyboard رو فارسی کرده و دیگه ان مشکل رو ندارید و یا از کد زیر استفاده کنید
public string correct(string str)
{
char[] ch = str.ToCharArray();
char[] ch1=new char[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;
}

mary3541
یک شنبه 19 مهر 1388, 14:36 عصر
پس مشکل شما ربطی به کد ندارد!
اشکال از 'ی' عربی است، قبل از ورود به داتابیس باید 'ی' ها را با 'ی' فارسی جیگزین کنید
'ی' عربی زیرش ۲ نقطه دارد.
من از ی فارسی استفاده میکنم. پس مشکل کجاست؟

mary3541
یک شنبه 19 مهر 1388, 14:40 عصر
همون طور که آرژنگ گفت مشکل در استفاده از این حروفه
من یه Dll با دستور کارش را میزارم که با استفاذه ازش میتونید keyboard رو فارسی کرده و دیگه ان مشکل رو ندارید و یا از کد زیر استفاده کنید
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;
}

این dll رو کجای برنامم اضافه کنم؟ موقع وارد کردن با error مواجه میشه

اَرژنگ
یک شنبه 19 مهر 1388, 15:08 عصر
این dll رو کجای برنامم اضافه کنم؟ موقع وارد کردن با error مواجه میشه
برایه حل این مشکل احتیاجی به اضافه کردن یک اسمبلی دیگه به پروژه نیست،
به جاش فقط از کد داده استفاده کنید، در ثانی عوض کردن کیبرد کاربر بدانه اجازه از کاربر درست نیست.

mary3541
یک شنبه 19 مهر 1388, 16:11 عصر
برایه حل این مشکل احتیاجی به اضافه کردن یک اسمبلی دیگه به پروژه نیست،
به جاش فقط از کد داده استفاده کنید، در ثانی عوض کردن کیبرد کاربر بدانه اجازه از کاربر درست نیست.
منظورتون رو نمیفهمم. میشه بیشتر توضیح بدید که چیکار باید بکنم؟
من اولین باره که دارم برنامه مینویسم و نمیدونم چجوری این مشکل رو رفع کنم

اَرژنگ
یک شنبه 19 مهر 1388, 16:24 عصر
منظورتون رو نمیفهمم. میشه بیشتر توضیح بدید که چیکار باید بکنم؟
من اولین باره که دارم برنامه مینویسم و نمیدونم چجوری این مشکل رو رفع کنم
مشکل اصلی این است که یکسری مقادیر تکست در داتابیس ذخیره شدند که از 'ی'و'ک' عربی استفاده میکنند.

اول مقادیر داتابیس را ویرایش کنید و تمام 'ی'و'ک' هایه عربی را به فارسی تبدیل کنید.

دوم:قبل از اینکه مقادیری به داتابیس ذخیره بشه، 'ی'و'ک' هایه عربی را به فارسی تبدیل کنید.

سوم:اگر مقادیر ویرایش شدند قبل از اینکه مقادیری به داتابیس ذخیره بشه، 'ی'و'ک' هایه عربی را به فارسی تبدیل کنید.

بهترین جا برایه پیاده کردن این شرایط در لایه داتا است. اگر کد ذیره و یا ویرایش که مربوط به اسم شاگردان است بفرستید، درستش میکنیم. بقیه‌شان را خودتان میتوانید درست کنید.

mary3541
یک شنبه 19 مهر 1388, 18:28 عصر
مشکل اصلی این است که یکسری مقادیر تکست در داتابیس ذخیره شدند که از 'ی'و'ک' عربی استفاده میکنند.

اول مقادیر داتابیس را ویرایش کنید و تمام 'ی'و'ک' هایه عربی را به فارسی تبدیل کنید.

دوم:قبل از اینکه مقادیری به داتابیس ذخیره بشه، 'ی'و'ک' هایه عربی را به فارسی تبدیل کنید.

سوم:اگر مقادیر ویرایش شدند قبل از اینکه مقادیری به داتابیس ذخیره بشه، 'ی'و'ک' هایه عربی را به فارسی تبدیل کنید.

بهترین جا برایه پیاده کردن این شرایط در لایه داتا است. اگر کد ذیره و یا ویرایش که مربوط به اسم شاگردان است بفرستید، درستش میکنیم. بقیه‌شان را خودتان میتوانید درست کنید.
ذخیره


public Boolean newstudent(object Picture, object FirstNameFa, object FirstNameEn, object LastNameFa, object LastNameEn, object FatherName, object Gender, object NationalID, object PersonalID, object BirthDate, object Degree, object Section, object Job, object Tel, object Address, object RegisterDate, object Course_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
SqlCommand cmd = new SqlCommand("insert into Student(Picture,FirstNameFa,FirstNameEn,LastNameFa ,LastNameEn,FatherName,Gender,NationalID,PersonalI D,BirthDate,Degree,Section,Job,Tel,Address,Registe rDate,Course_ID)values(@Picture,@FirstNameFa,@Firs tNameEn,@LastNameFa,@LastNameEn,@FatherName,@Gende r,@NationalID,@PersonalID,@BirthDate,@Degree,@Sect ion,@Job,@Tel,@Address,@RegisterDate,@Course_ID)", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Picture", Picture);
cmd.Parameters.AddWithValue("@FirstNameFa", FirstNameFa);
cmd.Parameters.AddWithValue("@FirstNameEn", FirstNameEn);
cmd.Parameters.AddWithValue("@LastNameFa", LastNameFa);
cmd.Parameters.AddWithValue("@LastNameEn", LastNameEn);
cmd.Parameters.AddWithValue("@FatherName", FatherName);
cmd.Parameters.AddWithValue("@Gender", Gender);
cmd.Parameters.AddWithValue("@NationalID", NationalID);
cmd.Parameters.AddWithValue("@PersonalID", PersonalID);
cmd.Parameters.AddWithValue("@BirthDate", BirthDate);
cmd.Parameters.AddWithValue("@Degree", Degree);
cmd.Parameters.AddWithValue("@Section", Section);
cmd.Parameters.AddWithValue("@Job", Job);
cmd.Parameters.AddWithValue("@Tel", Tel);
cmd.Parameters.AddWithValue("@Address", Address);
cmd.Parameters.AddWithValue("@RegisterDate", RegisterDate);
cmd.Parameters.AddWithValue("@Course_ID", Course_ID);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
SqlDataAdapter sda = new SqlDataAdapter("select * from Student", con);
sda.SelectCommand.CommandType = CommandType.Text;
DataTable dt = new DataTable();
sda.Fill(dt);
return true;
}

ویرایش


public Boolean editStudent(int ID, object Picture, object FirstNameFa, object FirstNameEn, object LastNameFa, object LastNameEn, object FatherName, object Gender, object NationalID, object PersonalID, object BirthDate, object Degree, object Section, object Job, object Tel, object Address, object RegisterDate, object Course_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
SqlCommand cmd = new SqlCommand("update Student set Picture=@Picture,FirstNameFa=@FirstNameFa, FirstNameEn=@FirstNameEn, LastNameFa=@LastNameFa, LastNameEn=@LastNameEn, FatherName=@FatherName, Gender=@Gender, NationalID=@NationalID, PersonalID=@PersonalID, BirthDate=@BirthDate, Degree=@Degree, Section=@Section, Job=@Job, Tel=@Tel, Address=@Address, RegisterDate=@RegisterDate, Course_ID=@Course_ID where ID =" +ID, con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Picture", Picture);
cmd.Parameters.AddWithValue("@FirstNameFa", FirstNameFa);
cmd.Parameters.AddWithValue("@FirstNameEn", FirstNameEn);
cmd.Parameters.AddWithValue("@LastNameFa", LastNameFa);
cmd.Parameters.AddWithValue("@LastNameEn", LastNameEn);
cmd.Parameters.AddWithValue("@FatherName", FatherName);
cmd.Parameters.AddWithValue("@Gender", Gender);
cmd.Parameters.AddWithValue("@NationalID", NationalID);
cmd.Parameters.AddWithValue("@PersonalID", PersonalID);
cmd.Parameters.AddWithValue("@BirthDate", BirthDate);
cmd.Parameters.AddWithValue("@Degree", Degree);
cmd.Parameters.AddWithValue("@Section", Section);
cmd.Parameters.AddWithValue("@Job", Job);
cmd.Parameters.AddWithValue("@Tel", Tel);
cmd.Parameters.AddWithValue("@Address", Address);
cmd.Parameters.AddWithValue("@RegisterDate", RegisterDate);
cmd.Parameters.AddWithValue("@Course_ID", Course_ID);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
SqlDataAdapter sda = new SqlDataAdapter("select * from Student ", con);
sda.SelectCommand.CommandType = CommandType.Text;
DataSet ds = new DataSet();
sda.Fill(ds, "Student");
return true;

}

sara.f
یک شنبه 19 مهر 1388, 21:03 عصر
سلام
دوست عزیز خیلی از بچه ها در جستجو دچار مشکل شما میشن.
اگر از اول collation را طوری انتخاب می کردی که تمامی حروف را support کنه، این مسائل پیش نمی اومد.
به نظر من collation مربوط به data base را عوض کن.

mary3541
یک شنبه 19 مهر 1388, 23:13 عصر
سلام
دوست عزیز خیلی از بچه ها در جستجو دچار مشکل شما میشن.
اگر از اول collation را طوری انتخاب می کردی که تمامی حروف را support کنه، این مسائل پیش نمی اومد.
به نظر من collation مربوط به data base را عوض کن.

میشه بیشتر کمک کنید؟
من از sql express خود C# استفاده کرده ام توی قسمت Collation باید کدوم رو انتخاب کنم؟

sara.f
یک شنبه 19 مهر 1388, 23:17 عصر
میشه بیشتر کمک کنید؟
من از sql express خود C#‎ استفاده کرده ام توی قسمت Collation باید کدوم رو انتخاب کنم؟
اگر Arabic_100_CI_AI را انتخاب کنید در مورد همه چیز جواب میده، یعنی من تا حالا با هاش مشکلی نداشتم.

kh1387
دوشنبه 20 مهر 1388, 01:19 صبح
اگر Arabic_100_CI_AI را انتخاب کنید در مورد همه چیز جواب میده، یعنی من تا حالا با هاش مشکلی نداشتم.
من همیشه از Arabic_CI_AI استفاده می کنم.
فرقش با Arabic_100_CI_AI چیه؟:متفکر:

اَرژنگ
دوشنبه 20 مهر 1388, 07:27 صبح
اگر Arabic_100_CI_AI را انتخاب کنید در مورد همه چیز جواب میده، یعنی من تا حالا با هاش مشکلی نداشتم.

بستگی دارد مشکل را با چی حساب کنیم، من فکر کردم مشکل داشتن ’ي’ و ’ك’ هایه عربی باشد. ( به نظر من ) حل کردن مشکل پاکسازیشان در برنامه بخصوصی که با فارسی کار میکند است، به این دلایل : ۱.دست انداختن به کیبرد کاربر حق ما نیست. ۲.کار کردن با حروف فارسی، منطقی است که ما حق داریم ازش در برنامه استفاده کنیم. ۳.بیتفاوت کردن داتابیس به حروف عربی و فارسی ، جوابگویه مشکل اصلی در این مورد نیست (به نظر من ): http://harfehesaaby.blogspot.com/2007/12/blog-post_13.html لطفاً اگر کسی تفکرات متفاوتی در این زمینه دارند از ما دریغ نکنند، اگر جنبه‌هایه متفاوتی دیگری هم به نظرتان میرسد حتماً بفرمائید (لازم نیست که با نکات این پست مغایرت نداشته باشد، لطفاً هیچ وقت از بازگو کردن نکات مغایرتی خودداری نکنید که همه با هم پیشرفت کنیم).

mary3541
دوشنبه 20 مهر 1388, 08:38 صبح
اگر Arabic_100_CI_AI را انتخاب کنید در مورد همه چیز جواب میده، یعنی من تا حالا با هاش مشکلی نداشتم.
من چنین گزینه ای تو collation پیدا نکردم. راهی هست که اون رو اضافه کنم؟
یا اگه راهی وجود نداره میشه یه راه دیگه برای حل مشکلم بهم بگید؟

اَرژنگ
دوشنبه 20 مهر 1388, 10:43 صبح
من چنین گزینه ای تو collation پیدا نکردم. راهی هست که اون رو اضافه کنم؟
یا اگه راهی وجود نداره میشه یه راه دیگه برای حل مشکلم بهم بگید؟

قبل از اینکه نگران باشید به این نکات توجه کنید:
۱.این مشکل شما نیست، برنامه شما دقیقا کاری را که میخواهید انجام میده، وجود ۲ نوع 'ی' va ' ک' چیزی نیست که به شما ربط داشته باشد،
مشکل اصلی ورود محتویات با ی و ک هایه عربی بوده، برنامه صحیحاً بین این دو اختلاف قائل میشه.
چیزی که به نظر شما مشکل میاد، برنامه‌ای است که دقیقاً کار درست را انجام میده.
مسئولیت کیبرد کاربر بر عهده شما (برنامه‌نویس) نیست، ولی شما میتوانید در یک حد ساده جلویه اینکار را بگیرید، در هر جایی قبل از ذخیره رشته در داتابیس string.Replace را استفاده کنید، به این شکل ی و ک هایه عربی را با فارسی جایگزین میکنید.
روش دوم، میتوانید در جستجو ، ۲ بار جستجو انجام بدید، یکبار با ی و ک هایه عربی ، یکبار با ی و ک هایه فارسی، نتیجه هر دو را با هم جمع کنید.
ولی این نقطه را متذکر میشم، برنامه‌تان درست کار میکند، اشکال از داشتن داده‌هایه عربی است، اگر شما این قابلیت را کاملاً صلب کنید شاید کاربرد را نارضی میکنید.

اگر در صورت مسئله چیزی برایه تبدیل کردن ی و ک هایه عربی به فارسی نبوده، حق ندارند که نداشتنش ایراد بگیرند، لطفا قبل از اینکه فکر کنید این مشکل شما است، یک لحظه تامل کنیدو از خودتان بپرسید که صورت مسئله در این موضوع چی گفته.

در هیچ کشوری (به جز ایران)، این به شکل مشکل دیده نمیشه، برایه مثال به این توجه کنید: جستجو در فیلد تکست انگلیسی بین صفر و حرف اُ (0 O), با اینکه هردو شبیه هم هستند، هیچ کس از شما انتظار ندارد زمان گشتن هر دو مقدار را برگردنید! چرا از شما انتظار داشته باشند زمانیکه با فارسی کار میکنید ، حل مشکلات عربی را هم انجام بدید؟ مگر عربها به ی و ک فارسی همین کار را انجام میدهند؟
حل مشکل واقعی پاک کردن حروف عربی و یا صلب وارد کردن آنهاست، یا اینکه هم زمانی که خواستند وارد کنند اختار بدید، از این بیشتر کاری به عهده برنامه نویس ایرانی نیست (مگر اینکه یک برنامه برا ایران و اعراب مینویسید).

به قول انگیلسها:اگر داده آشغال وجود داشته باشد، آشغال هم پس گرفته میشه.
!Garbage in , garbage out

اگر کسی از لحاض منطقی و یا فلسفه برنامه نویسی چیزی خلاف اینکه برنامه‌نویس ایرانی به جز اینکه مسئولیت در زبان فارسی داشته باشد میبینید لطفاً بفرمایند.

و اگر به این روش کسی اشکال بگیرد باید با منطق دلیلش را بگه، بیخودی نمره از دست ندید.

sara.f
سه شنبه 21 مهر 1388, 00:14 صبح
سلام
منم با نظر آقای ارژنگ موافقم.
به برنامه نویس نباید دیگه نگران کیبورد کاربر هم باشه.
حالا جالبه که اون collation ای که معرفی کردم "ی" هایی را در جستجو پیدا می کنه که با shift+ X تایپ شده اند.
یه سوال: مگه shift+X همون "ی" فارسی نیست؟!

sara.f
سه شنبه 21 مهر 1388, 00:22 صبح
من همیشه از Arabic_CI_AI استفاده می کنم.
فرقش با Arabic_100_CI_AI چیه؟:متفکر:

سلام
ببین دوست عزیز همین دیروز یکی از دوستان یک collation دیگه را به من گفتن به نام Arabic_CI_AS و من رفتم امتحان کردم و دیدم هیچ فرقی با collation ای که من گفتم نداره.
اگر این Arabic_CI_AI داره واسه شما جواب میده، خب از همون استفاده کنید ومن فکر نمی کنم این collation های توی این مایه با هم فرقی داشته باشن.
پیروز باشی.:لبخندساده:

sara.f
سه شنبه 21 مهر 1388, 00:28 صبح
من چنین گزینه ای تو collation پیدا نکردم. راهی هست که اون رو اضافه کنم؟
یا اگه راهی وجود نداره میشه یه راه دیگه برای حل مشکلم بهم بگید؟

همون طور که در پست قبلی هم گفتم ، اگر collation دیگری در این مایه ها هست،همونو انتخاب کنید، چون تا اونجا که می دونم فرقی با هم ندارن.
اما به نظر من اگر راه حل آقای ارژنگ را دنبال کنید و توجه کنید که نظر ایشون چیه، موفق تر خواهید بود، چون راه اصولی را دارن میگن.
پیروز باشی.:لبخندساده:

aliprf
سه شنبه 21 مهر 1388, 09:46 صبح
دوست گرامي
روش كار بار Dll رو همراهش فرستادم
در ضمن اين Dll براي فارسي كردن كامل كيبورد هست و اصلا ربطي به VS نداره
بايد در مسير ذكر شده كژي بشه تا كيبورد تماما فارسي بشه

اَرژنگ
سه شنبه 21 مهر 1388, 09:53 صبح
دوست گرامي
روش كار بار Dll رو همراهش فرستادم
در ضمن اين Dll براي فارسي كردن كامل كيبورد هست و اصلا ربطي به VS نداره
بايد در مسير ذكر شده كژي بشه تا كيبورد تماما فارسي بشه


۱.سورس این دی‌ال‌ال کجاست؟
۲.دست انداختن به سیستم کاربر حق برنامه نویس نیست.
۳.استفاده از دی‌ال‌ال هایه بدانه سورس از شرکتهایه نامعتبر درست نیست.
۴.مشکل فرستادن سورس چی هست؟
۵.منطق و دلیل اینکه بدانه اجازه کاربر با کاشتن یک دی‌ال‌ال که معلوم نیست چی هست و از کجا آمده را از کجا برداشت کردید را لطفاً بفرمائید.

مگر همینطوری هم بی‌اجازه میشه به سیستم مردم دست انداخت و هرچی را که دلمان خواست را عوض کنیم؟ اگراینکه راه درست برنامه‌نویسیش را نمیدانیم با این روشهایه سوال بر انگیز ماسمالی کنیم؟
این طرز برنامه‌نویسی را کجا یاد میدند؟
مشکل اصلی ربطی به عوض کردن کیبرد ندارد،

یک سوال دیگر، چرا از 'ي' عربی استفاده میکنید؟

اگر این دی‌ال‌ال توش وایروس بود فردا ایشان باید جوابگویه کاربر باشند یا aliprf؟

اَرژنگ
سه شنبه 21 مهر 1388, 10:19 صبح
منم با نظر آقای ارژنگ موافقم.
به برنامه نویس نباید دیگه نگران کیبورد کاربر هم باشه.


نگرانی (مسئولیتی) نه، ولی ِعوض کردن کیبرد کاربر از عهده‌اش خارجه.

یکی از مهمترین اصول در برنامه‌نویسی معیین کردن مسئولیتها در کلاسهاست، خود برنامه نویس هم مسئولیتهایی دارد بعضیهاشان را باید برآورده کند و بعضی چیزها هم از عهده‌اش خارجه و نباید (نه اینکه نخواهد) انجام بده.

mary3541
سه شنبه 21 مهر 1388, 14:52 عصر
نگرانی (مسئولیتی) نه، ولی ِعوض کردن کیبرد کاربر از عهده‌اش خارجه.

یکی از مهمترین اصول در برنامه‌نویسی معیین کردن مسئولیتها در کلاسهاست، خود برنامه نویس هم مسئولیتهایی دارد بعضیهاشان را باید برآورده کند و بعضی چیزها هم از عهده‌اش خارجه و نباید (نه اینکه نخواهد) انجام بده.
میشه بگید باید از اول چیکار میکردم که با چنین چیزی مواجه نشم؟

اَرژنگ
سه شنبه 21 مهر 1388, 16:44 عصر
میشه بگید باید از اول چیکار میکردم که با چنین چیزی مواجه نشم؟

اینکه از اول به حالتی برنخورد که حساب نشده باشد معمولا غیره ممکنه ولی در این موضوع
۱.از اول در درخواست برنامه اینکه کاراکترهایی که در فارسی وجود ندارند را شما (برنامه‌نویس ) مدیریت کنید بود؟ اگر بود در چنین حالتی از شما درخواست شده بود که چکار کنید؟
مسئولیت شما (برنامه‌نویس) در درخواستنامه چی بود؟ پایان مسئولیتهایه شما (برنامه‌نویس) به چی خطم میشد؟ با این حساب اگر کاربر به جایه فارسی کاپیتال آی انگلیسی هم تایپ کنه که شبیهاً مانند الف فارسی ممکنه باشد، وظیفه اینکه اون را به الف ترجمه کنید به عهده شماست؟
اگر کسی که درخواست کرده علناً این را اعلام کرده بود، بله شما باید ازشان میپرسیدید که چطوری باید مدیریت بشه، اگر هم که خیر، شما هم متوجه نشده بودید که کاربر ممکن است از حروف دیگر استفاده کند، تقصیری ندارید، اگر علناً از شما درخواست نشده و جایی ذکر نشده، مسئولی پیاده‌کردنش با شما نیست.
من نمیدونم که شما فقط یک جواب در مورد مدیریت ی و ک عربی هستید یا اینکه به شکل کلی میپرسید که اگر از من درخواست پیاده کردن قابلیت اکس به شکل وای در برنامه از اول نبود، چکار باید کرد؟
که به این میرسیم که قبل از پیاده کردن برنامه اول باید با مشتری یا صاحباکار یا مدیری که از شما درخواست پیاده‌سازی را کرده و یا شرکت دیگری که با شرکت شما قرار داد برایه پیاده ساختن یک سیستم را بسته ، به توافق برسید و در حالتهایی هم که اشکالات ممکن است به وجود بیاد یک پروتکل داشته باشید.
این گونه چیزها در مسئولیت برنامه نویس نیست و به مدیریت پروژه‌ها مربوط میشه.
حال شما فکر میکنید که مشکل چی هست؟