PDA

View Full Version : چند سوال در مورد اتصال با اکسس



man4toman
دوشنبه 29 مرداد 1386, 16:47 عصر
اول سلام .

دوم من 4 تا تکست باکس درست کردم بهمراه یک دکمه . حالا میخوام وقتی موارد لازم رو در تکست باکسها نوشتم – با زدن دکمه مورد نظر اطلاعات به بانک اطلاعاتی اکسس انتقال پیدا کنه. چیکار باید بکنم؟

سوم در مورد نمایش اطلاعات – من یه DataGride ایجاد کردم که به بانک متصل میشه و رکوردها رو نمایش میده . در این مورد میخوام بدونم چجوری میتونم یک رکورد رو از بانک حذف کنم (منظورم مثلا بکمک یه دکمه است).

یک سوال دیگه میخوام با فشردن یه دکمه تو یه تکست باکس از 1 شروع به شمردن کلیک کنه.یعنی شمارش کلیک کنه .
اول اینکه یه کد برای این شمارش مثال بزنین و دوم اینکه چجوری هر شماره رو بهمراه اطلاعات تکست باکسهای قبلی به داخل بانک وارد کنم.
مثلا به این صورت:

کلیک اول برای وارد کردن اطلاعات:
1- نام – نام پدر – نام مادر –شرح

کلیک دوم برای وارد کردن اطلاعات:
2- نام – نام پدر – نام مادر –شرح
و...

با تشکر از دوستان.

PC2st
دوشنبه 29 مرداد 1386, 17:16 عصر
اول علیک سلام .

دوم باید رکورد رو به DataSet یا DataTable اضافه کنید، بعد با متد Update از data adapter، بانک اطلاعاتی رو بروز رسانی کنید.

سوم به شکل زیر البته اگر DataGrid رو به یک دیتاتیبل وصل کرده باشید:


dt.Rows[index].Dispose();


چهارم یک متغیر در کلاس تعریف کنید و هر دفعه یکی به اون اضافه کنید،
اول اینکه مثلا:


class Form1 : Form
{
int counter = 0;

//More Codes...
}

دوم اینکه رو متوجه نشدم؟

مهدی رحیم زاده
دوشنبه 29 مرداد 1386, 21:47 عصر
واسه کار با بانک Access نمونه برنامه و توضیحات زیاده ...
اگه یه سرچ کوچوو انجام بدین ، مطمنم که به نتایج مفیدی دست پیدا می کنید ...
من خودم چند تا نمونه برنامه گزاشتم ...
تو قسمت اعلان ها هم تو تاپیک «نمونه برنام های C#.Net» نمونه برنامه هست فکر می کنم پست 17ام ....

موفق باشید

behzadk
دوشنبه 29 مرداد 1386, 22:24 عصر
به مقالات dotnet یه سر بزن حتما پیدا میکنی

man4toman
دوشنبه 29 مرداد 1386, 22:44 عصر
اول علیک سلام .

دوم باید رکورد رو به DataSet یا DataTable اضافه کنید، بعد با متد Update از data adapter، بانک اطلاعاتی رو بروز رسانی کنید.

سوم به شکل زیر البته اگر DataGrid رو به یک دیتاتیبل وصل کرده باشید:


dt.Rows[index].Dispose();



واسه دو مورد اول یعنی ورود اطلاعات و حذف یه نمونه میشه بذاری؟
در ضمن دیتاگرید به دیتابیس وصل هستش.

hdv212
سه شنبه 30 مرداد 1386, 01:21 صبح
برای ورود اطلاعات میتونی از این روش استفاده کنی :

DataRow newrow2 = ds_Khanevar1.Tables["Khanevar_Properties"].NewRow();

newrow2["num_parvande"] = Form_Parvande.num_parvande;
newrow2["name_family"] = txt_name_family.Text;
newrow2["nesbat"] = comboBox_nesbat.Text;
newrow2["sen"] = numericUpDown_sen.Value.ToString();

ds_Khanevar1.Tables["Khanevar_Properties"].Rows.Add(newrow2);

oleDbDataAdapter1.Update(ds_Khanevar1, "Khanevar_Properties");
ds_Khanevar1.AcceptChanges();
ds_Khanevar1.Clear();
oleDbDataAdapter1.Fill(ds_Khanevar1, "Khanevar_Properties");

برای حذف هم از این نمونه کد کمک بگیر :

if (this.BindingContext[ds_Khanevar1, "Khanevar_Properties"].Position == -1)
{
MessageBox.Show("چیزی برای حذف کردن وجود ندارد", "پیام");
}
else
{
if (MessageBox.Show("آیا مطمئن هستید که میخواهید این آیتم را حذف کنید ؟", "هشدار", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
DataTable dt = ds_Khanevar1.Tables["Khanevar_Properties"];
DataRow currentrow = dt.Rows[dataGridView1.CurrentCell.RowIndex];
currentrow.Delete();
oleDbDataAdapter1.Update(ds_Khanevar1);
ds_Khanevar1.AcceptChanges();
}
}

PC2st
سه شنبه 30 مرداد 1386, 01:48 صبح
پس از خواندن اطلاعات و قرار دادن آنها در شیئی مثل دیتاست (DataSet)، بعد از تغییر در اطلاعات باید از متد Update از شیئ DataAdapter استفاده کنیم تا اطلاعات در بانک اطلاعاتی ذخیره شوند.

به فرض اینکه به کمک کدهای زیر، اطلاعات را از بانک اطلاعاتی از جدول MainLog بخونیم و در یک دیتاست اونها رو لود کنیم و به یک DataGridView متصل اش کنیم:


OleDbConnection myConnection = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = log.mdb");
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM MainLog", myConnection);
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, "AnyTable");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "AnyTable";

حال بعد از هر تغییری در اطلاعات، از متد Update استفاده میکنیم.

مثلا فرض کنیم که کاربر از طریق DataGridView حدود 5 رکورد جدید رو به جدول اضافه میکنه و از آنجائی که DataGridView به یک DataSet وصل شده است، پس آن 5 رکورد جدید، به DataSet اضافه میشود. یا اصلا فرض کنید که کاربر 5 رکورد اضافه نمیکند، خودمان میخواهیم 5 رکورد را به DataSet اضافه کنیم:


ds.Tables["AnyTable"].Rows.Add("Saeid", "masdmakd", 15.5);
ds.Tables["AnyTable"].Rows.Add("Vahid", "werwer", 18);
ds.Tables["AnyTable"].Rows.Add("Karim", "vvdv", 12);
ds.Tables["AnyTable"].Rows.Add("Rashid", "nnnndffr", 11.5);
ds.Tables["AnyTable"].Rows.Add("Maryam", "ssqwe", 10.25);

حالا چطوری اطلاعات فوق را در بانک اطلاعاتی ذخیره کنیم؟ باید از شیئ DataAdapter ای که قبلا ساخته بودیم، استفاده کنیم، قبل از هر چیز باید خاصیت InsertCommand از آنرا مقدار دهی کنیم:


myDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO MainLog (FirstName, LastName, Moadel) VALUES (?, ?, ?)", myConnection);
myDataAdapter.InsertCommand.Parameters.Add("FirstName", OleDbType.BSTR).SourceColumn = "FirstName";
myDataAdapter.InsertCommand.Parameters.Add("LastName", OleDbType.BSTR).SourceColumn = "LastName";
myDataAdapter.InsertCommand.Parameters.Add("Moadel", OleDbType.Single).SourceColumn = "Moadel";
myDataAdapter.Update(ds, "AnyTable");

یعنی برای آپدیت جدول بانک اطلاعاتی (دیتابیس) و افزودن رکوردها به آن، کافیه که پنج خط بالا رو اجرا کنیم، روش کار به اینگونه است که در خط اول دستور INSERT رو مشخص میکنیم، و در خط دوم تا چهارم، پارامترهای دستور SELECT رو مشخص میکنیم. اگه دقت کنید در خط دوم تا خط چهارم از خاصیت SourceColumn استفاده شده، این خاصیت فیلدهای دیتاست رو مشخص میکنه. این خاصیت زمانی که متد Update صدا زده بشه، بدرد میخوره! در خط پنجم متد Update صدا زده میشه و در اینجاست که هر 5 رکورد به ترتیب در Database ذخیره میشند، طرز کار به اینگونه است که وقتی متد Update رو صدا میزنیم، این متد میگرده ببینه که دیتاست چه تغییراتی داشته، سپس اگه مثلا رکورد اضافه شده بود، میگرده میبینه که چه دستوری در خاصیت InsertCommand قرار گرفته و مثلا اگر 10 رکورد اضافه شده بود، بر اساس فیلدهائی از دیتاست که توسط خاصیت SourceColumn مشخص شده، مقدار فیلد تک تک رکوردها رو گرفته و در دستور INSERT قرار داده و رکوردها رو به دیتابیس اضافه میکنه.

روند کار برای حذف هم به همین شیوه است، فقط باید خاصیت DeleteCommand رو تعریف کنید و اگر کاربر رکوردهائی رو از DataGrid حذف کنه، و شما متد Update رو صدا بزنید، اونوقت رکوردها از Database هم حذف میشه. حالا لازم نیست که حتما کاربر رکوردها رو حذف کنه، اگر خودمون بخوایم رکوردی رو حذف کنیم:


ds.Tables["AnyTable"].Rows[5].Delete();

که در دستور فوق، پنجمین رکورد رو از دیتاست حذف کردیم (که در پست قبلی اشتباها نوشته بودم اینکار توسط متد Dispose صورت میگیره).
حالا که پنجمین رکورد از دیتاست حذف شد، باید Database رو هم Update کنیم تا این رکورد ازش حذف بشه، پس میشه کد زیر رو براش نوشت:


myDataAdapter.DeleteCommand = new OleDbCommand("DELETE FROM MainLog WHERE [LastName] = ?", myConnection);
myDataAdapter.DeleteCommand.Parameters.Add("LastName", OleDbType.Integer).SourceColumn = "LastName";
myDataAdapter.Update(ds, "AnyTable");

مثلا در دستور فوق، دستور DELETE رکوردی رو حذف میکنه که فیلد LastName آن برابر با فیلد LastName از دیتاستی است که آن رکورد را حذف کردیم. پس رکورد متناظر با رکورد موجود در دیتاست، از دیتابیس حذف خواهد شد. که اگر 100 تا رکورد رو هم حذف میکردیم، نوشتن یک خط متد Update کافیه و لازم نیست یک حلقه تشکیل بدیم چون خاصیت SourceColumn از DeleteCommand رو تعریف کردیم، پس برای حذف رکوردها، فیلد مشخص شده در SourceColumn رو در دستور DELETE جایگزین میکنه تا به ترتیب تمام رکوردها رو از دیتابیس حذف کنه.

PC2st
سه شنبه 30 مرداد 1386, 11:52 صبح
فقط یه چیزی که یادم رفت بگم، لازم نیست قبل از هر آپدیت، خاصیتهای InsertCommand و ... رو تنظیم کنیم، یکبار اونها تنظیم بشه کافیه، بعد از اون فقط متد Update رو صدا میزنیم.