PDA

View Full Version : کپی رکوردهای یک جدول به جدول مشابه در دیتابیس دیگر



idehrayan
چهارشنبه 23 آبان 1397, 19:35 عصر
سلام
دوستان عزیز با کد زیر می توانید اطلاعات جدول مبدا در دیتابیس مبدا را به جدول مشابه در دیتابیس مقصد کپی کنید
برای تجمیع اطلاعات بدرد میخوره. احتمالا روشهای بهتری هم باشه ولی شاید بدرد بعضی از دوستان بخوره


var i:Integer;begin
qry1.Insert;
for i := 0 to qry2.fieldcount - 1 do
begin
try
qry1.fieldbyname( qry2.fields[i].fieldname ).value := qry2.fields[i].value
except
end;
end;
qry1.Post;

ihpled
یک شنبه 07 بهمن 1397, 11:04 صبح
سلام دوستان من دقیقا به نیت پرسیدن همین سوال اودم و چون این تاپیک رو مشابه به سوالم دیدم همیج جا مطرح میکنم.
این روشی که idehrayan (http://barnamenevis.org/member.php?339948-idehrayan) فرمودند برای من بسیار کند هست من نمیخوام دونه به دونه روی رکورد های جدول مبدا حرکت کنم و جدا جدا اینسرت بزنم چون نزدیک 7000 رکورد باید حداقل روزی یک بار این کار براش انجام بشه که خیلی زمان بره و میخوام روشی باشه که کوئری insert into به یکباره از این کانکشن به اون کانکشن ارسال کنه.

داستان اینه که من یک دیتابیس MySQL لوکال دارم که میخوام تنها چند تا از فیلدهای دو تا از جدولاشو به یک دیتابیس دیگه که روی یک هاست اینترنی هست ارسال کنم

الان با Ado Connection های متفاوت به هر کدوم بصورت مجزا به خوبی کانکت میشم ولی برای نوشتن دستور insert into روی کوئری؛ چون اون کوئری تنها داره به یک AdoConnection اشاره می کنه بلد نیستم بنویسم

کسی روشی داره که بتونم چند فیلد از یک جدولم رو به جدولی در کانکشن دیگه ارسال کنم؟

Mahmood_M
دوشنبه 15 بهمن 1397, 11:11 صبح
یکی از مهمترین دلایل کند بودن روش بالا می تونه این باشه که DataSet شما مثلا به یک DBGrid وصل هستش، در زمان پیمایش دیتاست در کنترلهای متصل به اون هم پیمایش انجام میشه که باعث ترسیمات گرافیکی میشه و در نتیجه سرعت رو شدیدا کاهش میده، پس قبل از هرگونه پیمایش در دیتاست باید اول دستور DisableControls رو اجرا کنید تا ارتباط دیتاست و کنترلها قطع بشه و در انتهای پیمایش هم دستور EnableControls رو اجرا کنید تا دوباره ارتباط برقرار بشه، مثال :


ADOTable.DisableControls;
try
ADOTable.First;
while not ADOTable.EOF do
begin
// Insert Record
// Next
end;
finally
ADOTable.EnableControls;
end;

...

داستان اینه که من یک دیتابیس MySQL لوکال دارم که میخوام تنها چند تا از فیلدهای دو تا از جدولاشو به یک دیتابیس دیگه که روی یک هاست اینترنی هست ارسال کنم
یا باید با دو Connection جداگانه متصل بشید و با همون روش بالا جدول اول رو پیمایش کنید و در جدول دوم ثبت کنید یا روش بهتر اینکه از یک واسطه روی هاست استفاده کنید، مثلا یک وب سرویس ساده PHP که اطلاعات رو با یک فرمت مشخص مثل JSON براش بفرستید و اون به صورت لوکال توی بانک اطلاعاتی هاست ثبت کنه

ihpled
چهارشنبه 17 بهمن 1397, 11:59 صبح
مثل همیشه عالــــی
بسیار آموزنده بود
سپاسسس