# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  کم شدن ارقام پس از هر بار ثبت شدن در DataBase

## T_E_X_A_S

(من از Access براي DataBase استفاده می کنم )
برنا مم در مورد ترمينال اتوبوس هست من تو يکي از فرم هام اول اتوبوس ها رو ثبت مي کنم که يکي از گزينه هاش ظرفيت هست که موقع ثبت هر اتوبوس يه تعداد ظرفيت هم بايد براش ثبت کنم حالا تو يه فرم ديگه که دارم يعني رزرو بليط من وقتي يه بليط رزرو کردم مي خوام 1 دونه از تعداد اون ظرفيت کم بشه مثلا اگه من ظرفيت رو موقع ثبت 70 زدم يه بليط که رزرو کردم بار دوم بنويسه 69 ، من يه Button گزاشتم رو فرم رزرو بليط مي خوام روش کليک کردم تعداد ظرفيت باقيمانده رو بنويسه .

----------


## razavi_university

بهتره در داخل جدوالتون اين موضوع را قرار بديد، يعني موقعي كه يك اتوبوس براي سفر داخل برنامه قرار مي‌گيره علاوه بر مقصد و راننده و ... يك فيلد عددي ظرفيت هم داشته باشه و به ازاي هر مسافري كه رزرو مي كنه يكي از اين ظرفيت كم بشه و مجدد ظرفيت جديد ذخيره  شه

----------


## T_E_X_A_S

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

----------


## linux

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


  شما در دیتابیس توضیح ندادید که چه جداولی دارید. ولی باید جدولهای زیر را داشته باشید.

1- اتوبوسهای( شماره اتوبوس ، ظرفیت و ....)
2- فروش بلیط( شماره اتوبوس، تاریخ، تعداد بلیط فروخته شده)

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

----------


## T_E_X_A_S

شما چرا همش توضیح فارسی می دید 

کد هایی که باید به کار ببرمو توضیح بدید و باید چه کار کنم

----------


## razavi_university

دوست عزيز وقتي كسي ساختار فيلدهاي و جداول برنامه شما را نميدونه، و شما هم اونها رو نميگيد چطور انتظار داريد كدي براي جدولي كه نمي دونيم چيه بنويسيم؟

----------


## T_E_X_A_S

ساختارش به این شکل هست :

برای فرمی که اتوبوس ثبت می شه

1 - اتوبوس (کد ماشین ,نوع ماشین,تاریخ ساخت,پلاک,ظرفیت)



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

----------


## majid325

> شما چرا همش توضیح فارسی می دید 
> 
> کد هایی که باید به کار ببرمو توضیح بدید و باید چه کار کنم


ببين دوست عزيز ، اين جوري كه نميشه كمكي به شما كرد...
بايد يه توضيح كوچيكي درباره روش كار با داده هات بگي كه ما بدونيم به چه روشي بهت بگيم،براي كار با ديتا چندين روش هست با چندين آبجكت.
شما بايد بگي از ديتاست استفاده ميكني يا هر چيز ديگه اي كه ما با همون بهت بگيم، اصلا برنامه در شبكه هست يا نه(اين خيلي مهم هست)،
در كل همون جوري كه اطلاعات رو ثبت ميكني بايد موقع ثبت، اطلاعات مربوط به مقدار ظرفيت رو با مقدار (مقدار فيلد ظرفيت - 1) آپديت كني.

----------


## T_E_X_A_S

من که گفتم DataBasam اکسس هست و از اون استفاده می کنم فیلد هاشم بالا گفتم تحت شبکه اینا هم نیست دیگه چی رو بگم ؟ می خواین اصلا برنامه رو بزارم ؟

----------


## linux

> شما چرا همش توضیح فارسی می دید 
> 
> کد هایی که باید به کار ببرمو توضیح بدید و باید چه کار کنم


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

----------


## T_E_X_A_S

این کد کجاش اشتباس :

            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0  ;Data Source=mytable.mdb");
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataReader dr;
            con.Open();
            cmd.Connection = con;
            dr = cmd.ExecuteReader();
            dr.Read();
            int menha = int.Parse(dr.GetValue(5).ToString());
            menha = menha - 1;
            this.Text = menha.ToString();
            cmd.CommandText = "UPDATE mytable SET ظرفيت = '" + menha.ToString() + "' WHERE نوع_ماشين  = '" + comboBox1.SelectedItem.ToString() + "'";
            dr.Close();
            con.Close();

----------


## majid325

چه error ي ميده ؟
چند تا پيشنهاد:
سعي كن اسمهاي فيلد ها رو انگليسي انتخاب كني.
سعي كن با ديتاست كار كني.

در نگاه كلي كه من اشتباه syntax ي نميبينم ولي اونجور كه تو اين كد من ميبينم چند مسئله مبهم هست:
اول ببخشيد كه اگه بعضي از مسائل پايه اي رو عنوان ميكنم.
هميشه مد نظر داشته باش كه كدت به ترتيب ، خط به خط اجرا ميشه:
شما زماني كه از اين كد dr = cmd.ExecuteReader(); استفاده ميكنيد يعني ميخواين فراميني كه يه وسيله اين كد  :
cmd.CommandText = "UPDATE mytable SET ظرفيت = '" + menha.ToString() + "' WHERE نوع_ماشين  = '" + comboBox1.SelectedItem.ToString() + "'";

صادر كردين اجرا بشن ، خوب در اين حالت اول بايد فرامين صادر بشن و بعد كد اجرا بشه كه شما بر عكس انجام ميدي و اتفاقي نميفته ، حالا اگه من منظور كد شما رو خوب متوجه نشدم شما بگو كه ميخواي با قطعه كد بالا چي كار رو انجام بدي؟

----------


## s_ahmadneya

دوست عزیر اقای تکزاس راه حل پست بالایی دقیقا" درست است لطفا" اجرا و نتیجه را مشاهده فرمایید.
شما به یک شی اول مقدار می دهید بعد از ان کار می خواهید کد زیر را قبل از dr.close()ببری درست می شود
 dr = cmd.ExecuteReader();
            dr.Read();

----------


## razavi_university

> چند تا پيشنهاد:
> سعي كن اسمهاي فيلد ها رو انگليسي انتخاب كني.
> سعي كن با ديتاست كار كني.


در مورد پيشنهاد اول من هم با شما موافقم، البته بهتره انگليسي باشه و فينگليش نباشه
در مورد پيشنهاد دومتون ميشه دليلتون رو بفرماييد؟
چرا DataSet؟

----------


## T_E_X_A_S

این کدی که گزاشتم هیچ ارروری نمی ده فقط عمل نمی کنه من یه:

MessageBox.Show(menha.ToString()); گزاشتم زیر کد :

this.Text = menha.ToString();وقتی رو دکمه می زنم تو اون پیغامی که می ده کم می کنه ولی نمی دونم چرا تو دیتا بیس تغییری ایجاد نمی شه .

بعد در مورد اسم فارسی فیلد ها این آخرین مشکل برنامه من هست و تا اینجاشو با همین فیلد های فارسی پیش بردم می خوام دیگه اینم فارسی باشه .

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

----------


## razavi_university

يكي از مشكلاتي كه با فيلدهاي فارسي در هنگام توسعه براتون پيش مياد تفاوت در كد پيج ها مختلف در ويندوزهاي مختلف است، مثلا در حرف *ي* كه حالتهاي مختلفي دارد *ي* - *ی*

----------


## T_E_X_A_S

کسی نیست کمک کنه بگه کجای کد های من اشتباس ؟

----------


## s_ahmadneya

> کسی نیست کمک کنه بگه کجای کد های من اشتباس ؟


کد زیر باید کار کند :متفکر:  :متفکر: 

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0  ;Data Source=mytable.mdb");
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataReader dr;
            con.Open();
        cmd.Connection = con;
////////////////////////////
            int menha = int.Parse(dr.GetValue(5).ToString());
            menha = menha - 1;
            this.Text = menha.ToString();
            cmd.CommandText = "UPDATE mytable SET ظرفيت = '" + menha.ToString() + "' WHERE نوع_ماشين  = '" + comboBox1.SelectedItem.ToString() + "'";

//////////////////////////
 

            dr = cmd.ExecuteReader();
            dr.Read();
            dr.Close();
            con.Close();

----------


## T_E_X_A_S

آقا این کدی که شما نوشتی این Error  رو می ده

Error    1    Use of unassigned local variable 'dr'


به این خطم گیر می ده :

int menha = int.Parse(dr.GetValue(5).ToString());

----------

