PDA

View Full Version : سوال: مشکل در اضافه کردن رکورد



Fastdesign
دوشنبه 29 آبان 1391, 12:42 عصر
سلام

کلاسی از اشیا کار با پایگاه داده به صورت عمومی در فرم یک به این صورت تعریف کردم :
public class Dbconnection
{
public OleDbConnection con = new OleDbConnection();
public OleDbDataAdapter da = new OleDbDataAdapter();
public DataTable dt = new DataTable();
public BindingSource bs = new BindingSource();
public OleDbCommand cmd = new OleDbCommand();
}

حال در رویداد Load فرم یک این کدها رو برای اتصال به پایگاه داده و جدول نوشتم :
Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Database.mdb";
connect.da = new OleDbDataAdapter("Select * from Phon", connect.con);
connect.da.Fill(connect.dt);
connect.bs.DataSource = connect.dt;
dataGridView1.DataSource = connect.bs;

حالا می خوام تو فرم دوم با استفاده از کدهای نوشته شده در فرم اول به این صورت یک رکورد به جدول اضافه کنم :
Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.Open();
string s = "Insert into phon(F_Name,L_Name,phon1)Values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
OleDbCommand addq = new OleDbCommand(s, connect.con);
addq.ExecuteNonQuery();
connect.dt.Clear();
connect.da.Fill(connect.dt);
connect.con.Close();

زمانی که رو دکمه اضافه رکورد کلیک می کنم از کد connect.con.Open(); خطا میگیره !

به نظر شما مشکل از چیه؟

با تشکر

mhq1368
دوشنبه 29 آبان 1391, 12:50 عصر
سلام
شما بیاین کانکشن استرینگ تون رو تو همون کلاسی که اشیا رو تعریف کردین بزارین فکر کنم مشکلتون حل میشه

اگه نشد


|DataDirectory| رو بردارین

و بنویسید
data source=database.mdb

انشاالله مشکلتون حل میشه

Fastdesign
دوشنبه 29 آبان 1391, 14:30 عصر
داش من این کار رو انجام دادم ولی حالا از این خط ایراد می گیره !
connect.da.Fill(connect.dt);

RIG000
دوشنبه 29 آبان 1391, 14:51 عصر
ارورش چیه؟

Fastdesign
دوشنبه 29 آبان 1391, 15:02 عصر
این هم ارورش :

The SelectCommand property has not been initialized before calling 'Fill'.

RIG000
دوشنبه 29 آبان 1391, 15:31 عصر
Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Database.mdb";
connect.cmd = new OleDbCommand("Select * from Phon", connect.con);
da.selectcommand=connect.cmd;

connect.da.Fill(connect.dt);
connect.bs.DataSource = connect.dt;
dataGridView1.DataSource = connect.bs;

RIG000
دوشنبه 29 آبان 1391, 15:33 عصر
ببین جواب میگیری. این
connect.cmd = new OleDbCommand("Select * from Phon", connect.con);
da.selectcommand=connect.cmd;
رو تغییر دادم.

Fastdesign
دوشنبه 29 آبان 1391, 16:45 عصر
تغییر دادم ولی بازهم خطا میده !

مشکل از چیه !

RIG000
دوشنبه 29 آبان 1391, 17:16 عصر
دوباره همون خطا رو میده؟

Fastdesign
دوشنبه 29 آبان 1391, 17:22 عصر
بله بازهم همون خطا میده!

کلافم کرده ! نمی دونم چکار کنم

RIG000
دوشنبه 29 آبان 1391, 17:45 عصر
کد مجددی که نوشتی رو بذار!
این مشکل به این مربوط میه که چیزی به fILL داده نمشه . مقداری برگردونده نمیشه یه چی تو این مایعات

Fastdesign
دوشنبه 29 آبان 1391, 18:24 عصر
کد فرم اصلی (فرم یک) :
Form1.Dbconnection connect = new Form1.Dbconnection();
//connect.con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb";
connect.cmd = new OleDbCommand("Select * from Phon", connect.con);
//connect.da = new OleDbDataAdapter("Select * from Phon", connect.con);
connect.da.SelectCommand = connect.cmd;
connect.da.Fill(connect.dt);
connect.bs.DataSource = connect.dt;
dataGridView1.DataSource = connect.bs;

کد اضافه کردن رکورد(فرم دوم) :

Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.Open();
string s = "Insert into phon(F_Name,L_Name,phon1)Values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
OleDbCommand addq = new OleDbCommand(s, connect.con);
addq.ExecuteNonQuery();
//DataTable dt = new DataTable();

connect.dt.Clear();
connect.da.Fill(connect.dt);
connect.con.Close();
connect.con.Dispose();

