PDA

View Full Version : دنبال راه حلی ! ؛ شاید اسمش Virual Table باشد .



Mojgan110
پنج شنبه 16 شهریور 1385, 01:24 صبح
سلام خدمت بخش دلفی:

من در انتخاب یک راه حل ، دارم گیج میزنم ..

ببینید ، یک فایلی دارم روی هارد که از ADOQuery.SaveToFile بدست اومده.

حالا این فایل را با LoadFromFile ، آورده ام مثلا داخل ADODataSet
( پس تا اینجایش ، Disconnected بود )

حالا میخواهم که آنرا ، به یک دیتابیس سرور دیگر ،‌منتقل کنم .
از طرفی هم نمیخواهم که همه اش را بصورت یکجا ، منتقل کنم.
مثلا میخواهم که 10 تا رکورد 10 تا رکورد منتقل بشه .

پس الان مشکلم این هست که اون 10 تا رکوردها را بطور موقتی در کجا قرار بدهم که بتونم بصورت یکجا ( داخل یک تراکنش) اونها را به سرور منتقل کنم ...

من به این فکر میکنم که یک جوری مساله را به UpdateBatches ربط بدهم ... ولی آخه چطوری اون رکودها را و در کجا بریزم ؟ ( میخوام تا قبل از اینکه دستور UpdateBath را بدهم ، همه کارهام بصورت Disconnected باشد.. خب اگر Disconnected باشد ، پس اون جایی که قرارهر رکوردها را داخلش بریزم ، چطوری Schema یه رکوردها را داشته باشه ؟ )

خیلی بد توضیح دادم .. میبخشید ...

Mojgan110
پنج شنبه 16 شهریور 1385, 20:04 عصر
فعلا یک راه حل ابتکاری!! از خودم !
راه درست را You پیشنهاد بدهید :

یه ADOًQuery میذاریم و داخلش دستور * SELECT میدیم ولی داخل شرط WHERE ، یک شرطی قرار میدیم که هیچ وقت درست نباشه ... این باعث میشه که SCHEMA بطور کامل ، لود بشه و درعین حال ، هیچ رکوردی هم داخلش نباشه ، حالا این را هم بصورت فایل ذخیره میکنیم ....

( نکته اش همون بود دیگه !! اینجوری بدون اینکه نیازی به Connect کردن به دیتابیس داشته باشم ، برای همیشه SCHEMA را دراختیار دارم .... )

بقیه اش دیگه حله ::

لودکردن Schema بدون اینکه نیاز باشه هردفعه به دیتابیس وصل بشم :: ( همون فایل بالایی را لود میکنم ! )


ADODataSet1.LoadFromFile('c:\ccc');
حالا مثلا رکوردها را بصورت Disconnected ، داخل In Memory Cache که به لطف AdoDataSet ممکن هست ، اینسرت میکنم : ( این کد مثال هست ، در تکیمل میشه به همون فایلی که پر از دیتا هست وصل بشه و از اونجا اطلاعات را بخونه ،‌ولی بهرحال همه اینها Disconnected است)


ADODataSet1.Append;
ADODataSet1.FieldByName('oo').AsString:=Edit1.Text ;
ADODataSet1.FieldByName('pp').AsString:=Edit2.Text ;
ADODataSet1.Post;
حالا در موقعی که لازم هست ، یک لحظه کانکشن به دیتابیس را وصل میکنم و همه رکوردها را بصورت یکجا ، منتقل میکنم و بعدش دوباره کانشکن را میبندم : ( تراکنش و اینا هم بعدن میشه بهش اضافه کرد دیگه ! )


ADOConnection1.Connected:= True;
ADODataSet1.Connection:= ADOConnection1;
ADODataSet1.UpdateBatch(arAll); ADOConnection1.Close