PDA

View Full Version : سوال: ذخیره اطلاعات یک جدول در جدول دیگر



h.moghany
شنبه 24 بهمن 1388, 12:19 عصر
سلام دوستان، من اطلاعات یک Table را در یک datagridview نشان می دهم و بعد می خوام اطلاعات رو از datagridview در یک Table ذخیره کنم. اما در تعریف سطر جدید سیستم پیغام خطا می ده چون مقدار اولیه فیلدها رو null در نظر می گیره. حالا چه کار کنم؟

msdsbi
شنبه 24 بهمن 1388, 12:39 عصر
سلام دوست عزیز می تونی از این روش استفاده کنی که فقط با یک دستور SQL
اگه می خوای تیبل جدید اضافه بشه این دستور
SELECT INTO newtable
FROM oldtable

اگه تیبلی که می خوای اطلاعات تیبل که داری بریزی داخلش قبلاً خودت ساختی این دستور
Insert into otherTable select * From oldtable

در دستورات بالا oldtable منظور همون تیبلی که قبلاً لودش کردی و اطلاعاتت توشه
otherTable هم تیبلی که می خوای اطلاعات رو بریزی داخلش
newTable هم تیبلی که می خوای جدید بسازی

slashslash2009
شنبه 24 بهمن 1388, 12:57 عصر
میتونی table جدید رو مساوی با تیبل قبلی کنید tbnew=tb1

asefy2008
شنبه 24 بهمن 1388, 13:10 عصر
این کار به کل اشتباه است.(تا اونجایی که من متوجه شدم)
دلایلش رو می گم اگر اشتباه بود دوستان اصلاح کنند :
1.افزونگی در دیتابیس بوجود میاد یعنی داری اطلاعات اضافه ذخیره می کنی(لازم نیست اطلاعات رو چند جا ذخیره کنی بجز موارد خاص) .
2.بنظر میاد شما دیتابیس رو درست طراحی نکردی.
3.فکر کنم شما فرآیند کاری رو براش دیتابیس طراحی کردی.
.
.
.

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

slashslash2009
شنبه 24 بهمن 1388, 13:21 عصر
کدوم کار ؟ در کل هیچ چیز اشتباه نیست در موارد خاص میشه استفاده کرد مخصوصا اگر تیبلمون رکوردهای کمی داشته باشه

ایمان مدائنی
شنبه 24 بهمن 1388, 13:25 عصر
عزیز من یک راه بلدم در sql
همون کوئری که برای DataGridView استفاده می کنی رو به sql ربط بده
یعنی دستور زیر رو در sql اجرا کن یک جدول میسازه و تمام مقادیر کوئری رو داخل اون میریزه !

Select * into City2 From City
City 2 نام جدول جدید است
city نام جدولی است که کوئری روش اجرا میشه
البته جدولی که میسازه با مشخصات مقادیرت همخونی داره
موفق باشی

h.moghany
شنبه 24 بهمن 1388, 16:20 عصر
ضمن تشکر از همه دوستان لازم می دانم چند نکته را ذکر کنم :
1- من مجبور به ذخیره اطلاعات در دو تیبل هستم و گرنه این کار را نمی کردم.
2- راهکارهای ارائه شده تقریباً همگی مفید هستند فقط من یه سوال دیگه هم دارم و اون اینه که اگه بخوام تمام مقادیر دیتاگریدویو را به صورت یکباره در تیبل ذخیره کنم چه کاری باید بکنم؟
با تشکر از همکاری تک تک شما دوستان

h.moghany
شنبه 24 بهمن 1388, 16:22 عصر
ضمنا مطلب دیگری که هست اینه که من نمی خوام تمام اطلاعات تیبل اول را منتقل کنم و تنها بخشی از اون را که در دیتاگریدویو نشان دادم جهت انتقال به تیبل دوم نیاز دارم.

r00tkit
شنبه 24 بهمن 1388, 16:34 عصر
DataTable table = new DataTable();
table=DataGridView1.DataSource;



