PDA

View Full Version : سوال: درخواست آموزش برقراری ارتباط بین dgv و access



c-sharp_South
چهارشنبه 22 خرداد 1392, 18:59 عصر
سلام دوستان.
توی فرم خیلی گشتم ولی همه ی مطالبی که پیدا کردم مشکل دار بودن.
میخواستم اگه میشه یکی از دوستان آموزش برقراری ارتباط بین dgv و access رو بده یا
اگه فایل pdf موجود است کفایت میکنه.
میخواستم بدونم چطوری میشه اطلاعات رو توسط dgv از اکسس گرفت ، داد و ویرایش کرد و حذف کرد.

ممنون میشم راهنمایی کنید.

vira1368
چهارشنبه 22 خرداد 1392, 22:05 عصر
فرقی نمیکنه با چه بانکی وصل بشید. نحوه اتصال ، ارتباط و اجرای دستور مثل هم هستند.
برای کانکشن استریگ هم میتونید از این سایت استفاده کنید: http://www.connectionstrings.com/

khokhan
چهارشنبه 22 خرداد 1392, 22:22 عصر
سلام دوستان.
توی فرم خیلی گشتم ولی همه ی مطالبی که پیدا کردم مشکل دار بودن.
میخواستم اگه میشه یکی از دوستان آموزش برقراری ارتباط بین dgv و access رو بده یا
اگه فایل pdf موجود است کفایت میکنه.
میخواستم بدونم چطوری میشه اطلاعات رو توسط dgv از اکسس گرفت ، داد و ویرایش کرد و حذف کرد.

ممنون میشم راهنمایی کنید.

شما هر کاری رو که برای ارتباط دیتا گرید با sql انجام می دین برای acsess هم همون کارها پیاده سازی می کنین با چند تا تفاوت جزئی :

1 . تعاریف مربوط به فضا نام کلاس فرم
acsess =
using System.Data.OleDb;
sql=
using System.Data.SqlClient;

2 . رشته اتصال

acsess=
@"provider=microsoft.jet.oledb.4.0;" + @"data source="+Application.StartupPath+"/dbs.mdb";

sql =
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\lib.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

3 کنترلهای مربوط به ذخیره وبازیابی داده مانند دیتاست و دیتاتیبل و.......

acsess =
private OleDbCommand cmd;
private OleDbConnection con;
private OleDbDataAdapter da;
private DataTable dt;

sql =
public static SqlCommand SCM = new SqlCommand();
public static SqlDataAdapter SDA = new SqlDataAdapter();
public static SqlCommandBuilder SCB = new SqlCommandBuilder();
public static DataTable DT = new DataTable();

همین این سه مورد تفاوتشونه

c-sharp_South
پنج شنبه 23 خرداد 1392, 13:31 عصر
ممنون . دوست دارم هرجا رو که تونستم انجام بدم و بفهمم اینجا بزارم تا بقیه هم اگه لازم داشتن استفاده کنند.
برای خوندن اطلاعات از datagridview :


using System.Data.OleDb;



public Form1()
{
InitializeComponent();
}
OleDbConnection con = new OleDbConnection();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter();




private void Form1_Load(object sender, EventArgs e)
{
try
{
con.ConnectionString = @"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb";
con.Open();
ds.Tables.Add(dt);
da = new OleDbDataAdapter("SELECT * from zirna", con);
da.Fill(dt);
dg.DataSource = dt.DefaultView;
}

catch (Exception error) { MessageBox.Show("FOUT:" + error.Message); }
}

c-sharp_South
پنج شنبه 23 خرداد 1392, 13:35 عصر
از اساتید خواهش میکنم هرکجا که اضافی بود یا مشکلی در اون دیدن گوش زد کنند.

برای اضافه کردن یک مقدار در جدول:



try
{
string Ehem = textBox1.Text;
string ID = textBox2.Text;
string Wlc = textBox2.Text;
OleDbConnection conn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO zirna([Ehem],[ID],[Wlc]) VALUES (@Ehem,@ID,@Wlc)";
cmd.Parameters.Add("Ehem", OleDbType.VarChar).Value = Ehem;
cmd.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
cmd.Parameters.Add("@Wlc", OleDbType.VarChar).Value = Wlc;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception error) { MessageBox.Show("FOUT:" + error.Message); }


