PDA

View Full Version : SQL, DELPHI(ساختن فایل پشتیبان از بانک و بازیابی آن)؟



arshia_
شنبه 22 اسفند 1383, 09:10 صبح
سلام
من می خوام توی برنامه هام که از ADO برای اتصال استفاده می کنه کاری کنم که کاربر بتونه با انتخاب یه گزینه توی مسیر دلخواهی که می خواد یه فایل پشتیبان از بانک تهیه کنه و در صورت تمایل هر وقت خواست بتونه این فایل رو بازیابی کنه ...
چطور می شه کاری کرد که این روش بدون پیچیدگی خاصی برای کاربر انجام شدنی باشه..
اگر ممکنه دستور کامل اس کیو ال اونو هم برای تهیه پشتیبان از بانک هم برای بازیابی ذکر کنید...(قبلا به این موضوع پرداخته شده اما من می خوام روش کاملی بیان بشه چون بیشتر نکات خاص گفته شده تا کل موضوع...)
ممنون از همه دوستان :flower: :تشویق:

hr110
شنبه 22 اسفند 1383, 09:54 صبح
سلام؛
دوست عزیز یک روش بسیار ساده که معمولاً من از آن استفاده میکنم. به این مثال بسیار ساده توجه کنید:

ADOQuery1.Open;
AssignFile(F,'d:\1.txt');
ReWrite(F);
while not ADOQuery1.EOF do
begin
for I:=0 to ADOQuery1.FieldCount-1 do
begin
S:=ADOQuery1.Fields[I].asstring;
S1:=InttoStr(Length(S));
while Length(S1)<5 do S1:=' '+S1;
Write(F,S1);
Write(F,S);
end;
ADOQuery1.Next;
end;
CloseFile(F);
ADOQuery1.Close;


در این مثال رکورد به رکورد و فیلد به فیلد اطلاعات درون فایل نوشته میشود و برای انکه فضای کمتری نیز صرف شود ابتدا طول اطلاعات نوشته شده و سپس مقدار ان نوشته میشود.
1- در این مثال فیلدهایی که طول آن انها زیاد میباشد ممکن است مشکل ساز شوند بنابراین بهتر است از TFileStream استفاده کنید.
2- برای جداولی که به شکل master/detail میباشند ابتدا detail را پشتیبان گرفته و سپس master را انجام دهید.
3- برای انکه بتوانید چندین جدول را در یک فایل ذخیره کنید بهتر است که ابتدا یک header با طول ثابت در نظر گرفته و مشخصات جدول را در آن قرار دهید تا در هنگام برگرداندن متوجه باشید که قرار است اطلاعات به کدامیک از جداول باید برگردانده شوند.
4- فضایی که برای طول اطلاعات در نظر گرفته شده است در این مثال 5 کاراکتر میباشد که براساس نیاز میتوانید انرا کم یا زیاد کنید.
5- از روشهای فشرده سازی و رمزنگاری برای کاهش حجم و افزایش امنیت استفاده کنید.

فکر کنم برای شروع مثال خوبی باشد، اگر مایلید انرا تکمیل کرده و در همین تاپیک قرار دهید تا نقاط ضعف و قوت انرا بررسی کنیم

mkalone
شنبه 22 اسفند 1383, 10:23 صبح
در SQL Server چنین امکانی رو تعبیه کرده اند
بذار بگردم پیداش کنم
بانکت SQL Server است دیگه ؟

mkalone
شنبه 22 اسفند 1383, 10:35 صبح
ببین با این می تونی ور بری تغییرش بدی نشد بگو تا یک فکری بکنیم

<span dir=ltr>The IN clause can be used to copy tables into another database:

SELECT Persons.* INTO Persons IN 'Backup.mdb'
FROM Persons </span>

mkalone
شنبه 22 اسفند 1383, 10:40 صبح
پیداش کردم
برو حال کن

http://www.idevcenter.com/articles/view.aspx?id=14

این سایت قرار بود جون بگیره اما ....

hr110
شنبه 22 اسفند 1383, 12:26 عصر
دوست عزیز اگر شما بخواهید تنها از یک جدول و آنهم برخی از رکوردها پشتیبان بگیرد ، چطور؟ بازهم این دستور شما میتوانست به شما کمک کند.
اگر بانک اطلاعاتی شما اکسس بود آنوقت چطور؟

mkalone
شنبه 22 اسفند 1383, 14:59 عصر
عزیز جان برای بانک اکسس از این استفاده کن مخصوص اکسس است


SELECT Persons.* INTO Persons IN 'Backup.mdb'
FROM Persons

arshia_
شنبه 22 اسفند 1383, 15:51 عصر
ممنون از جوابها
اما من می خوام دقیقا اونجایی که کاربر می خواد یه فایل backup ساخته بشه و بعد هم امکان بازیابی رو داشته باشه
بانک من اس کیو ال است و تعداد جداول و مقادیر اون بیش از چیزی است که با حالت txt ذخیره کنم
باید خود اس کیو ال این کارو انجام بدهد.... اونم نه با wizrad :oops: بلکه با کد نویسی و استفاده از دستورات
چون کاربر که نباید برای گرفتن پشتیبان از بانک بره اس کیو ال یاد بگیره
اون فقط یه کاربر ه معمولی است و وظیفه ماست که کار اونو راحت کنیم....

arshia_
شنبه 22 اسفند 1383, 15:59 عصر
عزیز :flower: ممنون از لطف شما mkalone
دقیقا منظور من همچین دستوری است...
واقعا گل کاشتی .و..اون سایت رو هم رفتم خیلی سایت زیبا و جالبی بود



Declare @path varchar&#40;200&#41;

Set @path='C&#58;\Backup\BK_' + Replace&#40;Cast&#40;GetDate&#40;&#41; As char&#41;, '&#58;', '-'&#41; + '.BAK'

BACKUP DATABASE &#91;MyDatabaseName&#93; TO DISK = @path WITH NOINIT,
NOUNLOAD, NAME = N'My Backup', NOSKIP, STATS = 10, NOFORMAT



:تشویق:

mkalone
شنبه 22 اسفند 1383, 16:54 عصر
قابل نداره ما همه جوره هستیم