PDA

View Full Version : اشکال در اجرای دستور



mehdi4467
دوشنبه 22 شهریور 1389, 22:19 عصر
سلام
نمی دونم چرا خط زیر syntax error میده؟

string text = "insert into check (ch_bankid,ch_series,ch_number)values('" +
bank_id + "','" +
seriesNumberTextBox.Text + "','" +
i + "')";

Programmer 1
دوشنبه 22 شهریور 1389, 22:49 عصر
bank_id آيا يك تكست باكسه اگر آره بايد بنويسيد : bank_id.Text و همچنين i هم به همين صورت .
لطفا وقتي سوال مي كنيد كمي هم توضيح بيشتري در موردش بديد تا هم خودتون معطل نشيد و هم پاسخ دهنده سردرگم نشه ، مثلا اينجا معلوم نيست i يك متغيره كه فبلا مقدار گرفته يا نام يك تكست باكس و يا هر چيز ديگه اي . بازم اگر مشكل رفع نشد در خدمت هستم .

با تشكر /.

hamid67fathi
دوشنبه 22 شهریور 1389, 22:51 عصر
دوست عزيز احتمالاً به خاطره تک کتيشن ( ' ) باشه که اطراف bank_id و i گذاشتيد.

mehdi4467
دوشنبه 22 شهریور 1389, 22:53 عصر
bank_id آيا يك تكست باكسه اگر آره بايد بنويسيد : bank_id.Text و همچنين i هم به همين صورت .
لطفا وقتي سوال مي كنيد كمي هم توضيح بيشتري در موردش بديد تا هم خودتون معطل نشيد و هم پاسخ دهنده سردرگم نشه ، مثلا اينجا معلوم نيست i يك متغيره كه فبلا مقدار گرفته يا نام يك تكست باكس و يا هر چيز ديگه اي . بازم اگر مشكل رفع نشد در خدمت هستم .

با تشكر /.




ممنون
خطوط قبلی به این شکله:


int i;
string bank_id_sql_command = "Select bank_id from bank where bank_name = '" + accountNumbercomboBox.Text + "'";
string a1 = "provider=microsoft.jet.oledb.4.0;data source=bank.mdb";
OleDbConnection con1 = new OleDbConnection(a1);
OleDbCommand cmd5 = new OleDbCommand(bank_id_sql_command, con1);
con1.Open();
int bank_id = Convert.ToInt32(cmd5.ExecuteScalar());
con1.Close();

for (i = Convert.ToInt32(fisrtNumberTextBox.Text); i < Convert.ToInt32(fisrtNumberTextBox.Text) - 1 + Convert.ToInt32(NumberOfPaperCmboBox.Text); i++)
{
Class1 c2 = new Class1();

string text = "insert into check (ch_bankid,ch_series,ch_number)values('" +
bank_id + "','" +
seriesNumberTextBox.Text + "','" +
i + "')";
c2.insert(text);

که کلاس C1 مربوط به احرای کوئری هست که درست کار میکنه.

mehdi4467
دوشنبه 22 شهریور 1389, 22:59 عصر
دوست عزيز احتمالاً به خاطره تک کتيشن ( ' ) باشه که اطراف bank_id و i گذاشتيد.

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

cheshm6k
دوشنبه 22 شهریور 1389, 23:14 عصر
سلام .

bank_idو i رو به string تبدیل کنید واگه نوع این دو فیلد در جدول number هست نباید کوتیشن بذاری.

موفق باشید.

mehdi4467
دوشنبه 22 شهریور 1389, 23:28 عصر
سلام .

bank_idو i رو به string تبدیل کنید واگه نوع این دو فیلد در جدول number هست نباید کوتیشن بذاری.

موفق باشید.

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


string text = "insert into trakonesh (tr_bankid,tr_date,tr_date_miladi,tr_time,tr_date_ time,tr_sanadno,tr_ghabzno,tr_checkno,tr_tozihat,t r_bedehkar,tr_bestankar)values('" +
bank_id + "','" +
date1 + "','" +
dd + "','" +
time1 + "','" +
date_time + "','" +
sanadNumberTextBox.Text + "','" +
ghabzNumberTextBox.Text + "','" +
checkNumberTextBox.Text + "','" +
tozihatTextBox.Text + "','" +
bedehkarValueTextBox.Text + "','" +
bestankarValueTextBox.Text + "')";


یک سوالی من جدول check رو تازه اضاقه کرده ام. نمی تونه از این باشه؟

mahdi87_gh
دوشنبه 22 شهریور 1389, 23:28 عصر
دوست عزیز این روش کدنویسی شما اشکال داره. شما بهتره از پارامترها استفاده کنید یا حداقل در نوشتن این جور دستورات از String.Format استفاده کنید

mehdi4467
دوشنبه 22 شهریور 1389, 23:35 عصر
دوست عزیز این روش کدنویسی شما اشکال داره. شما بهتره از پارامترها استفاده کنید یا حداقل در نوشتن این جور دستورات از String.Format استفاده کنید

می تونید توضیح بیشتری بدهید؟

cheshm6k
دوشنبه 22 شهریور 1389, 23:37 عصر
یک سوالی من جدول check رو تازه اضاقه کرده ام. نمی تونه از این باشه؟

برنامه اجرا میشه ؟

mehdi4467
دوشنبه 22 شهریور 1389, 23:41 عصر
برنامه اجرا میشه ؟

آره و برای اینکه مطمئن بشم جدول check رو پیدا می کنه در عبارت sql نام check رو به check1 تغییر دادم این بار خطا عوض شد و گفت این جدول وجود نداره. از اینجا مطمئن شده جدول رو پیدا می کنه.

mahdi87_gh
دوشنبه 22 شهریور 1389, 23:59 عصر
می تونید توضیح بیشتری بدهید؟ برای نوشتن این دستورات بهتر است همیشه از گارامترها استفاده کنید. در سایت نمونه های فراوانی وجود داره که بگردید پیدا می کنید. اما در مورد فرمت بشکل زیر عمل کنید:

string.Format("Insert Into Table1 (field1,field2) Values ('{0}','{1}'", var1, var2);
var1 بجای 0 قرار میگیره و var2 بجای 1 اینطوری از نوشتن 50 تا += خلاص میشین

cheshm6k
سه شنبه 23 شهریور 1389, 00:18 صبح
اینجا رو ببین :

http://www.barnamenevis.org/forum/showpost.php?p=1085848&postcount=7

یه نمونه از کار با پارامترهاست.

MoS4k1
سه شنبه 23 شهریور 1389, 00:34 صبح
متغیرهاتو به صورت local تعریف کن

mehdi4467
سه شنبه 23 شهریور 1389, 09:02 صبح
سلام
ممنون از راهنمايي هاتون ولي مشكل من فكر نمي كنم به موارد بالا مربوط باشه. درسته اين روش نوشتن اشتباهه ولي اين مشكل مربوط به ايت قضايا نميشه. من كد را مي گذارم اگر ممكنه يك نگاهي كنيد.

تشكر

علیرضا حسن زاده
سه شنبه 23 شهریور 1389, 09:30 صبح
دوست عزیز من برنامه شمارو مطالعه کردم ایراد برنامه شما از نام جدول هست احتمالا عبارت Check یه کلمه کلیدی در اکسس هست و اگه اون رو به Check2 یا Chek تغییر نام بدید برنامتون درست کار میکنه
** یه موردی هم در مورد دیتا بیستون چرا برای هر برگ چک یک رکورد اضافه می کنید این به نظر من اشتباهه و در زمان اجرا میشه اون رو محاسبه کرد**

mehdi4467
سه شنبه 23 شهریور 1389, 09:43 صبح
دوست عزیز من برنامه شمارو مطالعه کردم ایراد برنامه شما از نام جدول هست احتمالا عبارت Check یه کلمه کلیدی در اکسس هست و اگه اون رو به Check2 یا Chek تغییر نام بدید برنامتون درست کار میکنه
دست شما درد نكنه كار كرد. ولي جالبه من براي اينكه مطمئن بشم دستور درسته مستقيم تو access اجرا كرده بودم و كار مي كرد.


** یه موردی هم در مورد دیتا بیستون چرا برای هر برگ چک یک رکورد اضافه می کنید این به نظر من اشتباهه و در زمان اجرا میشه اون رو محاسبه کرد**

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

علیرضا حسن زاده
سه شنبه 23 شهریور 1389, 09:49 صبح
می تونی نام جدول رو به صورت [Check] بنویسی و مشکل حل بشه ولی به کار بردن نام های کلیدی معمولا مشکل ساز میشه