کد بالا مشکلی نداره و مقدار رو اضافه میکنه ( باید بعد از add کردن برنامه رو restart کنید فعلا )
بعد از اضافه کردن نتونستم جدول رو Update کنم .اگه میشه راهنمایی کنید که نیازی به restart کردن نباشه. :قلب:

vira1368
پنج شنبه 23 خرداد 1392, 13:44 عصر
از اساتید خواهش میکنم هرکجا که اضافی بود یا مشکلی در اون دیدن گوش زد کنند.

برای اضافه کردن یک مقدار در جدول:



try
{
string Ehem = textBox1.Text;
string ID = textBox2.Text;
string Wlc = textBox2.Text;
OleDbConnection conn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO zirna([Ehem],[ID],[Wlc]) VALUES (@Ehem,@ID,@Wlc)";
cmd.Parameters.Add("Ehem", OleDbType.VarChar).Value = Ehem;
cmd.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
cmd.Parameters.Add("@Wlc", OleDbType.VarChar).Value = Wlc;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception error) { MessageBox.Show("FOUT:" + error.Message); }


کد بالا مشکلی نداره و مقدار رو اضافه میکنه ( باید بعد از add کردن برنامه رو restart کنید فعلا )
بعد از اضافه کردن نتونستم جدول رو Update کنم .اگه میشه راهنمایی کنید که نیازی به restart کردن نباشه. :قلب:

کافیه کد نمایش اطلاعات رو دوباره بذارید، البته چون در form load این کار رو انجام دادین کافیه فقط بعد از insert کردن یکبار این متد رو فراخوانی کنید:

Form1_Load(sender, e);

c-sharp_South
پنج شنبه 23 خرداد 1392, 14:07 عصر
برای جست و جو در یکی از ردیف ها که اسم اون ID است یک textbox اضافه کنید و اسم اون رو فرضا به txtsearch تغییر بدید و کد زیر را در رویداد text changeاش قرار بدید.


private void txtsearch_TextChanged_1(object sender, EventArgs e)
{
OleDbConnection search = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb");
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM zirna where [ID] LIKE '" + txtsearch.Text + "%'", search);
DataTable tb1 = new DataTable();
da.Fill(tb1);
dg.DataSource = tb1;
}

khokhan
پنج شنبه 23 خرداد 1392, 14:08 عصر
از اساتید خواهش میکنم هرکجا که اضافی بود یا مشکلی در اون دیدن گوش زد کنند.

برای اضافه کردن یک مقدار در جدول:



try
{
string Ehem = textBox1.Text;
string ID = textBox2.Text;
string Wlc = textBox2.Text;
OleDbConnection conn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO zirna([Ehem],[ID],[Wlc]) VALUES (@Ehem,@ID,@Wlc)";
cmd.Parameters.Add("Ehem", OleDbType.VarChar).Value = Ehem;
cmd.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
cmd.Parameters.Add("@Wlc", OleDbType.VarChar).Value = Wlc;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception error) { MessageBox.Show("FOUT:" + error.Message); }


کد بالا مشکلی نداره و مقدار رو اضافه میکنه ( باید بعد از add کردن برنامه رو restart کنید فعلا )
بعد از اضافه کردن نتونستم جدول رو Update کنم .اگه میشه راهنمایی کنید که نیازی به restart کردن نباشه. :قلب:

عالیه امااگه همه اینها رو بذاری داخل کلاسها و توی فرم فراخوانی کنی دیگه لازم نیس هربار و توی تمامی فرمها این همه رو تکرار کنی

ارادت داریم

c-sharp_South
پنج شنبه 23 خرداد 1392, 14:14 عصر
کافیه کد نمایش اطلاعات رو دوباره بذارید، البته چون در form load این کار رو انجام دادین کافیه فقط بعد از insert کردن یکبار این متد رو فراخوانی کنید:

Form1_Load(sender, e);


