PDA

View Full Version : خطا بعد از نصب و اجرای موفق برنامه



mhdhp86
یک شنبه 15 اردیبهشت 1392, 13:45 عصر
سلام دوستان
من چند ماه پیش یک برنامه کوچک رو نوشتم و بردم نصب کردم. اون اداره هم تا الان از برنامه بدون مشکل استفاده میکرد. تا اینکه چند روز پیش تماس گرفتند و گفتند که وقتی میخوایم داده جدید وارد کنیم ارور میده. من توی سیستم ادارشون امتحان کردم و دیدم درست میگن! در حالیکه تا الان حدود 150 تا رکورد ذخیره کردن و مشکلی نداشته.
حالا خطا میده که نمیتونه مقدار 92-122-146 رو به اینت تبدیل کنه!!! در صورتی که من اصلا چنین چیزی تو داده هام و متن برنامه ندارم!!! این عدد هم ثابته....یعنی اگر هربار داده جدید وارد کنی باز همین عدد رو میگه نمی تونم تبدیل کنم!
این هم عکسشه:
103733

نکته دیگه هم اینه که نمیگه این ارور مال کدوم خطه!!!
من یک بار برنامه رو uninstall کردم و دوباره نصب کردم.اما باز همین خطا رو داد.
کسی میدونه مشکل چیه؟
ممنون

aliasghar2
یک شنبه 15 اردیبهشت 1392, 14:41 عصر
خب این ارور مال sql هست و به خاطر اینه که داری یه فرمت varchar رو توی کوئریت به int تبدیل می کنی و چون رشته ای که داره تبدیل میشه کارکتر غیر عددی داره این مشکل پیش اومده

mhdhp86
یک شنبه 15 اردیبهشت 1392, 14:56 عصر
پس چرا تا الان این مشکل رو نداشته؟؟؟!!!! اصلا این عدد از کجا اومده؟ من همچین عددی ندارم تو فیلدام....
اگر دقت کرده باشید عرض کردم برنامه به درستی تا الان کار میکرده

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 15:19 عصر
دوست من شما از SQLException در بین مدیریت خطاها استفاده کنید تا مشکلون آشکار بشه راحتر به راه حل برسید.

برای این کار کد مورد نظر رو بین try و catch همراه با Exception مورد نظر قرار دهید.

mhdhp86
یک شنبه 15 اردیبهشت 1392, 15:32 عصر
در حال حاضر کد مربوط به این قسمت در try و catch همراه با Exception هست.
و نکته دیگه اینه که برنامه در کامپیوتر من الان مشکلی نداره . از کجا باید بفهمم خطا مربوط به چیه؟ ضمن اینکه در کامپیوتر مقصد هم تا حالا بی مشکل بوده.
اگر به جز ترای و کچ راه دیگه ای هم هست ممنون میشم بهم بگید.
هر چند تو ارور نگفته خطا مربوط به کدوم لاینه اما این تابعی رو که اسم برده بر من اینجا میذارم ببینید:


private void ConnectTodatabaseAddBook()
{
check = false;

try
{

ErrorProvider ep = new ErrorProvider();
ep.Clear();
if ((lastnametxt.Text == "") || (memberIDtxt .Text =="" ))
{
MessageBox.Show("فیلدهای ستاره دار الزامیست");
check = false;
}
else
{
ds2.Clear();
con.Open();
ada2.SelectCommand = new SqlCommand("select * from member where memberID = " + memberIDtxt.Text, con);

ada2.Fill(ds2);
con.Close();
if (ds2.Tables[0].Rows.Count >= 1)
{
MessageBox.Show("این شماره عضویت قبلا وارد شده است");
check = false;


}
else
{

bool journal = false ;
if (journalcombo.Text == "بله")
journal = true ;
int year=0;
if (yearbirth.Text != "")
year =int .Parse ( yearbirth .Text) ;
int degree = 0;
if (lastdegreetxt.Text != "")
degree = int.Parse(lastdegreetxt.Text);
int matab = 0;
if (matabyeartxt.Text!="")
matab =int .Parse ( matabyeartxt.Text);
int yjornal = 0;
if (journalyeartxt.Text!="")
yjornal =int .Parse (journalyeartxt.Text);
//int daybirth;
//if (mbirth.SelectedIndex == -1)
// daybirth = 1;
//else
// daybirth = int.Parse(dbirth.Text);

SqlCommand objCommand = new SqlCommand();
objCommand.Connection = con;
objCommand.CommandType = CommandType.Text;
objCommand.Parameters.AddWithValue("@memberID", memberIDtxt.Text);
objCommand.Parameters.AddWithValue("@name", nametxt.Text);
objCommand.Parameters.AddWithValue("@lastname", lastnametxt.Text);
objCommand.Parameters.AddWithValue("@codemelli", codemtxt.Text);
objCommand.Parameters.AddWithValue("@daybirth", int.Parse(dbirth.Text));
objCommand.Parameters.AddWithValue("@mountbirth",int .Parse ( mbirth.Text ));
objCommand.Parameters.AddWithValue("@yearbirth",year );
objCommand.Parameters.AddWithValue("@shenasnameID", shshtxt.Text);
objCommand.Parameters.AddWithValue("@sex", sexcombo.Text );
objCommand.Parameters.AddWithValue("@nezamID", nezamtxt.Text);
objCommand.Parameters.AddWithValue("@pro", procombo.Text );
objCommand.Parameters.AddWithValue("@degree", degreecombo.Text );
objCommand.Parameters.AddWithValue("@uniofdegree", unicombo1.Text );
objCommand.Parameters.AddWithValue("@cityofuni", cityofuni.Text);
objCommand.Parameters.AddWithValue("@uniID", unicombo.Text );
objCommand.Parameters.AddWithValue("@city", citycombo.Text );
objCommand.Parameters.AddWithValue("@address", addtxt.Text);
objCommand.Parameters.AddWithValue("@yearoflastdegree", degree );
objCommand.Parameters.AddWithValue("@yearofmatab",matab );
objCommand.Parameters.AddWithValue("@memtype", membertypecombo.Text);
objCommand.Parameters.AddWithValue("@journal",Convert .ToBoolean ( journal));
objCommand.Parameters.AddWithValue("@yearofjournal", yjornal );
objCommand.Parameters.AddWithValue("@email", emailtxt.Text);
objCommand.Parameters.AddWithValue("@phone", phonetxt.Text);
objCommand.Parameters.AddWithValue("@mobile", mobtxt.Text);
objCommand.Parameters.AddWithValue("@fax", faxtxt.Text);
objCommand.Parameters.AddWithValue("@hos1", hos1combo.Text);
objCommand.Parameters.AddWithValue("@hosp",hosprivatecombo.Text);


objCommand.CommandText = "insert into member(memberID,name,lastname,codemelli,daybirth,m ountbirth,yearbirth,shenasnameID,sex,nezamID,uniID ,pro,degree,uniofdegree,cityofuni,city,address,yea roflastdegree,yearofmatab,memtype,journal,yearofjo urnal,email,phone,mobile,fax,hos1,hosp) values " +
"(@memberID,@name,@lastname,@codemelli,@daybirth,@m ountbirth,@yearbirth,@shenasnameID,@sex,@nezamID,@ uniID,@pro,@degree,@uniofdegree,@cityofuni,@city,@ address,@yearoflastdegree,@yearofmatab,@memtype,@j ournal,@yearofjournal,@email,@phone,@mobile,@fax,@ hos1,@hosp)";
con.Open();
objCommand.ExecuteNonQuery();
con.Close();
check = true;

}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}




}

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 15:54 عصر
ببینم شما فیلد ID رو از چه نوعی قرار دادین و هیمنطور Key تعریف کردین یا چطور ؟ کدهات که موردی نداره ! شاید مقدار رکورد هات بیشتر از حد معموله

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 15:56 عصر
خب یه مشکل در کدهای شما ! درسته از Exception استفاده کردین !!! ولب نه دست !!!‌ لطفا SqlException رو بجای اون چیزی که نوشتین قرار بدین برای همینه که خطای ارسالی رو از طرف SQL نمیگیره... :)

از SqlException استفاده کنید تا کد یا پیغام خطا رو برگردونه.

mhdhp86
یک شنبه 15 اردیبهشت 1392, 16:06 عصر
خب یه مشکل در کدهای شما ! درسته از Exception استفاده کردین !!! ولب نه دست !!!‌ لطفا SqlException رو بجای اون چیزی که نوشتین قرار بدین برای همینه که خطای ارسالی رو از طرف SQL نمیگیره... :)

از SqlException استفاده کنید تا کد یا پیغام خطا رو برگردونه.

حتی با اینکه در حال حاضر توی سیستمم روی ویژوال استادیو ران میشه اگر مشکل داشته باشه نشونم میده؟

mhdhp86
یک شنبه 15 اردیبهشت 1392, 16:09 عصر
ببینم شما فیلد ID رو از چه نوعی قرار دادین و هیمنطور Key تعریف کردین یا چطور ؟ کدهات که موردی نداره ! شاید مقدار رکورد هات بیشتر از حد معموله
فیلد ای دیم char(10) هستش توی دیتا بیس و کلید هست. تعداد رکورد ها هم همونطور که گفتم حدود 150 تاس

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 16:13 عصر
حتی با اینکه در حال حاضر توی سیستمم روی ویژوال استادیو ران میشه اگر مشکل داشته باشه نشونم میده؟

شما این موردی رو که گفتم جایگزین کنید و بررسی کنید تا خطای مورد نظر رو ارسال و نمایش بده ! از SqlException استفاده کنید.

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 16:15 عصر
فیلد ای دیم char(10) هستش توی دیتا بیس و کلید هست. تعداد رکورد ها هم همونطور که گفتم حدود 150 تاس

بعد برای فیلد کلید که ID حساب میشه از char استفاده نکنید !!!! از int و مقدار ۱۱ و یا در صورت وجود از mediuminit با مقدار ۸ استفاده کنید ... در مرحله اول نوع فیلد رو تغییر بدین من به این شک میکنم.

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 16:16 عصر
شما این رو بنویسید و کدی که تولید میکنه رو اینجا ذکر کنید تا دقیق بگم مشکل چیه !


catch(SqlException ex)
{
MessageBox.Show(ex.Number.ToString()); }

Rezahak
یک شنبه 15 اردیبهشت 1392, 16:22 عصر
سلام
مشکل برنامه شما اینجاست که بین textbox هایی که اطلاعات رو از کاربر دریافت می کنند و فیلدهایی که اونها رو ذخیره می کنند هماهنگی از نظر data type وجود نداره مثلا یکی از فیلدهایی که باید مقدار از نوع int بگیرد را در نظر بگیر و داخل textbox که آن مقدار را از کاربر دریافت می کند یک مقدار غیر عددی وارد کن (مثل 1-21) حالا ببین که خطا می دهد!!!

mhdhp86
یک شنبه 15 اردیبهشت 1392, 16:23 عصر
شما این رو بنویسید و کدی که تولید میکنه رو اینجا ذکر کنید تا دقیق بگم مشکل چیه !


catch(SqlException ex)
{
MessageBox.Show(ex.Number.ToString()); }


خب من این کد رو تصحیح کردم اما همون طور که فکر میکردم برنامه بدون هیچ مشکلی ران شد و اطلاعات ثبت شد :بامزه:

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 16:29 عصر
خب من این کد رو تصحیح کردم اما همون طور که فکر میکردم برنامه بدون هیچ مشکلی ران شد و اطلاعات ثبت شد :بامزه:

!!!! مشکل دقیقا کجا بود ؟

mhdhp86
یک شنبه 15 اردیبهشت 1392, 16:34 عصر
!!!! مشکل دقیقا کجا بود ؟
مشکل اینجاست که مشکلی نداره!!!!
من که عرض کردم خدمتتون در حال حاضر برنامه بدون مشکل در ویژوال استادیو ران میشه

mhdhp86
یک شنبه 15 اردیبهشت 1392, 16:35 عصر
سلام
مشکل برنامه شما اینجاست که بین textbox هایی که اطلاعات رو از کاربر دریافت می کنند و فیلدهایی که اونها رو ذخیره می کنند هماهنگی از نظر data type وجود نداره مثلا یکی از فیلدهایی که باید مقدار از نوع int بگیرد را در نظر بگیر و داخل textbox که آن مقدار را از کاربر دریافت می کند یک مقدار غیر عددی وارد کن (مثل 1-21) حالا ببین که خطا می دهد!!!
از نظر دیتا تایپ کاملا هماهنگه.مشکل اینجاس که درست وارد میکنیم و ارور میده.
لطفا سئوالم رو دقیق بخونید

کامبیز اسدزاده
یک شنبه 15 اردیبهشت 1392, 16:38 عصر
مشکل اینجاست که مشکلی نداره!!!!
من که عرض کردم خدمتتون در حال حاضر برنامه بدون مشکل در ویژوال استادیو ران میشه

پس ۲ ساعته ما دنبال چی میگردیم ؟‌ :))

موفق باشید !

mhdhp86
یک شنبه 15 اردیبهشت 1392, 16:41 عصر
پس ۲ ساعته ما دنبال چی میگردیم ؟‌ :))

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

Rezahak
یک شنبه 15 اردیبهشت 1392, 17:02 عصر
لطفا یک لیست از جدولتون (از داخل SQL Server ) شامل نام و نوع فیلدها بگذارید

mhdhp86
یک شنبه 15 اردیبهشت 1392, 17:12 عصر
لطفا یک لیست از جدولتون (از داخل SQL Server ) شامل نام و نوع فیلدها بگذارید
تعداد فیلد ها زیاده...بخش زیادیش اینه:
103738

Rezahak
یک شنبه 15 اردیبهشت 1392, 18:12 عصر
خب در هنگام ورود اطلاعات فیلدهای daybirth یا monthbirth یا yearbirth یا هر فیلدی که در جدولتون از نوع int هست ممکنه این خطا بوجود بیاد
می شه بگید این فیلدهای int رو چه جوری از کاربر دریافت می کنید؟؟؟
آیا قبل از ذخیره عدد بودنشون رو کنترل می کنید؟

mhdhp86
یک شنبه 15 اردیبهشت 1392, 18:14 عصر
خب در هنگام ورود اطلاعات فیلدهای daybirth یا monthbirth یا yearbirth یا هر فیلدی که در جدولتون از نوع int هست ممکنه این خطا بوجود بیاد
می شه بگید این فیلدهای int رو چه جوری از کاربر دریافت می کنید؟؟؟
آیا قبل از ذخیره عدد بودنشون رو کنترل می کنید؟
از کومبو باکس استفاده میکنم و به همین خاطر ممکن نیست چیزی جز عدد وارد بشه

mhdhp86
یک شنبه 15 اردیبهشت 1392, 18:16 عصر
دوستان لطفا به این نکته توجه کنید که تا الان این برنامه بدون هیچ مشکلی اجرا میشده. و الان بعد از وارد کردن حدود 150 رکورد توسط کاربر، این خطا رخ داده.

mhdhp86
یک شنبه 15 اردیبهشت 1392, 19:35 عصر
هر چی هست کاربر داده نادرست وارد میکنه و شما هم در کدنویسی اونو کنترل نکردید. همه ستونهایی که از نوع int هستند و داده شون رو از تکست باکس دریافت میکنند شما بایست عدد بودن رو کنترل کنید.
به فرض هم کاربر اشتباه وارد می کنه. خودم که تست کردم رو چی میگید؟ خودم که اشتباه وارد نمی کنم. باز هم این ارور رو میده.

mhdhp86
یک شنبه 15 اردیبهشت 1392, 20:52 عصر
با توجه به اینکه از memberIDtxt.Text استفاده میکنم پس مطمئنن به صورت کاراکتر گرفته میشه. ای دی ها توسط خود کاربر وارد میشه
ضمن اینکه مطمئنا این قسمتش(اینت یا کاراکتر بودن فیلد) مشکلی نداشته که تا الان 150 تا رکورد ثبت شده
چرا شمردن ای دی های مشابه اشتباهه؟ این یک روشه برای بررسی وجود یا عدم وجود سطر مشابه در دیتا بیس
در مورد try catch هم متوجه نشدم دقیقا این چی کار میکنه؟ اگر میشه توضیح بدید برای چی باید اضافش کنم
ممنون

mhdhp86
دوشنبه 16 اردیبهشت 1392, 11:47 صبح
من خودم برنامه رو تست کردم. و مطمئنم که از - استفاده نکردم. پس چرا خطا داده بازم؟

ali.bahrami
دوشنبه 16 اردیبهشت 1392, 11:51 صبح
دوست عزیز من فکر میکنم حالتی پیش اومده که ناخواسته برنامه شما داره یک همچین عددی را تولید میکنه .... یعنی ربطی به ورودی های شما نداره .. چیز دیگه ای غیراز این نمیتونه باشه. چون با ورودی صحیح چک میکنی

mhdhp86
دوشنبه 16 اردیبهشت 1392, 23:24 عصر
دوست عزیز من فکر میکنم حالتی پیش اومده که ناخواسته برنامه شما داره یک همچین عددی را تولید میکنه .... یعنی ربطی به ورودی های شما نداره .. چیز دیگه ای غیراز این نمیتونه باشه. چون با ورودی صحیح چک میکنی
چطور می تونم بفهمم از کجا؟ مخصوصا اینکه تو ویژوال استادیو همچین مشکلی ندارم

aliasghar2
دوشنبه 16 اردیبهشت 1392, 23:33 عصر
من حس می کنم خود ویندوز داره اعداد رو سه تا سه تا جدا میکنه که البته از - استفاده کرده فکر کنم بد نباشه اینو نوی ویندوزت پک کنی ببینی این مشکل هست یا نه

ali.bahrami
سه شنبه 17 اردیبهشت 1392, 09:32 صبح
دوست عزیز دو راه به ذهنم رسید :
یکی اینکه از دیتابیس اون سیستم یک بک آپ بگیر و روی سیستم خودت ریستور کن ببین بدون مشکل کار میکنه یا نه؟
دوم روی سیستم مشتری ویژال استودیو را نصب کن و برنامه را از طریق اون اجرا کن ببین خطایی که رخ میده توی کدوم خط از برنامه هست

mhdhp86
سه شنبه 17 اردیبهشت 1392, 11:03 صبح
دوست عزیز دو راه به ذهنم رسید :
یکی اینکه از دیتابیس اون سیستم یک بک آپ بگیر و روی سیستم خودت ریستور کن ببین بدون مشکل کار میکنه یا نه؟
دوم روی سیستم مشتری ویژال استودیو را نصب کن و برنامه را از طریق اون اجرا کن ببین خطایی که رخ میده توی کدوم خط از برنامه هست
بله خودم هم به روش اول فکر کرده بودم اما هنوز شک داشتم.حالا که شما هم نظرتون اینه همین کارو میکنم
ممنون

ali.bahrami
چهارشنبه 18 اردیبهشت 1392, 00:13 صبح
بله خودم هم به روش اول فکر کرده بودم اما هنوز شک داشتم.حالا که شما هم نظرتون اینه همین کارو میکنم
ممنون

اگر مشکل حل شد نتیجه را توی همین تاپیک بزار ببینیم جریان چی بوده :لبخندساده:

mhdhp86
چهارشنبه 18 اردیبهشت 1392, 06:49 صبح
من این کار رو انجام دادم. و اینبار نتونستم چیزی رو ثبت کنم
با توجه به اینکه کد رو طبق نظر دوستان اینطوری تغییر داده بودم:

catch (SqlException ex)
{
MessageBox.Show(ex.Number.ToString());
}


خطایی که داد شمارش 245 بود.
حالا از کجا باید ببینم 245 چیه؟

ali.bahrami
چهارشنبه 18 اردیبهشت 1392, 14:16 عصر
ببخشید جناب آقای Mahmoud.afrad حرف شما کاملا قبول و منطقی است. ولی سوال ایشون اینه که اولا تا الان اطلاعات بدون مشکل ثبت میشده یعنی دست مشتری به خوبی کار می کرده ثانیا وقتی خود ایشون هم برنامه را روی سیستم مشتری تست کردند یک عدد به عنوان وردی دادن و این رشته "92-122-146" نه به عنوان وردی هست و نه درون برنامه ایشون جایی تولید میشه.
سوال ایشون اینه که اصلا این رشته از کجا و چه جوری تولید میشه

mhdhp86
چهارشنبه 18 اردیبهشت 1392, 18:22 عصر
شما نگفتید memberID چگونه تولید میشه؟
آیا کاری که در پست قبلیم گفتم رو انجام دادید؟

این error هم زمانی رخ میده که در تبدیل نوع خطایی رخ داده باشه.

باز هم میگم احتمالا اون عدد 92-122-146 به عنوان id هست و از اونجایی که کلیداصلی از نوع رشته هست در کوئری اول که تعداد رو چک میکنید تک کوتیشن قرار ندادید که قطعا کوئری اول خطای دستوری sql داره و نادرست هست.



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

mhdhp86
چهارشنبه 18 اردیبهشت 1392, 18:23 عصر
ببخشید جناب آقای Mahmoud.afrad حرف شما کاملا قبول و منطقی است. ولی سوال ایشون اینه که اولا تا الان اطلاعات بدون مشکل ثبت میشده یعنی دست مشتری به خوبی کار می کرده ثانیا وقتی خود ایشون هم برنامه را روی سیستم مشتری تست کردند یک عدد به عنوان وردی دادن و این رشته "92-122-146" نه به عنوان وردی هست و نه درون برنامه ایشون جایی تولید میشه.
سوال ایشون اینه که اصلا این رشته از کجا و چه جوری تولید میشه
احسنت.... بر شما....داشتم به خودم شک میکردم که نکنه به زبون دیگه ای اینا رو میگم :لبخندساده:

mhdhp86
پنج شنبه 19 اردیبهشت 1392, 17:26 عصر
این همه برنامه نویس با تجربه اینجاس یعنی تا حالا کسی به چنین مشکلی نخورده؟!:متفکر:

ali.bahrami
جمعه 20 اردیبهشت 1392, 00:10 صبح
دوست عزیز برای منم خیلی عجیبه ، خیلی دلم می خواد ببینم مشکل از کجاست ؟
روی سیستم خودت با F11 برنامه را اجرا کن ببین متوجه میشی این رشته کی تولید میشه ؟

Himalaya
جمعه 20 اردیبهشت 1392, 04:24 صبح
سلام


دوست عزیز برای منم خیلی عجیبه ، خیلی دلم می خواد ببینم مشکل از کجاست ؟

خیلی هم عجیب نیست


گفتند که وقتی میخوایم داده جدید وارد کنیم ارور میده. من توی سیستم ادارشون امتحان کردم و دیدم درست میگن! در حالیکه تا الان حدود 150 تا رکورد ذخیره کردن و مشکلی نداشته

برنامت تا وقتی درست کار میکنه که مقدار ستون memberID (که از memberIDtxt.Text گرفته میشه) بدون - ثبت بشه (یعنی مقادیر وارد شده فرمت عددی داشته باشه). چرا؟
چون سمت راست قسمت where تو دستور سلکت (') نداره، پس مقادیر اون بخش عدد در نظر گرفته میشن (چه 123 باشه چه 12-34-54 فرقی نداره. سمت sql دومی میشه تفریق چندتا عدد. نه رشته).
حالا تا وقتی که تو ستون memberID مقادیر، قالب عددی داشته باشن، خود sql زحمت میکشه و این مقادیر رو واسه مقایسه با عدد سمت راست where، تبدیل به عدد میکنه.
این از 150 رکوردی که تا الان ثبت شده. کسی که رکورد 151 رو ثبت کرده، زحمت کشیده و مثلا زده 92-122-146 . سلکت زدید و چون این مقدار تکراری نیست اجازه ثبت دادید. نفر بعدی هرچی بخواد ثبت کنه error میده. چون تو سلکت باید مقدار ستون memberID تک تک سطرها تو شرط چک بشه، زمانی که به 92-122-146 میرسه نمیتونه اونو تبدیل به عدد و با سمت راست مقایسه کنه



ada2.SelectCommand = new SqlCommand("select * from member where memberID = "
+ memberIDtxt.Text, con);


Conversion failed when converting the varchar value '146-122-92' to data type
int.

gholami146
جمعه 20 اردیبهشت 1392, 07:00 صبح
با سلام به تمامی دوستان عزیز
من به شما پیشنهاد می کنم در تمامی برنامه هایی که میسازید حتما از کامپوننت EurekaLog v7.0.5.1 Enterprise Full Source استفاده کنید
این کامپوننت بدرد همین مواقع می خوره برای پیدا کردن مشکلات برنامه شما بسیار کاربرد داره
اینم توضیحات به نقل از سازنده

EurekaLog is a complete bug resolution tool for Delphi and C++Builder developers that gives your application the power to catch every exception and memory/resource leak, directly on the end user PC, generating a detailed log of the call stack (with file, class, method and line number), optionally sending you a copy of each log entry via email or to a web bug-tracker.

موفق باشید

ali.bahrami
جمعه 20 اردیبهشت 1392, 09:14 صبح
دوست عزیز بر مبنای گفته دوست خوبمون karaji333 یه نگاهی به داده های دیتابیس بنداز ببین این عدد کذایی !!!! داخل دیتابیس هست یا نه
گفته های ایشون منطقی به نظر میاد

mhdhp86
جمعه 20 اردیبهشت 1392, 17:54 عصر
با سلام به تمامی دوستان عزیز
من به شما پیشنهاد می کنم در تمامی برنامه هایی که میسازید حتما از کامپوننت EurekaLog v7.0.5.1 Enterprise Full Source استفاده کنید
این کامپوننت بدرد همین مواقع می خوره برای پیدا کردن مشکلات برنامه شما بسیار کاربرد داره
اینم توضیحات به نقل از سازنده

موفق باشید
این کامپوننت رو از کجا باید بیارم؟

mhdhp86
جمعه 20 اردیبهشت 1392, 17:57 عصر
سلام

خیلی هم عجیب نیست

برنامت تا وقتی درست کار میکنه که مقدار ستون memberID (که از memberIDtxt.Text گرفته میشه) بدون - ثبت بشه (یعنی مقادیر وارد شده فرمت عددی داشته باشه). چرا؟
چون سمت راست قسمت where تو دستور سلکت (') نداره، پس مقادیر اون بخش عدد در نظر گرفته میشن (چه 123 باشه چه 12-34-54 فرقی نداره. سمت sql دومی میشه تفریق چندتا عدد. نه رشته).
حالا تا وقتی که تو ستون memberID مقادیر، قالب عددی داشته باشن، خود sql زحمت میکشه و این مقادیر رو واسه مقایسه با عدد سمت راست where، تبدیل به عدد میکنه.
این از 150 رکوردی که تا الان ثبت شده. کسی که رکورد 151 رو ثبت کرده، زحمت کشیده و مثلا زده 92-122-146 . سلکت زدید و چون این مقدار تکراری نیست اجازه ثبت دادید. نفر بعدی هرچی بخواد ثبت کنه error میده. چون تو سلکت باید مقدار ستون memberID تک تک سطرها تو شرط چک بشه، زمانی که به 92-122-146 میرسه نمیتونه اونو تبدیل به عدد و با سمت راست مقایسه کنه


من وقتی خودم تست کردم که خط تیره نذاشتم.

mhdhp86
جمعه 20 اردیبهشت 1392, 17:58 عصر
دوست عزیز برای منم خیلی عجیبه ، خیلی دلم می خواد ببینم مشکل از کجاست ؟
روی سیستم خودت با F11 برنامه را اجرا کن ببین متوجه میشی این رشته کی تولید میشه ؟
چشم امتحان میکنم

Himalaya
جمعه 20 اردیبهشت 1392, 18:11 عصر
سلام


من وقتی خودم تست کردم که خط تیره نذاشتم.

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


این از 150 رکوردی که تا الان ثبت شده. کسی که رکورد 151 رو ثبت کرده، زحمت
کشیده و مثلا زده 92-122-146 . سلکت زدید و چون این مقدار تکراری نیست اجازه ثبت
دادید. نفر بعدی هرچی بخواد ثبت کنه error میده. چون تو
سلکت باید مقدار ستون memberID تک تک سطرها تو شرط چک بشه، زمانی که به 92-122-146
میرسه نمیتونه اونو تبدیل به عدد و با سمت راست مقایسه کنه

وقتی گفتم نفر بعدی هر چی بخواد ثبت کنه ارور میده، این هرچی شامل همه چیزه. 1 بار که اطلاعات ناصحیح درج شد، فرقی نمیکنه بعدش شما اطلاعات درست وارد کردید یا غلط.

Mahmoud.Afrad
جمعه 20 اردیبهشت 1392, 21:44 عصر
من کمتر شده بیام به کسی خورده بگیرم. ولی من چند تا پست زدم و توجهی نکردید، من هم پست هامو پاک کردم. الان هم به گفته های karaji333 (http://barnamenevis.org/member.php?53563-karaji333) توجه نمیکنید.

من و karaji333 (http://barnamenevis.org/member.php?53563-karaji333) داریم میگیم کوئری اول که تعداد رو حساب میکنه، دارای مشکل هست(جدای از اینکه این نوع محاسبه شما بهینه نیست) و راه حل هم گفته شده. شما حتی این راه حل رو تست هم نکردید که ببینید آیا درست میگیم یا نه؟ منتظر چیز دیگه ای هم نباشید چون مادامی که به راه حل گفته شده بی توجهی کنید ، تاپیک به نتیجه نخواهد رسید و رغبتی هم برای ادامه دادن باقی نمیمونه.

mhdhp86
شنبه 21 اردیبهشت 1392, 09:04 صبح
سلام

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

وقتی گفتم نفر بعدی هر چی بخواد ثبت کنه ارور میده، این هرچی شامل همه چیزه. 1 بار که اطلاعات ناصحیح درج شد، فرقی نمیکنه بعدش شما اطلاعات درست وارد کردید یا غلط.
بله اعتراف میکنم بد خوندم.... میرم چک می کنم
ممنون