PDA

View Full Version : اشکال از دستورupdate



shaima
دوشنبه 29 مهر 1387, 19:26 عصر
سلام
من با پایگاه داده اکسس و زبان #c یه فرم طراحی کردم و اون رو به پایگاه متصل کردم. قبلا مشکلی در اتصال به پایگاه نداشتم و اطلاعات نمایش داده میشد و به راحتی هم ثبت میشد. با تغییرات اخیری که در برنامه دادم که من جمله اون اضافه کردن فیلدهای جدید به جدول بوده الان موقع اجرا و وقتی دکمه ثبت اطلاعات در فرم رو کلیک می کنم از دستور زیر ایراد Syntax error in INSERT INTO statement. رو میگیره:

da.Update(t);
da همون dataadapter که دستی تعریفش کردم وt هم datatable.اتصال رو هم دستی برقرار کردم.
لطفا یکی راهنماییم کنه که این پروژه داره کلافم میکنه!:اشتباه:

SMRAH1
دوشنبه 29 مهر 1387, 20:44 عصر
متن دقیق حطا چیه؟

majid325
دوشنبه 29 مهر 1387, 20:45 عصر
احتمالا اسم فيلدهاي جديد رو تو كوئري update نزاشتي!
اصلا كوئري رو خودت مينويسي يا كامند بيلدر ؟

shaima
دوشنبه 29 مهر 1387, 21:00 عصر
سلام

متن دقیق حطا چیه؟
متن خطا رو که نوشتم:Syntax error in INSERT INTO statement

احتمالا اسم فيلدهاي جديد رو تو كوئري update نزاشتي!
اصلا كوئري رو خودت مينويسي يا كامند بيلدر ؟ سلام
نه، کامند بیلدر مینویسه!

حامد مصافی
دوشنبه 29 مهر 1387, 21:09 عصر
جدول relation با جدول دیگه ای نداره؟ کلید اصلی داره؟

shaima
دوشنبه 29 مهر 1387, 21:29 عصر
جدول relation با جدول دیگه ای نداره؟ کلید اصلی داره؟
سلام
نه، فقط یه جدوله و کلید اصلی هم داره...

حامد مصافی
دوشنبه 29 مهر 1387, 21:50 عصر
پس لطفاً کل کد قسمت مربوطه رو بذارید اینجا

shaima
سه شنبه 30 مهر 1387, 00:07 صبح
پس لطفاً کل کد قسمت مربوطه رو بذارید اینجا


OleDbConnection c = new OleDbConnection();
OleDbDataAdapter da;
int pos =0;
DataTable t = new DataTable();
DataView objDataView;
CurrencyManager objCurrencyManager;
کدهای بالا قبل از لود تعریف شده.

c.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ershad.mdb";
c.Open();
da = new OleDbDataAdapter("select * from ershad", c);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
da.Fill(t);
objDataView = new DataView(t);
objCurrencyManager = (CurrencyManager)(this.BindingContext[objDataView]);
کدهای بالا در رویداد لود تعریف شده.

private void btnadd_Click(object sender, EventArgs e)
{
if (MessageBox.Show("آیا مطمئن هستید که می خواهید اطلاعات وارد شده را ثبت کنید؟", "هشدار ثبت اطلاعات ", MessageBoxButtons.YesNo,
MessageBoxIcon.None, MessageBoxDefaultButton.Button2) == DialogResult.No)
return;
else
{
DataRow drr = t.NewRow();
drr[1] = textBox1.Text;
drr[2] = txtsitename.Text;
//drr[3] = picbanner.Image;
drr[4] = txtsiteaddress.Text;
//drr[5] = pichomepage.Image;
drr[6] = cbositetype.SelectedText;
drr[7] = cboactionfield.SelectedText;
if (rdbnormal.Checked == true)
drr[8] = rdbnormal.Text;
else if (rdbstop.Checked == true)
drr[8] = rdbstop.Text;
if (rdbtndaily.Checked == true)
{
drr[9] = rdbtndaily.Text;
drr[10] = txtcountpost.Text;
drr[11] = txtcountpost1.Text;
}
t.Rows.Add(drr);
da.Update(t);
pos = t.Rows.Count - 1;
// Set the record position
// to the one that you saved...
objCurrencyManager.Position = pos;
show();
کدهای بالا مربوط به رویداد کلیک دکمه ثبت فرم است.

private void show()
{
DataRow r = t.Rows[pos];
textBox1.Text = r[1].ToString();
txtsitename.Text = r[2].ToString();
//picbanner.Image = r[3].Equals();
txtsiteaddress.Text = r[4].ToString();
//pichomepage.Image = r[5].Equals();
cbositetype.SelectedItem = r[6].ToString();
cboactionfield.SelectedItem = r[7].ToString();
if (r[8].ToString() == rdbnormal.Text)
rdbnormal.Checked = true;
else if (r[8].ToString() == rdbstop.Text)
rdbstop.Checked = true;
if (r[9].ToString() == rdbtndaily.Text)
{
rdbtndaily.Checked = true;
txtcountpost.Text = r[10].ToString();
txtcountpost1.Text = r[11].ToString();
}
txtRecordPosition.Text =(objCurrencyManager.Position + 1) +" of " + objCurrencyManager.Count;
txttoppositionrecord.Text = (objCurrencyManager.Position + 1) + " of " + objCurrencyManager.Count;
}
کد بالا مربوط به متد show. که خودم تعریف کردم.
ممنون، واقعا دارید لطف می کنیدا!

majid325
سه شنبه 30 مهر 1387, 03:58 صبح
اسم تك تك فيلدهاتو و اللخصوص اون فيلد pk رو تويه دستور select ذكر كن .
خيلي كدت رو پيچوندي ! چرا از شي BindingSource استفاده نميكني؟

shaima
سه شنبه 30 مهر 1387, 12:03 عصر
اسم تك تك فيلدهاتو و اللخصوص اون فيلد pk رو تويه دستور select ذكر كن .
خيلي كدت رو پيچوندي ! چرا از شي BindingSource استفاده نميكني؟ سلام
فیلد pk کدومه؟! یه چیز میگم نخندید! ولی دقیقا چطور باید تو دستور select بیارمشون!! پیچیدگی کد هم برمیگرده به ناشی بودن بنده و این که اون کسی که به من یاد داد اینطوری یادم داد و استفاده از دیتاست رو بهم یاد نداد، چندباری هم خواستم ازش استفاده کنم ولی دردسرش زیاد بود و در ضمن یکی هم بهم گفت اگه نمیخوام از دیتا گرید استفاده کنم بهتره از dataset استفاده نکنم .

majid325
سه شنبه 30 مهر 1387, 19:06 عصر
فيلد pk فيلدي هست كه تو جدولش به صورت كليد صلي ذخيره شده و pk به معنايي PRIMARY key ميباشد.
اصلا لزوم pkرو در جدول ميدوني؟
مثلا دستور select شما اينجوري هست

select * from ershad
علامت * يك علامت جهت تند نويسي (ميانبر) است براي اينكه اسم تك تك فيلدها رو ذكر نكني
بايد اسم تك تك فيلدها رو ذكر كني:

select Filde1,Filde2 from ershad
در كد بالا filde1 , filde2 دو تا فيلد در جدول من بودن .
حالا بايد اسم تمام فيلدهات رو تو دستور select ذكر كني كه شي OleDbCommandBuilder بتونه از روي اون واسط كوئري هاي مربوطه رو درست كنه.

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

majid325
سه شنبه 30 مهر 1387, 19:14 عصر
سلام
پیچیدگی کد هم برمیگرده به ناشی بودن بنده و این که اون کسی که به من یاد داد اینطوری یادم داد و استفاده از دیتاست رو بهم یاد نداد، چندباری هم خواستم ازش استفاده کنم ولی دردسرش زیاد بود .

خوب اينجا (منظورم تو web ) خيلي چيزها بايد ياد بگيري ، (به كلمه بايد توجه كن)
والله.. دردسرش از كد خودت كمتره..... ebook آقاي هاشميان رو خوندي؟


سلام
در ضمن یکی هم بهم گفت اگه نمیخوام از دیتا گرید استفاده کنم بهتره از dataset استفاده نکنم .
اشتباه گفته .(يا قشنگ توضيح نداده)

Itist82
سه شنبه 30 مهر 1387, 19:25 عصر
سلام
معمولا مشکل توی دستور insert مربوط به اختلاف در تعداد، ترتیب یا نوع بین1- تعداد فیلد های انتخاب شده (اونایی که جلوی اسم جدول میاد مثل این)



insert into t1(field1,field2,field3) values ...

2- مقادیری که جلوی values ذکر می شه هستن. منظور اون دوستمون هم احتمالا این بوده که شما یه بار خود دستور insert رو بنویسی و اجرا کنی ببینی مشکل این نیست؟ مثلا این کوئری مشکل داره:



insert into myTable(id,name,date) values('ali',2,'12/2/87')

چون فیلد اول که ذکر شده باید id باشه (مثلا فرض کنیم نوع عددی هم هست) ولی ما داریم یه رشته بهش می دیم.
اینا رو چک کنید شاید حل بشه

majid325
سه شنبه 30 مهر 1387, 21:27 عصر
دوستمون داره با CommandBuilder كار ميكنه.

shaima
چهارشنبه 01 آبان 1387, 20:55 عصر
سلام
یه موضوع خنده دار! من از دیشب هی میام صفحه رو refresh می کنم، میبینم خبری از جواب نیست! به نظرم عجیب میومد ولی تازه الان دیدم موضوع رفته صفحه2 :قهقهه: پرفسورم دیگه!:چشمک:
اسم تک تک فیلدها رو select کردم الان قبل از اون که به آپدیت برسم یه اشکال دیگه میگیره: من یه فیلد دارم به اسم managername از دستور زیر ارور Undefined function 'managername' in expression. رو میده.

da.Fill(t);
da همون dataadapter.

اگه از من ميشنوي كه اين آبجكت datarow براي اين كارها خوب نيست
یعنی از dataset استفاده کنم؟

خوب اينجا (منظورم تو web ) خيلي چيزها بايد ياد بگيري ، (به كلمه بايد توجه كن)
والله.. دردسرش از كد خودت كمتره..... ebook آقاي هاشميان رو خوندي؟
حق با شماست یاد میگیرم! اگه خدا بخواد هاشمیان رو هم دارم...

majid325
شنبه 04 آبان 1387, 05:04 صبح
ببخشيد من چند روزي نبودم..
ميتوني دستور Select رو اينجا بزاري احتمالا تو دستور select خطاي Syntax داري.

xxxxxxxxxx
شنبه 04 آبان 1387, 06:36 صبح
سلام.دوستامون راست ميگند بايد براي كمك بهتر نام همه فيلدها وselect نوشته شده ات روبنويسي ولي چشم بسته بر حسب تجربه عرض كنم منهم با CommandBuilderكاركردم بعضي موقعها حتي اگه اين مشكل رو حل كنيد يه مشكل ديگه ميگيره كه عجيب قريبه! و ضعفهاي ديگه پيشنهاد ميشه كه دستورات insert update delete را خودت بنويسي .بهتر وسريعتر كار ميكنه اگر هم نميدوني براي اين قضيه جستجو يا سوال كني زودتر مشكلت حل ميشود.

shaima
دوشنبه 06 آبان 1387, 00:15 صبح
سلام

ببخشيد من چند روزي نبودم..
ميتوني دستور Select رو اينجا بزاري احتمالا تو دستور select خطاي Syntax داري.
سلام.دوستامون راست ميگند بايد براي كمك بهتر نام همه فيلدها وselect نوشته شده ات روبنويسي ولي چشم بسته بر حسب تجربه عرض كنم منهم با CommandBuilderكاركردم بعضي موقعها حتي اگه اين مشكل رو حل كنيد يه مشكل ديگه ميگيره كه عجيب قريبه! و ضعفهاي ديگه پيشنهاد ميشه كه دستورات insert update delete را خودت بنويسي .بهتر وسريعتر كار ميكنه اگر هم نميدوني براي اين قضيه جستجو يا سوال كني زودتر مشكلت حل ميشود.بالاخره تصمیم خودم رو گرفتم، میخوام دستورات insert update delete رو خودم بنویسم، انگار اینجوری بهتره. چون گمون نمی کنم اشکالی که از select میگیره ربطی به دستور داشته باشه. یه برنامه ساده سراغ ندارید که همه اینها رو شامل بشه؟!:متفکر:

majid325
دوشنبه 06 آبان 1387, 00:25 صبح
سعي نكن دورش بزني..
اين يه تيكه كد كه خودم دارم كار ميكنم ببين كه مراحل رو به اين صورت طي ميكني؟


daMem = new SqlDataAdapter("SELECT [Member_Code] ,[Member_Name],[Member_Family],[Member_BirthDate],[Member_Position],[Member_UserName],[Member_UserPass],[Member_State],[Member_OnLine] FROM [MEDICINE_MANAGEMENT].[dbo].[Tb_Member] ", cnn);
daMem.Fill(dsMem, "Tb_Member");
cbMem = new SqlCommandBuilder(daMem);

بالاخره توي جدول فيلد pk داري؟ اون خيلي مهمه.
dsMem يه ديتاست هست، يه شي ازش درست ميكني (مثل بقيه شي ها) بعد همونطور كه تو كد ميبيني مقدار دهيش ميكني.