کد form load رو هم بعد از catch و هم قبل از catch قرار دادم ولی خطا میده موقع add کردن:
http://uploadtak.com/images/j8821_catch.png

از void هم برای form load استفاده کردم و کد اجرا شدن دستورات void رو قرار دادم باز هم خطا داد.

Mahmoud Zaad
پنج شنبه 23 خرداد 1392, 14:42 عصر
کد form load رو هم بعد از catch و هم قبل از catch قرار دادم ولی خطا میده موقع add کردن:
http://uploadtak.com/images/j8821_catch.png

از void هم برای form load استفاده کردم و کد اجرا شدن دستورات void رو قرار دادم باز هم خطا داد.
برای اینکه توی لود فرم con.Open() رو نوشتی و در آخر کانکشن رو نبستی. در کل نیازی به این یه خط نیست، پاکش کن.

vira1368
پنج شنبه 23 خرداد 1392, 17:01 عصر
کد form load رو هم بعد از catch و هم قبل از catch قرار دادم ولی خطا میده موقع add کردن:
http://uploadtak.com/images/j8821_catch.png

از void هم برای form load استفاده کردم و کد اجرا شدن دستورات void رو قرار دادم باز هم خطا داد.

شما از معماری اتصال آفلاین استفاده کردین، اصلا احتیاج نیست کانکشن رو باز کنید.
ولی اگر زمانی خواستین از معماری اتصال آنلاین استفاده کنید بعد از اتمام کار حتما کانکشن رو ببندید و هر وقت دوباره لازم بود باز کنید.هر وقت از این معماری استفاده کردی، به نظر من بیا و در بلاک finally کانکشن رو ببند، اینطور خیالت راحته برنامه چه انجام بشه(Try) و چه به مشکل بر بخوره(Catch) در نهایت در بلاک finally کانکشن بسته میشه.

c-sharp_South
پنج شنبه 23 خرداد 1392, 18:27 عصر
ممنون از راهنمایی هاتون. مشکل حل شد. :قلب:
الان:


private void Form1_Load(object sender, EventArgs e)
{
load();
}

private void load()
{
try
{
ds.Reset();
ds.Tables.Add(dt);
da = new OleDbDataAdapter("SELECT * from zirna",con);
da.Fill(dt);
dg.DataSource = dt.DefaultView;
}

catch (Exception error) { MessageBox.Show("FOUT:" + error.Message); }
}


کد add کردن :



private void button2_Click(object sender, EventArgs e)
{
try
{
string Ehem = textBox1.Text;
string ID = textBox2.Text;
string Wlc = textBox2.Text;
OleDbConnection conn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO zirna([Ehem],[ID],[Wlc]) VALUES (@Ehem,@ID,@Wlc)";
cmd.Parameters.Add("Ehem", OleDbType.VarChar).Value = Ehem;
cmd.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
cmd.Parameters.Add("@Wlc", OleDbType.VarChar).Value = Wlc;
cmd.ExecuteNonQuery();
conn.Close();
load();
}
catch (Exception error) { MessageBox.Show("FOUT:" + error.Message); }
}

c-sharp_South
پنج شنبه 23 خرداد 1392, 18:34 عصر
حذف کردن یک ردیف :



private void button1_Click(object sender, EventArgs e)
{
OleDbCommand command = new OleDbCommand();
if (dg.SelectedCells.Count != 0)
{
if (MessageBox.Show("Are You Sure To Remove?", "Remove?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
try
{
string Ehem = "";
string ID = "";
Ehem = dg.CurrentRow.Cells["Ehem"].Value.ToString();
ID = dg.CurrentRow.Cells["ID"].Value.ToString();
con = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0;" + @"data source=" + Application.StartupPath + "/dbs.mdb");
con.Open();
string query = "DELETE FROM zirna WHERE Ehem=@p1 AND ID=@p2";
command = new OleDbCommand();
command.Parameters.AddWithValue("@p1", Ehem);
command.Parameters.AddWithValue("@p2", ID);
command.CommandText = query;
command.Connection = con;
command.ExecuteNonQuery();
con.Close();
command.Dispose();
load();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}