احتمالا یه cast هم می خواد

asefy2008
شنبه 24 بهمن 1388, 20:31 عصر
کدوم کار ؟ در کل هیچ چیز اشتباه نیست در موارد خاص میشه استفاده کرد مخصوصا اگر تیبلمون رکوردهای کمی داشته باشه
این که بخوان اطلاعات یک جدول حتی بخشی رو دوباره در یک جدول دیگر ذخیره کنند،به نظر شما اشتباه نیست.
دوست عزیز من هم اشاره کردم به جز در موارد خاص.

slashslash2009
شنبه 24 بهمن 1388, 21:11 عصر
اگر واقعا واجب نباشه خوب اشتباهه .وقتی مجبور باشید یک سری اطلاعاتو در جدول تغییر بدید و جدول اولی رو هم لازم داشته باشید اصلا دیتا تیبل واسه همین ساخته شده وخیلی کارای دیگه

h.moghany
یک شنبه 25 بهمن 1388, 09:14 صبح
دوست عزیز geek1982 راه حل آخر هم کمکی نکرد. ببینید در واقع من به دنبال انتقال تمام اطلاعات یک دیتاگریدویو به یک تیبل هستم منتهی همانطور که قبلا هم گفتم هنگام تعریف سطر جدید برای تیبل سیستم پیغام خطا می دهد چون نباید داده ها null باشند. حالا چگونه کارم را انجام دهم؟

ozzy_mra
یک شنبه 25 بهمن 1388, 10:39 صبح
سلام منم این مشکل رو دارم مثلا اطلاعات رو از اکسل خوندم و تو دیتا گرید نمایش دادم و حالا می خوام تو بانکم کل اطلاعات گرید رو کپی کنم راهی واسه ریختن کل دیتا ست به دیتا بیس هست ؟

slashslash2009
یک شنبه 25 بهمن 1388, 11:50 صبح
باید واسه تیبلتون هم سطر وستون درست کنید به این صورت
قبل از فرم لودتون اینا رو بنویسید :

static DataTable table2 = new DataTable();
DataColumn column;
DataRow row;در فرم لودتون این کد بزارید :

column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "PIC";
table2.Columns.Add(column);
//
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "ID";
table2.Columns.Add(column);
//
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "NAME";
table2.Columns.Add(column);
//
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "VALUE";
table2.Columns.Add(column); در کد بالا من چندتا فیلد یا همون ستون برای جدولم تعریف کردم یا ساختم
و در کد زیر هم سطرها رو اضافه میکنم و بهشون مقدار میدم با یک حلقه for به اندیس حلقه که i هست دقت کنید و در آخر واسه اینکه ببینم جدولم(table2) پر شده یا نه اونو در یک گریدویو دیگه نشون دادم این کدو میتونید در یک باتون بزارید

for (int i = 0; i < dataGridViewX1.Rows.Count; i++)
{
row = table2.NewRow();
row["PIC"] = dataGridViewX1.Rows[i].Cells[0].Value.ToString();
row["ID"] = dataGridViewX1.Rows[i].Cells[1].Value.ToString();
row["NAME"] = dataGridViewX1.Rows[i].Cells[2].Value.ToString();
row["VALUE"] = dataGridViewX1.Rows[i].Cells[3].Value.ToString();
table2.Rows.Add(row);
}
dataGridViewX2.Visible = true;
dataGridViewX2.DataSource = table2;
موفق باشید

slashslash2009
یک شنبه 25 بهمن 1388, 19:47 عصر
کارتون راه افتاد مشکلی داشتید میتونید بپرسید . کد پست قبل رو هر جوری دوست دارید تنظیم کنید میشه همشو در یک متد نوشت

h.moghany
جمعه 30 بهمن 1388, 19:12 عصر
سلام به همه دوستان، از تاخیر چند روزه واقعا عذر می خوام
و اما در مورد موضوع مورد بحثمون متاسفانه علی رغم لطف تمام دوستان مشکل من همچنان به قوت خود باقیست.
کدی که من نوشتم مشابه این کد است :


