PDA

View Full Version : انتقال کل اطلاعات یک جدول به جدول مشابه دیگر



hamid-nic
جمعه 06 شهریور 1388, 15:02 عصر
سلام دوستان با آرزوی قبولی طاعات و عبادت هایتان در ماه مبارک رمضان
برای انتقال کل اطلاعات یک جدول به یک جدول اصلی که عیناً شکل همونه جدول اوله باید چیکار کرد ؟
بانک sql server 2000 و محیط دلفی 7
توضیح اینکه جدول اصلی حاوی یک سری اطلاعات دوره ای است یعنی موقعی که دوره ی مربوطه تموم میشه کل اطلاعات جدول به جدول اصلی انتقال پیدا می کنه یعنی به اطلاعات جدول اصلی اضافه میشه .
از این دستور هم استفاده کردم اما جواب نگرفتم



Insert Into Tbl1
Select * From Tbl2


از این هم همین طور جواب نگرفتم



Insert Into Table1(Field1,Field2,...)
Select Field1, Field2, ...
From Table2



خطایی که میده :



ADOQuery1: CommandText does not return a result set.


نکته
1- اینکه دو جدول عینا شبیه به هم هستند .
2- باید اطلاعات به اون جدول اصلی اضافه بشه یعنی هر دوره اطلاعات جدول اصلی زیاد میشه .
3 - جدول اول که قرار به جدول اصلی اضافه بشه هر دوره شامل 800 تا 900 رکورد و تقریبا 20 تا فیلد است .
لطفا کمک کنید . . .

Hsimple11
جمعه 06 شهریور 1388, 15:44 عصر
مشکل از کوئریتون نیست. چجوری جدواولتون رو طراحی کردید. این خطا یعنی کوئری شما هیچ رکوردی رو برنگردونده. یعنی Tbl2 تون خالیه. این هم انواع روشهای کپی جدول به جدول دیگه :

Transferring Data from One Table to Another (http://www.databasejournal.com/features/mssql/article.php/3507171/Transferring-Data-from-One-Table-to-Another.htm)

hamid-nic
جمعه 06 شهریور 1388, 23:25 عصر
مشکل از کوئریتون نیست. چجوری جدواولتون رو طراحی کردید. این خطا یعنی کوئری شما هیچ رکوردی رو برنگردونده. یعنی Tbl2 تون خالیه. این هم انواع روشهای کپی جدول به جدول دیگه :

Transferring Data from One Table to Another (http://www.databasejournal.com/features/mssql/article.php/3507171/Transferring-Data-from-One-Table-to-Another.htm)

از لینکی که گذاشتید خیلی ممنونم با دلفی انجام می دهم نتیجه را در تاپیک می گذارم .
یک سوال دیگه اینکه حجم بالای رکورد و فیلد زیاد در کپی کردن اطلاعات جدول تاثیری ندارد ؟

matinebi
شنبه 07 شهریور 1388, 11:04 صبح
یک ADOCommand قرار بده

// انتقال تمامی محتویات یک جدول به دیگری˜
with DataModule5.ADOCommand1 do
begin
CommandText:='Insert Into tbl1 Select * From tbl2';
Execute;
end;

hamid-nic
شنبه 07 شهریور 1388, 15:39 عصر
یک ADOCommand قرار بده

// انتقال تمامی محتویات یک جدول به دیگری˜
with DataModule5.ADOCommand1 do
begin
CommandText:='Insert Into tbl1 Select * From tbl2';
Execute;
end;


با تشکر از شما دوست گرامی مشکل با این کد شما حل شد یعنی دیگه اون خطا را نمی ده و اطلاعات را به جدول اصلی کپی می کنه اما یه مشکل دیگه بوحود اومد اینکه :
موقع ویرایش یا حذف رکورد های جدول اصلی که اطلاعات را به اون اضافه کردیم خطای زیر را می دهد :



Key column information is insufficient or incorrect. Too many rows were affected by update.


هم در خود دلفی و هم در Enterprise Manager این خطا را میده
جالب اینکه همین خطا را وقتی ویرایش و حذف رکورد را در جدول دوره ای که به جدول اصلی اضافه می شود انجام می دهیم ، نشان می دهد !!!!!!!!!
در صورتی که قبلا این جدول هم ویرایش می شد و هم قابلیت حذف رکورد داشت ؟ چرا ؟ مشکل کجاست ؟؟

matinebi
شنبه 07 شهریور 1388, 15:44 عصر
برای من هم این مشکل پیش اومده بهترین کار اینه که یک بار کل بانکت رو پاک کنی دوباره ثبت کن البته راهی که من انجام دادم و نتیجه گرفتم شاید راه مناست تری هم باشه (البته این مشکل زمانی پیش میاد که داریم بانک رو طراحی میکنیم و خیلی تغییرات به بانک میدیم)
برای پاک کردن هم در run بنویسید isqlw در این قسمت میتونی اطلاعات بانکت رو پاک کنی


select * from tb1
delete tb1

hamid-nic
شنبه 07 شهریور 1388, 16:08 عصر
برای من هم این مشکل پیش اومده بهترین کار اینه که یک بار کل بانکت رو پاک کنی دوباره ثبت کن البته راهی که من انجام دادم و نتیجه گرفتم شاید راه مناست تری هم باشه (البته این مشکل زمانی پیش میاد که داریم بانک رو طراحی میکنیم و خیلی تغییرات به بانک میدیم)
برای پاک کردن هم در run بنویسید isqlw در این قسمت میتونی اطلاعات بانکت رو پاک کنی


select * from tb1
delete tb1

من این کار را کردم محتوی کل جدول اصلی را از همین طریق که گفتید پاک کردم اما پس از اضافه کردن با کد قبلی باز هم همان مشکل را دارد نه تنها این بانک بلکه بانک سورس هم همین مشکل ویرایش و حذف را دارد البته پس از حذف اطلاعات با این دستور جدید هم همین مشکل را دارد .
چه کار کنم ؟!!!!!!

hamid-nic
شنبه 07 شهریور 1388, 16:35 عصر
دوستان من متوجه شدم به دلیل نداشتن primary key بوده اما من مجبورم در جدول اصلی از primary key استفاده نکنم چون هر دوره ممکنه اطلاعات افراد یکی باشه اما در تاپیکی دیدم که آقای کشاورز گفته بود میشه از یه فیلد با خاصیت auto number استفاده کرد اما معادل auto number تو Enterprise Manager چیه ؟ یعنی کدوم یکی از data Type ها کار auto number را انجام می دهد ؟؟؟؟؟؟؟

hamid-nic
شنبه 07 شهریور 1388, 16:46 عصر
دوستان چه راه حلی پیشنهاد می کنید ؟؟؟؟؟؟؟؟
به چه شکل primary key بسازم ؟ البته از نوع auto number ؟ یعنی بشه در فیلد های دیگه اطلاعات تکراری وارد کرد ؟

hamid-nic
شنبه 07 شهریور 1388, 17:43 عصر
آقا مشکل حل شد
برای دوستای دیگه که این چنین مشکلی دارن :
برای ایجاد AutoNumber تو SQLServer باید نوع فیلد را از یکی از انواع int انتخاب کنی وبعد Identity رو Yes بزنی و بسته به این که بخای از چند شروع شه Identity seed رو ست کنی و Identity increment هم step زیاد شدن رو مشخص می کنه.
فکر نکنم مشکل ویرایش و حذف را داشته باشه
اگر کسی نظری داره بگه .
ممنون