RIG000
دوشنبه 29 آبان 1391, 18:39 عصر
اگه با ویژوال استدیو 2008 یا به پایین کار میکنی و میتونی برنامه رو بذاری بذار تا ببینم مشکلش چیه!! منم یه تستس میکنم ببینیم مشکل کجاست.!

RIG000
دوشنبه 29 آبان 1391, 18:41 عصر
OleDbCommand cmd = new OleDbCommand("Select * from Phon", connect.con);
تو فرم یک خودت اینجوری تغییر بده .ببین چی میشه

RIG000
دوشنبه 29 آبان 1391, 18:44 عصر
یا اینکه اینو اینجوری بنویس به هی چی هم دیگه دس نزن . حتی پست قبلی منم اعمال نکن. هر دو روشم انجام بده ببین جواب چی میگیری.

public class Dbconnection
{
public OleDbConnection con = new OleDbConnection();
public OleDbDataAdapter da = new OleDbDataAdapter();
public DataTable dt = new DataTable();
public BindingSource bs = new BindingSource();
public OleDbCommand cmd ;
}

Fastdesign
دوشنبه 29 آبان 1391, 19:13 عصر
این هم سورس :
95249

mhq1368
دوشنبه 29 آبان 1391, 20:13 عصر
این کد رو جای گذین کنید



Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.Open();
connect.da = new OleDbDataAdapter("select * from phon", connect.con);
string s = "Insert into phon(F_Name,L_Name,phon1)Values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
OleDbCommand addq = new OleDbCommand(s, connect.con);
connect.da.Fill(connect.dt);
addq.ExecuteNonQuery();
//DataTable dt = new DataTable();

connect.dt.Clear();

connect.con.Close();
connect.con.Dispose();
Close();

Fastdesign
دوشنبه 29 آبان 1391, 20:57 عصر
داش برای اینکه به محض اضافه کردن کردن گرید هم رفرش بشه باید dt رو داخل گرید بریزم ؟

mhq1368
دوشنبه 29 آبان 1391, 21:20 عصر
نه
باید شما کد زیر رو جای گزین کنید



Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.Open();
connect.da = new OleDbDataAdapter("select * from phon", connect.con);
string s = "Insert into phon(F_Name,L_Name,phon1)Values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
OleDbCommand addq = new OleDbCommand(s, connect.con);
connect.da.Fill(connect.dt);
addq.ExecuteNonQuery();
connect.da = new OleDbDataAdapter("select * from phon", connect.con);
connect.da.Fill(connect.dt);
connect.da.Update(connect.dt);
//DataTable dt = new DataTable();

connect.dt.Clear();

connect.con.Close();
connect.con.Dispose();
Close();

Fastdesign
دوشنبه 29 آبان 1391, 21:31 عصر
با این کدها اگه کل برنامه رو ببندم دوباره اجراش کنم دیگه اطلاعات جدید تو گرید نمایش داده میشه واگرنه نمایش داده نمیشه

mhq1368
دوشنبه 29 آبان 1391, 21:41 عصر
نه دوست عزیز اگه دقت کرده باشی من کدایی به بالا اضافه کردم

da.update

RIG000
دوشنبه 29 آبان 1391, 22:44 عصر
دوست عزیز مشکل شما تو
connect.dt.Clear();
connect.da.SelectCommand = addq;
connect.da.Fill(connect.dt);
connect.con.Close();
connect.con.Dispose();
به منم نمیگید که مشکل تو اینسرت هست. من کلا" رو لود اطلاعات گیر بودم که مشکلش چیه. شما هم بانک بیرون دارید و اون ویزارد کردین. !!
ویزارد قاط میزنه!!!
یه چی بگم از اول شروع کن 4 تا کد درست بزنه. این گیجت میکنه!!!


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TellBook
{
public partial class Form1 : Form
{

public class Dbconnection
{
public OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=x.mdb");
public OleDbDataAdapter da = new OleDbDataAdapter();
public DataTable dt = new DataTable();
public BindingSource bs = new BindingSource();
public OleDbCommand cmd = new OleDbCommand();
//con.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb";

}


public Form1()
{

InitializeComponent();
}
public void load()
{
Form1.Dbconnection connect = new Form1.Dbconnection();
//connect.con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb";
//connect.cmd = new OleDbCommand("Select * from Phon", connect.con);
connect.da = new OleDbDataAdapter("Select * from Phon", connect.con);
// connect.da.SelectCommand = connect.cmd;
connect.da.Fill(connect.dt);
connect.bs.DataSource = connect.dt;
dataGridView1.DataSource = connect.bs;

dataGridView1.Columns[0].Width = 40;
dataGridView1.Columns[1].Visible = false;
//
dataGridView1.Columns[2].HeaderText = "عنوان";
dataGridView1.Columns[2].Width = 50;
dataGridView1.Columns[3].HeaderText = "نام";
//dataGridView1.Columns[3].Width = 70;
dataGridView1.Columns[4].HeaderText = "نام خانوادگی";
dataGridView1.Columns[4].Width = 90;
//dataGridView1.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnsMode.AllCells;


//dataGridView1.Columns[3].AutoSizeMode = DataGridViewAutoSizeRowsMode.AllCells;
//dataGridView1.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

dataGridView1.Columns[5].HeaderText = "تلفن یک";
dataGridView1.Columns[5].Width = 70;
dataGridView1.Columns[6].HeaderText = "تلفن دو";
dataGridView1.Columns[6].Width = 70;
dataGridView1.Columns[7].HeaderText = "همراه";
dataGridView1.Columns[7].Width = 90;
dataGridView1.Columns[8].HeaderText = "وب سایت";
dataGridView1.Columns[8].Width = 120;
dataGridView1.Columns[9].HeaderText = "ایمیل";
dataGridView1.Columns[9].Width = 120;
dataGridView1.Columns[10].HeaderText = "فاکس";
dataGridView1.Columns[10].Width = 60;
dataGridView1.Columns[11].HeaderText = "حوزه فعالیت";
dataGridView1.Columns[11].Width = 90;
dataGridView1.Columns[12].HeaderText = "آدرس";
dataGridView1.Columns[12].Width = 120;
dataGridView1.Columns[13].HeaderText = "توضیحات";
dataGridView1.Columns[13].Width = 120;

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

load();

}

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{

}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

}

private void Form1_Shown(object sender, EventArgs e)
{
//dataGridView1.DataSource = bs;
/* int i = dataGridView1.RowCount;
for (int j = 0; j < i; j++)
if (j % 2 == 0)
dataGridView1.Rows[j].DefaultCellStyle.BackColor = Color.Cornsilk;
else*/



}

private void button1_Click(object sender, EventArgs e)
{
//bs.Position;
//dataGridView1.Rows[bs.Position].Cells[0].Value = bs.Position + 1;
}

private void toolStripButton7_Click(object sender, EventArgs e)
{

}

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
/*using (SolidBrush b = new SolidBrush(Color.Black))
{
e.Graphics.DrawString((e.RowIndex + 1).ToString(),
e.InheritedRowStyle.Font, b,
(sender as DataGridView).Width - e.RowBounds.Location.X - 15,
e.RowBounds.Location.Y + 4);
}*/
}

private void toolStripButton1_Click(object sender, EventArgs e)
{
//Form1.Dbconnection connect = new Form1.Dbconnection();
//connect.con.Close();

Form2 f2 = new Form2();

f2.Show();
}

private void bindingSource1_CurrentChanged(object sender, EventArgs e)
{

}

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex == dataGridView1.Columns["row"].Index)
{
dataGridView1.Rows[e.RowIndex].Cells["row"].Value = e.RowIndex + 1;
}
}

private void toolStripButton6_Click(object sender, EventArgs e)
{
Application.Exit();
}

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

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






using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TellBook
{
public partial class Form2 : Form
{
//OleDbConnection con = new OleDbConnection();
//OleDbDataAdapter da = new OleDbDataAdapter();
//DataTable dt = new DataTable();
//BindingSource bs = new BindingSource();


public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

private void button1_Click(object sender, EventArgs e)
{
Form1.Dbconnection connect = new Form1.Dbconnection();
connect.con.Open();
string s = "Insert into phon(F_Name,L_Name,phon1)Values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
OleDbCommand addq = new OleDbCommand(s, connect.con);
addq.ExecuteNonQuery();
//DataTable dt = new DataTable();
connect.dt.Clear();
connect.da.SelectCommand = addq;
connect.da.Fill(connect.dt);
connect.con.Close();
connect.con.Dispose();
MessageBox.Show("ok");
Close();

}

private void Form2_Load(object sender, EventArgs e)
{
//con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Database.mdb";
//da = new OleDbDataAdapter("Select * from Phon", con);
//da.Fill(dt);
//bs.DataSource = dt;


}

private void button3_Click(object sender, EventArgs e)
{
//Form1.fc1 l1 = new Form1.fc1();
//this.Text = l1.name;
}
}
}


اسم بانک
کد سلکت کامند تبت اطلاعات
و تابع لود و یه دکمه جدید واسه لود مجدد
اینا تغییرات برنامه شما هست نتم سرعتش کمه نشد برنامه رو بذارم. کد ها رو دقت کن.

Fastdesign
چهارشنبه 01 آذر 1391, 20:56 عصر
آخر من متوجه نشدم مشکل از چیه ؟

چرا وقتی تو فرم دوم یک رکورد رو اضافه کردم تو فرم ائل تو گرید اضافه نمیشه تا اینکه برنامه رو ببندم دوباره اجرا کنم رکورد اضافه شده برام نمایش داده بشه