PDA

View Full Version : سوال: درج داده یکسان در رکوردهای یک جدول



momimomi
چهارشنبه 02 دی 1394, 16:22 عصر
باسلام
برای ایجاد تاریخ کلاسی برای حضور و غیاب کد همه را از جدول پرسنل در جدول کلاس درج میکنم، تا اینجا مشکلی نیست، اما برای درج تاریخ یکسان برای همه افراد چه تغییری باید در کد زیر بدهم؟

OleDbConnection con = new OleDbConnection(@"provider = microsoft.jet.oledb.4.0;" +
@"data source =a.mdb");

string q = "INSERT INTO class_personel(code) Select Personel.code FROM personel";
OleDbCommand cmd = new OleDbCommand(q, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("sabt","sabt");

تصویر :
137621

momimomi
چهارشنبه 02 دی 1394, 18:14 عصر
کدها رو به صورت زیر تغییر دادم اما پیغام خطا می دهد:

OleDbConnection con = new OleDbConnection(@"provider = microsoft.jet.oledb.4.0;" +
@"data source =a.mdb");

string q = "INSERT INTO class_personel(code, taclass) Select Personel.code FROM personel,'"+ txtTaNewClass.Text +"'";
OleDbCommand cmd = new OleDbCommand(q, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("sabt","sabt");


137623
به بیان دیگر:
بنده میخواهم تمام داده های یک ستون یک جدول و یک داده ثابت در دو ستون جدول دیگر به ترتیب درج شود، لطفا راهنمایی نمایید، خیلی واجب است
با تشکر

davidrobert
چهارشنبه 02 دی 1394, 21:36 عصر
تو اکسس نوع فیلد تاریخ شمسی رو چی قرار دادید باید نوع تاریخ شمسی از نوع text باشه چون از ADO استفاده میکنید زیاد سخت گیزی نمیکنه تو ارسال دستور مشکلی نیست ولی تو موقع ذخیره اگه دستور ذخیره اشتباه باشه خطا میگیره من برای ذخیره از 2 نوع کد نویسی متفاوت ازستفاده میکنم اول از این دستور برای دیتا آدپتر هستش استفاده میکنم.
dbm.con.Open();
dbm.Connect();
dbm.cmd = new SqlCommand("INSERT INTO Tbl_AddKala (Code_Kala, Name_Kala, Discrption_Kala, AddDate_Kala, AddTime_kala) VALUES (@Code_Kala,@Name_Kala,@Discrption_Kala,@AddDate_K ala,@AddTime_kala)");
dbm.cmd.Parameters.Add("@Code_Kala", LblCodeKala.Text);
dbm.cmd.Parameters.Add("@Name_Kala", TxtNameKala.Text);
dbm.cmd.Parameters.Add("@Discrption_Kala", TxtDiscrption.Text);
dbm.cmd.Parameters.Add("@AddDate_Kala", LblDate.Text);
dbm.cmd.Parameters.Add("@AddTime_kala", LblTime.Text);
dbm.cmd.CommandTimeout = 600;
dbm.cmd.Connection = dbm.con;
dbm.cmd.CommandType = CommandType.Text;
try
{
if (dbm.cmd.ExecuteNonQuery() > 0)
{
TxtNameKala.Text = "";
TxtDiscrption.Text = "";
}
dbm.Disconnect();
}
catch (SqlException ex)
{

if (ex.Number == 2627)
{
PersianMessageBox.Show("کد کالا تکراری می باشد");
}
}
finally
{
if (dbm.con !=null)
{
dbm.con.Close();
FrmAddListService_Load(null,null);
TxtNameKala.Focus();
}
}
}
catch (Exception exe)
{
if (!ShowFriendMessage)
PersianMessageBox.Show(exe.Message);
else
PersianMessageBox.Show("خطا در اجرا دستورات / خطا 119", "خطا", PersianMessageBox.Buttons.OK, PersianMessageBox.Icon.Error);
}
این سریع جدید ترین نحوه ذخیره کردن اطلاعاتم هستش .استفاده میکنم
SqlConnection conn = new SqlConnection(isconnect.constring);
//try
//{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("select * from tbl_user", conn);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds, "tbl_user");
DataTable dt = ds.Tables["tbl_user"];

DataRow newRow = dt.NewRow();
//newRow["ID"] = 2;
newRow["f_name"] =textBox1.Text;
newRow["l_name"] = textBox2.Text;
dt.Rows.Add(newRow);



da.Update(ds, "tbl_user");
اما دستور شما قابل بهم نیست برای سیستم فکر کنم.
string q = "INSERT INTO class_personel(code, taclass) Select Personel.code FROM personel,'"+ txtTaNewClass.Text +"'";
این کد شما از 2 نوع دستور جدا گانه تشکیل شما اولین دستور گفته بیاد این 2 تا رو ذخیره کنه code, taclass که درست هستش ولی این دستور اشتباه هستش Select Personel.code FROM personel, چون امدید گفتید بعد انتخاب کن اصلا مفهوم نمیده. اگه بخواهید بگید باید این طوری بگید.
"INSERT INTO class_personel(code, taclass)VALUE (@code, @taclass)

یا به این صورت بگید
"INSERT INTO class_personel(code, taclass)VALUE (N'"+txtcode.text+"', N'"+taclass.text+"')
به این صورت وارد کنید درست هستش برای ذخیره
بحث آخرتون میخواهید یک تاریخ تو 2 تا فیلد ذخیره کنید باید این کار رو انجام بدید
"INSERT INTO class_personel(code, taclass)VALUE (N'"+TxtDate.text+"', N'"+TxtDate.text+"')

momimomi
چهارشنبه 02 دی 1394, 21:48 عصر
اما دستور شما قابل بهم نیست برای سیستم فکر کنم.
string q = "INSERT INTO class_personel(code, taclass) Select Personel.code FROM personel,'"+ txtTaNewClass.Text +"'";
این کد شما از 2 نوع دستور جدا گانه تشکیل شما اولین دستور گفته بیاد این 2 تا رو ذخیره کنه code, taclass که درست هستش ولی این دستور اشتباه هستش Select Personel.code FROM personel, چون امدید گفتید بعد انتخاب کن اصلا مفهوم نمیده. اگه بخواهید بگید باید این طوری بگید.
"INSERT INTO class_personel(code, taclass)VALUE (@code, @taclass)

یا به این صورت بگید
"INSERT INTO class_personel(code, taclass)VALUE (N'"+txtcode.text+"', N'"+taclass.text+"')
به این صورت وارد کنید درست هستش برای ذخیره

با سلام و تشکر به خاطر پاسختون
اما من میخوام کد 300 پرسنل را از جدول پرسنل بخواند و در جدول کلاس درج کند و در فیلد تاریخ کلاس برای هر کدی که درج کرده یک تاریخ یکسان را درج کند یعنی در جدول کلاس 2 ستون درج شود اولی کد و دیگری تاریخ اما به تعداد 300 رکورد (تعداد کل رکوردهای جدول مقصد).
کد های پست اول که شامل دستور سلکت هست به خوبی جواب می دهد.
در پست اول تمام 300 کد پرسنلی از جدول پرسنل انتخاب شده و در جدول کلاس درج می شود.

davidrobert
چهارشنبه 02 دی 1394, 21:59 عصر
شما میدونید باید چیکار انجام بدید
اول باید تمام اطلاعات پرسنل نمایش بدید در دیتاگرید ویو
حالا که نمایش دادید 2 تا مسئله پیش میاد میخواهید آیا در همون جداول باز تاریخ رو ویرایش کنید نه میخواهید در جدوال دیگه اطلاعات رو به همراه تاریخ ذخیره کنید در هر 2 صورت به یک نحوه یک تاریخ رو میتونید به همه بدید به صورت مخفی
دیتاگرید ویو که زدید اطلاعات پرسنل نمایش بده ستون دیتاگرید ویو مربوط به تاریخ رو مخفی کنید. و در یک کادر متن بیاد تاریخ رو بدید وقتی تاریخ رو دادید به صورت اتوماتیک در ستون مخفی میاد تاریخ داده میشه ویرایش بزدید کل اطلاعات دیتاگرید ویو در ستون خالی تاریخ تاریخ پرسنل داده میشه یا نه در جدوال دیگه به صورت کلی یک دفعه اطلاعات رو ذخیره میکنید. به همین ساده گی به وسیله حلقه for

momimomi
چهارشنبه 02 دی 1394, 21:59 عصر
با زدن دکمه ثبت برای هر رکورد در جدول کلاس، 2 فیلد ثبت بشه
فیلد اول= کد پرسنلی از جدول پرسنل
فیلد دوم = تاریخ کلاس از txtTaClass.text
به تعداد تمام رکوردهای جدول اولی

momimomi
چهارشنبه 02 دی 1394, 22:06 عصر
لطفا بفرمایید:
اگر بخواهید متن یک تکست باکس را به تعداد تمام رکوردهای یک جدول درج کنید از چه کدی استفاده می کنید؟

Mahmoud Zaad
چهارشنبه 02 دی 1394, 22:23 عصر
سلام
شما می تونید در سلکت هر چندتا عدد یا عبارت ثابت که بخواید وارد کنید حتی اگه ستونی به اون نام تو جدول نداشته باشید مثلاً Select 1, column1 from table در اینجا در همه ردیفهای جدول اصلی عدد 1 هم در یک ستون فرضی درج میشه (برای رشته همونطور که می دونید باید از '' استفاده بشه) خب بر این اساس شما می تونید کوئری تون رو به شکل زیر تغییر بدید:

"INSERT INTO class_personel(code, taclass) Select Personel.code, '" + txtTaNewClass.Text + "' FROM personel"

**************ویرایش

البته بهتره از پارامتر استفاده کنید:

"INSERT INTO class_personel(code, taclass) Select Personel.code, @p1 FROM personel"

و بعد از ساخت نمونه کامند:
cmd.Parameters.AddWithValue("@p1", txtTaNewClass.Text);

momimomi
پنج شنبه 03 دی 1394, 06:24 صبح
سلام
شما می تونید در سلکت هر چندتا عدد یا عبارت ثابت که بخواید وارد کنید حتی اگه ستونی به اون نام تو جدول نداشته باشید مثلاً Select 1, column1 from table در اینجا در همه ردیفهای جدول اصلی عدد 1 هم در یک ستون فرضی درج میشه (برای رشته همونطور که می دونید باید از '' استفاده بشه) خب بر این اساس شما می تونید کوئری تون رو به شکل زیر تغییر بدید:

"INSERT INTO class_personel(code, taclass) Select Personel.code, '" + txtTaNewClass.Text + "' FROM personel"

**************ویرایش

البته بهتره از پارامتر استفاده کنید:

"INSERT INTO class_personel(code, taclass) Select Personel.code, @p1 FROM personel"

و بعد از ساخت نمونه کامند:
cmd.Parameters.AddWithValue("@p1", txtTaNewClass.Text);

ممنون دوست عزیز
عالی بود:تشویق::تشویق::تشویق::تشو ق::تشویق:
لطف کردی:لبخند: