PDA

View Full Version : مشکل در insert کردن در access



aliblue
پنج شنبه 28 اردیبهشت 1391, 13:13 عصر
سلام.توی سی شارپ وقتی میخوام رکوردی رو در اکسس insert کنم خطای syntax error میده ولی فکر نکنم کدم مشکلی داشته باشه.توی خود اکسس هم وقتی میخوام کوئری بنویسم insert نمیشه و میگه بعلت disableبودن block میشه.enable که میکنم توی خود اکسس میتونم اینسرت کنم ولی بازم توی برنامم نمیشه و خطای syntax error میده.پروژه رو برا دانلود گذاشتم ممنون میشم راهنمایی کنین.
یه مقدار هم عجله دارم.
http://wdl.persiangig.com/pages/download/?dl=http://aliblue.persiangig.com/product.rar

aliblue
پنج شنبه 28 اردیبهشت 1391, 14:12 عصر
توی همون برنامه به جای اکسس از sqlserver استفاده کردم و همون کد ها رو کپی پیست کردم (فقط connectionstring رو تغییر دادم و oledb هارو به sql تغییر دادم) و بدون هیچ مشکلی کار کرد.فقط مشکل اینه که من میخوام برنامه رو با اکسس بنویسم.کسی میدونه مشکل از چیه؟

aliblue
پنج شنبه 28 اردیبهشت 1391, 18:45 عصر
کد من به این شکله:

private void btnInsert_Click(object sender, EventArgs e)
{
OleDbConnection con1 = new OleDbConnection();
con1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=F:\\carpet.mdb";
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = con1;
cmd1.CommandText="insert into product (id,Name,price) values('880','5','10')";//با این خط مشکل نداره ولی وقتی به جای اینسرت به این شکل،از کد پایین
// استفاده میکنم خطا میگیره

/*cmd1.CommandText = "INSERT INTO product (id,name,price,size,na,creator) values(@id,@name,@price,@size,@na,@creator)";
cmd1.Parameters.AddWithValue("@id", Convert.ToInt32(code1.Text));
cmd1.Parameters.AddWithValue("@name", name1.Text);
cmd1.Parameters.AddWithValue("@price", Convert.ToInt32(price1.Text));
cmd1.Parameters.AddWithValue("@size", size1.Text);
cmd1.Parameters.AddWithValue("@na", Convert.ToInt32(na1.Text));
cmd1.Parameters.AddWithValue("@creator", cretor1.Text);
*/

try
{
con1.Open();
cmd1.ExecuteNonQuery();
con1.Close();
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}

به خط 7 توجه کنین.وقتی به صورت مستقیم insert میکنم مشکلی نداره ولی وقتی از کد پایینش که فعلا بصورت توضیحات(بین/* و */)گذاشتم استفاده میکنم خطا میگیره.اکسس با فرستادن پارامتر مشکلی داره یا مشکل از جای دیگه ست؟

samadblaj
پنج شنبه 28 اردیبهشت 1391, 19:20 عصر
ببخشید من با قسمت برنامه نویسی اکسس کار نکردم چجور میتونم کمکت کنم؟

aliblue
پنج شنبه 28 اردیبهشت 1391, 19:25 عصر
اگه تونستی پروژه رو دانلود کن تو پست اول گذاشتم.شبیه همون کدیه که تو توی تاپیک زیر نوشتی فقط از اشیای مربوط به اکسس استفاده شده.
http://barnamenevis.org/showthread.php?341803-%D9%84%D8%B7%D9%81%D8%A7-%D8%A7%DB%8C%D9%86-%DA%A9%D8%A7%D9%86%DA%A9%D8%B4%D9%86-%D8%B1%D8%A7-%D8%A8%D8%B1%D8%A7%D9%85-%D8%A7%D8%B5%D9%84%D8%A7%D8%AD-%DA%A9%D9%86%DB%8C%D8%AF-(%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C)
خواهشا اساتید راهنمایی کنن.

Mahmoud Zaad
پنج شنبه 28 اردیبهشت 1391, 19:54 عصر
سلام
دوست عزیز بعضی از کلمات برای اکسس رزرو شده هستند و استفاده از اونها به عنوان اسم فیلد خطای منطقی میده. در پروژه شما کلمه size مشکل داره اگه اسم این فیلد رو عوض کنید مشکل حل میشه. ولی چند تا نکته هم هست که میگم:
یکی این کانکشن استرینگ رو به شکل زیر تغییر بدید:


con1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\\carpet.mdb";

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

aliblue
پنج شنبه 28 اردیبهشت 1391, 20:09 عصر
در پروژه شما کلمه size مشکل داره
با سپاس فراوان.اگه نمیگفتین تا سال دیگه هم نمیفهمیدم مشکل از چیه.بازم ممنون.


یکی این کانکشن استرینگ رو به شکل زیر تغییر بدید:
1
2
con1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\\carpet.mdb";
یعنی چه تغییری بدم؟این که همونه
توی این پروژه که گذاشته بودم چون بانک رو Add کرده بودم و توی فولدر پروژه فایل Access وجود داشت آیا نوشتن قسمت آخر کانکش به صورت زیر غلطه؟ولی کار میکنه ها
Data Source=carpet.mdb

همچنین برای تعریف نوع داده توی بانک، وقتی autonumber رو انتخاب کردید باید اجازه بدید که خود اکسس این رو مقدار دهی کنه شما توی پروژه دوباره این مقدار رو از کاربر میگیرید، می تونید یه فیلد دیگه برای کد محصول تعریف کنید.
نمیشه به این صورت باشه که اگه کاربر وارد کرد کد کاربر درج بشه اگه نه خود اکسس یه کد براش بذاره؟

Mahmoud Zaad
پنج شنبه 28 اردیبهشت 1391, 20:30 عصر
شما اگه بخواید از برنامه در یه سیستم دیگه استفاده کنید باید بانک کنار فایل اجرایی باشه یا اینکه توی یه آدرس مشخص. برای مورد دوم که باید آدرس رو مستقیماً توی کانکشن استرینگ بیارید (که در این مقال نمی گنجد!!!) ولی اگه بخوایم بانک کنار فایل اجرایی باشه کانکشن استرینگ می تونه به شکلی که گفتم یا به صورت


con1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\carpet.mdb";

باشه. البته اینجوری که شما هم نوشتید جواب میده.

samadblaj
پنج شنبه 28 اردیبهشت 1391, 22:09 عصر
ببخشید من نتونستم ، کاری کنم خطا میده :ناراحت: خوب میشه کد رو بذار تا مثل همون امتحان کنم.

از c# هم استفاده کردم.

aliblue
جمعه 29 اردیبهشت 1391, 09:18 صبح
دوست عزیز نیازی نیست مشکل از تعریف یک فیلد به نام size بود که کلمه رزرو شده در Ascess هست و اون باعث مشکل شده بود که با راهنمایی maysamfthi عزیز حل شد.