j = ds.Table.Rows.Count;
for (i = 0; i <= dgv.Rows.Count-2; i++)
{
ds.Table.Rows.Add();//کد مشکل دار
for (column = 0; column <= 10; C++‎)
{
ds.Table.Rows[j][column] = dgvSanad[column, i].Value.ToString();
}
j++;
}

حالا زمانی که برنامه رو اجرا می کنم برای خطی که مشخص کردم پیغام می ده که ستون ها نمی تونن null باشن. این تنها مشکل منه که نمی دونم باهاش چه کار کنم. ممنون می شم راهنماییم کنید.

slashslash2009
جمعه 30 بهمن 1388, 20:28 عصر
این کدی که شما نوشتین هیچ ربطی به کد من نداشت باید واسه تیبلتون سطرو ستون تعریف کنید در پست قبلم یعنی شماره 14کامل براتون توضیح دادم در ضمن میتونید مستقیم هم از خود گریدویو به جدول درون دیتابیستون اطلاعاتو درج کنید

h.moghany
شنبه 01 اسفند 1388, 17:19 عصر
عزیز من کد شما رو هم امتحان کردم اما اون هم خطا می ده

table2.Rows.Add(row);

تو این خط پیغام خطا میده واسه همین رفتم سراغ اون کد چون توی برنامه دیگه ای جوب می ده اما اینجا که من نمی خوام هیچ سلولی null نباشه خطا می ده

slashslash2009
شنبه 01 اسفند 1388, 17:31 عصر
واسه من که خطا نمیداد حتما اشتباه نوشتیش وقتی برنامت خطا میده یعنی اینکه کدتو اشتب نوشتی

h.moghany
شنبه 01 اسفند 1388, 17:32 عصر
اصلا شاید بهتر باشه این برنامه رو نگاه کنین تا متوجه بشین من چی می گم
در این برنامه دستوراتی رو که نوشتم درست کار می کنن اما در برنامه خودم اینطور نیست

slashslash2009
شنبه 01 اسفند 1388, 18:38 عصر
از اول میگفتی داری با اکسس کار میکنی
والا خوب باید خودت خطاشو پیدا کنی شاید اون دیتا ستی که تعریف کردی در یک متد دیگه داری همزمان استفاده میکنیش یا شایدم یه چیزه دیگتم همینطوری باشه بعدم اصلا سوالتو واضح نگفتی از اول تو میخوای چندتا ردیفو با هم update کنی . وقتی هم میخوای که گریدویوتونو با تکست باکس پر کنی یعنی با زدن یک کلید چندتا سطرو بهش اضافه کنی enable adding,enable editing , enable deleting مربوط به دیتاگریدتونرو false کن خیلی بهتر میشه بعدم واسه اضافه کردن در گرید ویوتون از این کد استفاده کن بهترو راحت تره :

for (int i = 0; i <= 3; i++)
dataGridView1.Rows.Add(textBox1.Text,textBox1.Text ,textBox1.Text,textBox1.Text);البته خودت یک حلقه for درست کردی که در یک جا 4 تا ردیف درست میکنه من دستش نزدم اگر نباشه هر دفعه یک سطر درست میکنه . واسه نمایش تیبلتم که نمیدونم چرا اینقدر کارو واسه خودت سخت کردی از for استفاده کردی :متفکر:واسه پر کردنش ازین استفاده کن

OleDbCommand cmd = new OleDbCommand("Select * from tb1", con);
OleDbDataAdapter da1 = new OleDbDataAdapter(cmd);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
dataGridView1.DataSource = dt1;

h.moghany
یک شنبه 02 اسفند 1388, 18:52 عصر
سلام قبل تز هر چیز از همکاری بی شائبه شما بی نهایت ممنونم
راستش بانکم sql نه اکسس اون کد رو برای مثال آوردم دیگه گیج شدم هر کاری می کنم نمی شه
شاید مجبور شم کل برنامه رو تغییر بدم:افسرده: