PDA

View Full Version : سوال: ارور هنگام ثبت اطلاعات داخل بانک اطلاعات Access



forodo
پنج شنبه 19 تیر 1393, 17:31 عصر
سلام
من یه Setup ساختم از برنامه ام که داخلش فایل exe و فایل آیکون برنامه و فایل Access که بانک اطلاعاتیم می باشد قرار دارد.
وقتی که میخوام داخل بانک چیزی رو ثبت کنم اروره زیر رو نشون می ده. جالب اینه که قبلش بررسی میشه که آیا این کلمه تکراری هست یا نه که درست کار می کنه و این یعنی به بانک وصل میشه ولی وقتی می خوام داخل بانک کلمه ای رو اضافه کنم اروره زیر رو می ده.
با خود ویژوال که برنامه رو اجرا می کنم مشکلی نداره و حتی با exe داخل فولدر Debug برنامه هم اجرا می کنم مشکلی نداره.
چه کنم؟؟؟
http://up.iranfilm187.com/images/54519987662057376403.png
این هم متن ارور:
************** Exception Text **************
System.Data.OleDb.OleDbException (0x80004005): Operation must use an updateable query.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextE rrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextF orSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText( Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(Comm andBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderIntern al(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at LitnerBox.Form1.btnAdd_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
این هم کدهای ثبت اطلاعات داخل بانک:
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\Litner.mdb");
OleDbCommand com = new OleDbCommand();
OleDbDataAdapter da = new OleDbDataAdapter();
DataSet ds = new DataSet();
private void btnAdd_Click(object sender, EventArgs e)
{
ds.Clear(); // پاک کردن دیتاست
if (txtWord.Text.Trim() == "" && rtxt.Text.Trim() == "")
{
MessageBox.Show("ابتدا کنترلهای مربوطه را پر نمایید", "ثبت اطلاعات", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}

if (NoRepeat()) // بررسی تکراری نبودن کلمه
{
com.Connection = con;
com.CommandType = CommandType.Text;
com.CommandText = @"INSERT INTO tblLitner
(Word, WordMean, WordLevel)
VALUES
(@Word, @WordMean, @WordLevel)";

com.Parameters.Clear();
com.Parameters.AddWithValue("@Word", txtWord.Text.ToLower());
com.Parameters.AddWithValue("@WordMean", rtxt.Text);
com.Parameters.AddWithValue("@WordLevel", "1");

con.Open();
com.ExecuteNonQuery();
con.Close();

MessageBox.Show("اطلاعات با موفقیت ثبت شد", "ثبت اطلاعات", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("این کلمه تکراری است", "کلمه تکراری", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtWord.Text = rtxt.Text = "";
txtWord.Focus();
return;
}
txtWord.Text = rtxt.Text = "";
}

forodo
جمعه 20 تیر 1393, 13:38 عصر
فقط موقعی که Setup می سازم و نصبش می کنم و اجرا می کنم موقع ثبت توی بانک ارور می ده.
لطفاً راهنمایی کنید.
با تشکر

Masoudse7en
جمعه 20 تیر 1393, 13:41 عصر
سیسمتی که داری OleDb روش اجرا میکنید چند بیتیه ؟

forodo
جمعه 20 تیر 1393, 14:34 عصر
ویندوز 8.1 64 بیتی.
آفیس 2013

Masoudse7en
جمعه 20 تیر 1393, 14:57 عصر
خوب یک بار با X64 فایل اجرای بسازید ! مشکلتون حل میشه

forodo
جمعه 20 تیر 1393, 17:08 عصر
خوب یک بار با X64 فایل اجرای بسازید ! مشکلتون حل میشه
Platform Target رو روی x64 یا روی Any CPU که قرار می دم اروره زیر رو میده. ولی روی x86 این ارور رو نمی ده!
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
که این ارور موقعی هست که می خواد اطلاعات رو از بانک بخونه.
این هم کدهای او قسمتی که این ارور رو میده:
private void GetUnitWord()
{
int aval = 0;
int dovom = 0;
int sevom = 0;
int chaharom = 0;
int panjom = 0;
try
{
OleDbDataAdapter daadda = new OleDbDataAdapter();
DataSet dssdds = new DataSet();
daadda.SelectCommand = new OleDbCommand();
daadda.SelectCommand.Connection = con;
daadda.SelectCommand.CommandType = CommandType.Text;
daadda.SelectCommand.CommandText = @"SELECT WordLevel
FROM tblLitner";
con.Open();
daadda.Fill(dssdds, "tblLitnerWord");
con.Close();


for (int i = 0; i < dssdds.Tables["tblLitnerWord"].Rows.Count; i++)
{

if (dssdds.Tables["tblLitnerWord"].Rows[i]["WordLevel"].ToString() == "1")
{
aval++;
}
else if (dssdds.Tables["tblLitnerWord"].Rows[i]["WordLevel"].ToString() == "2")
{
dovom++;
}
else if (dssdds.Tables["tblLitnerWord"].Rows[i]["WordLevel"].ToString() == "4")
{
sevom++;
}
else if (dssdds.Tables["tblLitnerWord"].Rows[i]["WordLevel"].ToString() == "8")
{
chaharom++;
}
else if (dssdds.Tables["tblLitnerWord"].Rows[i]["WordLevel"].ToString() == "16")
{
panjom++;
}



}

lblAval.Text = aval.ToString();
lblDovom.Text = dovom.ToString();
lblsevom.Text = sevom.ToString();
lblchaharom.Text = chaharom.ToString();
lblpanjom.Text = panjom.ToString();
}
catch (Exception)
{

}
}

forodo
شنبه 21 تیر 1393, 00:01 صبح
با خود ویژوال تست کردم وقتی platform رو عوض کردم.

forodo
یک شنبه 22 تیر 1393, 00:11 صبح
دوستان یعنی هیچ کس به این ارور برخورد نکرده؟

systam
یک شنبه 22 تیر 1393, 03:01 صبح
سلام
OleDbConnection con = newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\\Litner.mdb")
توی این قسمت OLEDB.4.0 - چهار رو به 12 تغییر بده ببین درست میشه
چون OLEDB.4.0 برای ورژن 2003 استفاده میشه

اینم یه نمونه مثال :
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Database11.accdb";
یا علی

forodo
دوشنبه 23 تیر 1393, 12:31 عصر
به 12 تغییر دادم ولی نشد.
در مورد اینکه می خواستم insert رو انجام بدم توی برنامه اجرایی که نصب شده رو سیستم بود عمل اینسرت انجام نمی شد و ارور می داد وقتی با Run As Administrator ... برنامه رو اجرا می کنم درست می شه.
چرا اینجوریه؟؟؟