PDA

View Full Version : آموزش طریقه گرفتن backup از پایگاه داده SQL Server در یک برنامه دلفی ساده!



oghab
سه شنبه 01 آذر 1384, 09:25 صبح
سلام

(براي ديدن نسخه جديد گرفتن بك آپ به صفحه دوم برويد و يا لينك زير را ببنيد:
http://barnamenevis.org/forum/showthread.php?p=623765#post623765
و براي ساخت database و restore اين لينك را:
http://barnamenevis.org/forum/showthread.php?t=32723
به زودي نسخه اصلاح شده restore نيز گذاشته ميشود.
اين پرانتز در تاريخ 8 آبان 87 اضافه شد)

این هم به همان راحتی create و restore کردن databse است!
کنترلهایی که برای این کار لازم است یک adocmmand ، یک button ویک shellTreeView یا یک ابزار دیگر شبیه آن است! (برای انتخاب مسیر ذخیره backup) و در صورت دلخواه edit برای وارد کردن نام backup جدید!
با این روش می تونید به کاربر بگید از طریق همون برنامه ای که باهاش کار می کنه به راحتی یک bachkup گرفته و بر روی cd ذخیره نماید تا با در صورتی که روزی روزگاری برای کتمپیوتر مشگلی پیش آمد مثلا هارد سوخت. با نصب مجدد برنامه و sql داده هایی که قبلا در پایگاه داده ذخیره کرده است. قابل برگشت باشد!
برای این کار ارتباط بین adocommnad1 و sql server را از طریق connection string برقرار کنید!
سپس در رویداد کلیک button کد زیر را بنویسید!


procedure TForm1.Button1Click(Sender: TObject);
var
str,s,s1,s2,s3:string;
d:tdate;
begin
str:=ShellTreeView1.Path;
d:=date;
s:=DateToStr(d);
s1:=copy(s,1,4);
s2:=copy(s,6,2);
s3:=copy(s,9,2);
s:='backup_'+s1+'_'+s2+'_'+s3;
str:=str+'\'+s;
with ADOCommand1 do
begin
CommandText:='BACKUP DATABASE mydatabase1 TO DISK='+QuotedStr ( str);
execute
end;
ShowMessage('پشتبان گیری موفقیت آمیز انجام شد');
end;

البته به جای mydatabase1 نام database خودتان را در sqlserver بنویسید!
در این کد من از تاریخ برای متمایز کردن backup ها استفاده کردم. شما در صورتی که مایل باشید. می توانید به جای این کار نام backup را در یک edit از کاربر بپرسید!
اصل کد به صورت زیر است:


backup database mydatabase1 to disc='d:/new folder/backup3'

که در قسمت disc= آدرس ذخیره سازی backup و نام آن در داخل کوتیشن ذکر می گردد!
و شما می توانید کد ذکر شده را به دلخواه خود تغییر دهید!
نمونه برنامه را ضمیمه کردم.
اگر database را که در تاپیک آموزش طریق ساخت و restore فایل backup در نمونه برنامه وجود داشت! ساخته باشدی. این برنامه کار خواهد کرد. و یا در کد آن نام mydatabase1 را به نام یکی از database ها موجود در sql خودتان تغییر دهید. تا نحوه کار آن را ببنید!
اگر انتقادی یا ایرادی وجود داشته باشه، با کمال میل می پذیرم!
موفق باشید!
خداحافظ

davoodmz
پنج شنبه 02 شهریور 1385, 07:41 صبح
باسلام
عقاب جان من از کد شما قبلاً استفاده کردم عالی است . اما یک مورد بود که قرار بود رفع شود ولی نشد این که بعد از گرفتن پشتیبان از یک دیتابیس اگر بار دوم از همان دیتابیس بک آپ گرفته شود روی آن اوررایت می شود و حجم دیتابیس را بالا می برد . ممکن است کاربر در یک روز دو یا بیشتر بک آپ بگیرد.

باتشکر
داود

omid_delphi2
شنبه 04 شهریور 1385, 07:45 صبح
لطفا در مورد restore کردن هم توضیح بدهید

babak869
شنبه 04 شهریور 1385, 09:43 صبح
اگه جستجو می کردید حتما پیدا می کردید :

http://www.barnamenevis.org/forum/showthread.php?t=32723&highlight=backup

davoodmz
یک شنبه 05 شهریور 1385, 08:39 صبح
با سلام خدمت دوستان
آقا من در همین تایپیک عرض کردم اگر کاربر در یک روز بخواهد چندین بار بک آپ بگیرد این برنامه حجم دیتابیس را بالا می برد یعنی OVERRITE نمی کند و حجم فایل ( به تعداد دفعات بک آپ ) ضرب می شود یعنی اگر حجم فایل دیتابیس 5 مگ باشد اگر در یک روز 3 بار بک آپ گرفته شود از همان دیتابیس حجم 15 مگ می شود.
باتشکر از دوستان
داود

asdfghjkl
یک شنبه 05 شهریور 1385, 13:54 عصر
1. اگر بخواهیم فقط از یک جدول دیتابیس backup بگیریم چکار باید کرد
2. اگر بخواهیم از یک جدول فقط یکسری رکوردهای خاصی را backup بگیریم چه باید کرد

oghab
یک شنبه 05 شهریور 1385, 16:16 عصر
با سلام خدمت دوستان
آقا من در همین تایپیک عرض کردم اگر کاربر در یک روز بخواهد چندین بار بک آپ بگیرد این برنامه حجم دیتابیس را بالا می برد یعنی OVERRITE نمی کند و حجم فایل ( به تعداد دفعات بک آپ ) ضرب می شود یعنی اگر حجم فایل دیتابیس 5 مگ باشد اگر در یک روز 3 بار بک آپ گرفته شود از همان دیتابیس حجم 15 مگ می شود.
باتشکر از دوستان
داود

شما می‌تونید اون قسمت کد را که تاریخ امروز را به backup اضافه می‌کنه و اسم فایل را می‌سازه حذف کنید و نام backup فایل را داخل یک edit از کاربر بگیرید تا این مشکل پیش نیاد.

babak869
یک شنبه 05 شهریور 1385, 17:03 عصر
البته برای این کار راههای زیادی هست.یکی اینکه در هنگام تهیه بک آپ یه جستجو کنه که آیا در اون مسیر انتخاب شده فایلی با نام بک آپ جدید وجود داره یا نه و اگه وجود داشت پیغام اخطار بده.
یا اینکه برای هر بک آپ علاوه بر تاریخ روز جاری یه شماره جداگانه هم به اون اضافه کنه تا بک آپ ها از هم متمایز بشن
یا اینکه هر بک آپ رو در یه پوشه جداگانه بریزه تا تداخلی برای بک آپ ها پیش نیاد
ولی به نظر من بهترین راه استفاده از یه نام یکتا در نام نسخه پشتیبان هستش

ariobarzan
شنبه 02 تیر 1386, 14:56 عصر
با تشکر
برنامه با موفقیت اجرا می شود ولی هیچ فایلی ایجاد نمی شود
لطفا راهنمایی بفرمایید

ariobarzan
دوشنبه 04 تیر 1386, 08:06 صبح
هیچ کی که تحویل نگرفت
ولی خودم پیدا کردم روی کامپیوتری که اس کیو ال روش نصب شده می گیره
در ضمن اگر در آخر متن دستور گرفتن backup چیزی ننویسیم full backup می گیره
و حجمش هم مرتب زیاد میشه ولی اگر از کلمه differential استفاده بشه حجمش کمتر
میشه

kamal_habibi
شنبه 10 شهریور 1386, 04:03 صبح
سلام خدمت دوستان
من با توجه به این کدی که آقای عقاب گداشته بود تونستم Backup بگیرم ولی در Restor کردنش مشکل دارم تمام لینکها رو هم گشتم ولی نتونستم به جواب برسم
procedure TForm1.Button1Click(Sender: TObject);
var
str,s,s1,s2,s3:string;
d:tdate;
begin
str:=ShellTreeView1.Path;
d:=date;
s:=DateToStr(d);
s1:=copy(s,1,4);
s2:=copy(s,6,2);
s3:=copy(s,9,2);
s:='backup_'+s1+'_'+s2+'_'+s3;
str:=str+'\'+s;
with ADOCommand1 do
begin
CommandText:='BACKUP DATABASE mydatabase1 TO DISK='+QuotedStr ( str);
execute
end;
ShowMessage('پشتبان گیری موفقیت آمیز انجام شد');
end;
این کد آقای عقب بود برای پشتیبان گیری
اگه میشه منو در Restor کردن راهنمایی کنید

vahid64
شنبه 10 شهریور 1386, 12:53 عصر
آقای کمال حبیبی عزیز برای نوشتن کد از قسمت مخصوص کد استفاده کن تا کد ها خوانا باشند در مورد ریستور کردن هم بر می گرده به نحوه کدنویسی شما اگر زمان اجرای کد ریستور جداول شما در حال استفاده(in used) نباشند کد به درستی اجرا می شود

kamal_habibi
شنبه 10 شهریور 1386, 13:34 عصر
چطوری جداول را از حالت Use خارج کنم مشکل من همینه
کدی سراغ ندارید برای اینکه جداول را از حالت Use خارج کنم؟

vahid64
شنبه 10 شهریور 1386, 14:02 عصر
من کد خاصی به ذهنم نمی رسه ولی تا جایی که می دونم این تا حد زیادی بستگی به نوع برنامه نویسی شما داره اگه می خواید مشکلتون حل بشه باید اطلاعات کاملی از پایگاه داده برنامه تون و همچنین نحوه اتصال به برنامه و ... رو برامون توضیح بدید.
البته از جستجو هم استفاده کنید چون تا جایی که یادمه یک دفعه قبلاً در مورد این موضوع بحث شده این طوری شاید سریعتر به نتیجه برسید.

JavanSoft
شنبه 10 شهریور 1386, 14:09 عصر
برای بازیابی دیتابیس جاری را Closeو به Master متصل شوید

JavanSoft
شنبه 10 شهریور 1386, 14:14 عصر
برای بازیابی دیتابیس جاری را Closeو به Master متصل شوید





BackupCon.Connected:=False;
Dm.ModiranFarmerCon.Connected:=False;
While Dm.ModiranFarmerCon.Connected Do ;
BackupCon.Database:='master';
BackupCon.Username:='sa';
BackupCon.Password:='Pass';
'Server':=Dm.ModiranFarmerCon.Server;
BackupCon.Connect;
While Not BackupCon.Connected Do ;
QBackup.SQL.Text:= 'RESTORE DATABASE ['+Dm.ModiranFarmerCon.Database+']FROM DISK = '+QuotedStr(OpenDialog1.FileName);
Try
QBackup.Execute;
MsgList.Items.Add('اتمام');
Except
Tools.ShowMsg('خطا');
End;

Accidentboy
شنبه 10 شهریور 1386, 17:40 عصر
این کد از کل DataBase تون Backup می گیره


BACKUP DATABASE [You'r DBname] TO DISK =N'Your path' WITH NOFORMAT
,NOINIT,NAME
=N'AdventureWorks-Full Database Backup', SKIP, NOREWIND,NOUNLOAD, STATS = 10
GO

rabinhod20
یک شنبه 11 شهریور 1386, 18:09 عصر
سلام
بابا دمت گرم
خیلی حال کردم بابا تو دیگه کی هستی؟
یک خواهش داشتم میتونی یک برنامه restor data base to delpi bezari

مجتبی جوادی
پنج شنبه 15 شهریور 1386, 00:09 صبح
آقای جوای سافت ممنون از لطف شما ولی اگه ممکن است بفرمایید BackupCon , ModiranFarmerCon چی هستند ؟
و اگر ممکن است یک مثال هم در این تاپیک ردمورد restore بگذارید خیلی لطف می کنید
با تشکر

kamal_habibi
جمعه 16 شهریور 1386, 03:02 صبح
ببینید دوست عزیز من خیلی جستجو کردم در مورد Backup گیری و Restore ولی بیشتر در مورد Backup گیری راهنمایی میکردند بهر حال من در این زمینه خیلی جستجو کردم چون واسه پروژم لازم داشتم که بالاخره تونستم یک کد جالب از Backup و Restore پیدا کنم و اونو واسه شما هم میذارم
امیدوارم که مشکل تونو حل کنه
ولی قبل از هر چیز Data Base داخل پوشه Data به نام Test همراه مثال را به SQL خود اضافه کنید تا مثال هنگام اجرا مشکلی نداشته باشد

مجتبی جوادی
شنبه 17 شهریور 1386, 00:22 صبح
آقای حبیبی ممنون از لطف شما
من کد شما را در برنامه خودم تست کردم و باز همان مشکل همیشگی اتفاق افتاد یعنی برنامه پیغام خطای (( دیتابیس در حال استفاده است)) داد .
متشکرم

kamal_habibi
شنبه 17 شهریور 1386, 01:25 صبح
ببینید شما موقعی که در دلفی میخواهید برنامه تان را تست کنید باید ADOConnection شما در حالت اتصال به Data Base نباشد
موقعی که برنامه شما شروع به اجرا میکند باید ADOConnection و ADOTable را فعال کنید
من این نمونه برنامه ای که واسه شما فرستادم 100% کار میکند و خودم هم از همین کد استفاده کردم

iman_s52
شنبه 17 شهریور 1386, 08:57 صبح
میشه در مورد پشتیبان گیری از روی سیستمی که SQL روش نصب نیست توضیح بدین

vahid64
سه شنبه 11 تیر 1387, 01:19 صبح
yousef.sh.2008@gmail.com (yousef.sh.2008@gmail.com)

ایمیل بزنید در رابطه با مشکلاتان بی منفعت نیست

ای بابا تاریخ پستها رو ببین بعد از این همه مدت اومدی تاپیک رو آوردی بالا
ما گفتیم یه جواب توووپ دادی !؟

none_none
شنبه 30 شهریور 1387, 19:11 عصر
ميخواستم ببينم چه جوري ميشه از بانك پارادكس بك آپ گرفت.

vcldeveloper
شنبه 30 شهریور 1387, 23:57 عصر
ميخواستم ببينم چه جوري ميشه از بانك پارادكس بك آپ گرفت.
ربطی به عنوان این تاپیک نداره، و باید در تاپیک جداگانه ایی بحث بشه.
در هر حال، برای پارادکس کافیه فایل بانک اطلاعاتی را کپی کنید جای دیگه. فکر نکنم راه حل پشتیبانی گیری داشته باشه.

polpolpolpol
سه شنبه 02 مهر 1387, 15:59 عصر
سلام آقای حبیبی .
من برنامه شما رو استفاده کردم دستتون درد نکنه . ولی یک مشکلی که هستش اینه که وقتی رو سیستم خودم عمل بک آپ رو انجام میدم در زمان restore فایل ایجاد شده در یک سیستم جدید که نسخه msde روی اون نصبه با پیغام خطایی مواجه مشم که از فقدان فایل mdf ناشی میشه . اگه میشه شما یا بقیه دوستان منو راهنماییم کنین که چه کار کنم ؟

hadisalahi2
چهارشنبه 03 مهر 1387, 08:25 صبح
برنامه جناب آقای حبیبی ، فقط برای سرور کار میکنه ، من هم استفاده کردم. حالا برای بازیابی میتونید از کامپیوتر سرور استفاده کنید و فایل BackUp رو از روی سیستم سرور بخوانید.
یا حق

oghab
چهارشنبه 08 آبان 1387, 20:34 عصر
با سلام
برنامه اي كه قبلا گذاشته بودم نواقص و ايراداتي داشت كه بيشتر دوستان به اين موضوع اشاره كرده بودند كه وقتي دوباره " گرفتن پشتيبان" را مي‌زنيم. تشخيص نميده فايل وجود داره و فايلي با همون اسم قبلي ساخته ميشه با حجم چند برابر.
منم تو اين مدت سال همت نكردم درستش كنم. البته كار ساده ايه هم هست.
حالا يه مقدار تغييرات دادم و اين مشكل را برطرف كردم.
البته هنوز جاي كار زيادي داره. در برنامه فعلي وقتي فايلي با اون اسم وجود داشته باشه پيغام ميده كه اسم ديگه اي انتخاب كنيد ولي شما ميتونيد اين امكان را هم اضافه كنيد كه بپرسه مي خواهيد replace بشه يا مي‌خواهيد خود برنامه rename كنه و مثلا _2 به اسم فايل اضافه كنه.
خلاصه اينكه هنوز اين برنامه نواقصي داره كه ديگه هر جور دوست داشتين تغييرش بدين.


************************************************** *********

نياز به يك adocommand داريد كه ارتباطش را با دلفي برقرار كنيد.
و یک shellTreeView یا یک ابزار دیگر شبیه آن براي انتخاب مسيري كه مي خواهيد فايل بك آپ آنجا ذخيره بشه.
يك edit براي وارد كردن نام فايل (edit1)
يك speedbutton براي ساخت نام پيش فرض فايل بك آپ )ميتونه button يا bitbtn هم باشه. هيچ فرقي نداره)
تو رويداد كليكش نوشته بشه


procedure TFrmBackup.SpeedButton1Click(Sender: TObject);
var
s,s1,s2,s3:string;
begin
s:=PrintNormal;
s1:=copy(s,1,4);
s2:=copy(s,6,2);
s3:=copy(s,9,2);
edit1.text:='backup'+s1+'_'+s2+'_'+s3;
end;

من invisible ش كردم. و از فرم اولي كه مي خوام وارد اين فرم بشم. مجازا كليكش ميكنم.


procedure TForm1.Button1Click(Sender: TObject);
begin
FrmBackup.show;
FrmBackup.SpeedButton1.Click;
end;

و يك button براي اجراي كد گرفتن backup كه اين كد توش نوشته شده:


procedure TFrmBackup.Button1Click(Sender: TObject);
var
str:string;
begin
str:=ShellTreeView1.Path;
str:=str+'\'+Edit1.Text;
if FileExists(str) then // check mikone file i ba in esm vojood dare ya na
begin
ShowMessage('A file with this name is exists, select another name');
Edit1.SetFocus;
end
else
begin
with ADOCommand1 do
begin
CommandText:='BACKUP DATABASE MyDataBase TO DISK='+QuotedStr ( str);
execute
end;
ShowMessage('BackUp DataBase has successfully done');
end;
end;

به جاي MyDataBase اسم database خودتون را بنويسيد

************************************************** *********

به همين سادگي! بقيه نواقص برنامه را به بزرگي خودتون ببخشيد
موفق باشيد
التماس دعا
فايل نمونه ضميمه مي باشد

daffy_duck376
پنج شنبه 09 آبان 1387, 00:06 صبح
سلام آقای حبیبی .
من برنامه شما رو استفاده کردم دستتون درد نکنه . ولی یک مشکلی که هستش اینه که وقتی رو سیستم خودم عمل بک آپ رو انجام میدم در زمان restore فایل ایجاد شده در یک سیستم جدید که نسخه msde روی اون نصبه با پیغام خطایی مواجه مشم که از فقدان فایل mdf ناشی میشه . اگه میشه شما یا بقیه دوستان منو راهنماییم کنین که چه کار کنم ؟
با اجازه دوستان
برایrestore کردن باید یک بانک به همون نام روی SQL باشه مگر نه RESTORE نمی کنه
شما میتو نید با دستور CREATE DATA BASE یک دیتابیس خالی ایجاد کنید بعد RESTOR کنید

سيد مجتبي هاشمي
چهارشنبه 13 آذر 1387, 16:51 عصر
با استفاده از کد زیر Backup میگیرم ولی اگه دوباره بخوام Backup بگیرم و روی همون قبلی باشه یعنی اسم و محل ذخیره شدنش رو عوض نکنم حجم Backup گرفته شده دو برابر میشه. در یکی از تاپیکها آریوبرزن گفته بود باید از کلمه differential استفاده کرد اما نگفته بودن کجا باید استفاده بشه. لطفا اگه میتونید کمک کنید تا این مشکل رو حل کنم. ممنون.




procedure TMain.N34Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
with ADOCommand1 do
begin
CommandText:='BACKUP DATABASE photographer TO DISK='+QuotedStr(SaveDialog1.FileName);
execute
end;
ShowMessage('پشتیبان گیری با موفقیت انجام شد');
end;
end;

سيد مجتبي هاشمي
چهارشنبه 13 آذر 1387, 17:02 عصر
لطفا میشه بگید از این کلمه یعنی کلمه differential باید در کجای کد زیر استفاده بکنم؟


procedure TMain.N34Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
with ADOCommand1 do
begin
CommandText:='BACKUP DATABASE photographer TO DISK='+QuotedStr(SaveDialog1.FileName);
execute
end;
ShowMessage('پشتیبان گیری با موفقیت انجام شد');
end;
end;

سيد مجتبي هاشمي
یک شنبه 17 آذر 1387, 09:12 صبح
آقای کشاورز شما خودتون نمیتونید یک جواب کامل برای این مشکل ارائه بدین تا مشکل من هم حل بشه؟

merced
یک شنبه 17 آذر 1387, 11:46 صبح
يه سر به Help مي زدي



BACKUP DATABASE { database_name | @database_name_var }
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]



[/code]
CommandText:='BACKUP DATABASE photographer TO DISK='+QuotedStr(SaveDialog1.FileName) + ' WITH DIFFERENTIAL ';
[code]

ولي اين مشکلت رو حل نمي کنه با يه DeleteFile ساده Backup قبلي رو پاک کن.
يه پيشنهاد. Backup ها رو با اسمي که از تاريخ و ساعت سيستم ميگيري ذخيره کن . چه بسا روزي روزگاري به Backupي در سه هفته پيش نياز داشتي.

سيد مجتبي هاشمي
دوشنبه 18 آذر 1387, 11:16 صبح
CommandText:='BACKUP DATABASE photographer TO DISK='+QuotedStr(SaveDialog1.FileName) + ' WITH DIFFERENTIAL ';

ولي اين مشکلت رو حل نمي کنه با يه DeleteFile ساده Backup قبلي رو پاک کن.
يه پيشنهاد. Backup ها رو با اسمي که از تاريخ و ساعت سيستم ميگيري ذخيره کن . چه بسا روزي روزگاري به Backupي در سه هفته پيش نياز داشتي.[/quote]


با تشکر از شما ولی همون طور که گفتین این مشکلم رو حل نکرد. در ضمن میشه در مورد کدهایی که از Help دلفی گرفتین و اینجا نوشتین توضیح بدین؟ ممنون میشم.

استاد عشق
دوشنبه 18 آذر 1387, 15:13 عصر
سلام...
من دقیقاً این تاپیک رو بررسی کردم!
نمونه برنامه ها رو هم دانلود کردم که پست 20 از همه برام راحت تر بود!
اما من دقیقاً از همون روش استفاده می کنم و این اررور رو برام نشون میده! البته فایل پشتیبان رو درست میکنه ولی موقع بازیابی اطلاعات مشکل دارم (عکس ضمیمه)!

لطفاً منو هم راهنمائی کنید! ممنون

سيد مجتبي هاشمي
سه شنبه 19 آذر 1387, 10:54 صبح
با کد زیر که همون کد آقای عقاب هست و من یه کم تغییرش دادم میتوننین به طور کامل از بانک برنامه پشتیبان بگیرین. روی فرم یک ShellTreeView و یک ADOCommand و یک Button قرار بدین. روی Button دو بار کلیک کنید و کد زیر را بنویسید. فایل پشتیبان گرفته شده در محلی که انتخاب میکنید با نامی که از ساعت و تاریخ جاری سیستم تشکیل شده ذخیره میشود.



procedure TBackup.Button1Click(Sender: TObject);
var
str,s,s1,s2,s3,t,t1,t2,t3,t4 : string;
begin
try
str := ShellTreeView1.Path;

s := DateToStr(Date);
s1 := copy(s,1,4);
s2 := copy(s,6,2);
s3 := copy(s,9,2);
s := 'backup_'+s1+'_'+s2+'_'+s3;

t := TimeToStr(time);
t1 := copy(t,1,2);
t2 := copy(t,4,2);
t3 := copy(t,7,2);
t4 := copy(t,10,7);
t := ' in clock '+t1+'-'+t2+'-'+t3+' '+t4;

str := str+'\'+s+t;
with ADOCommand1 do
begin
CommandText:='BACKUP DATABASE photographer TO DISK='+QuotedStr(str);
execute
end;
ShowMessage('پشتیبان گیری با موفقیت انجام شد');
except
MessageDlg('در پشتیبان گیری خطا رخ داده است. لطفا دوباره سعی کنید',mtError,[mbOK],0);
end;
end;


اگه این کد مشکلی داشت شما بگید من با کمال میل میپذیرم.

استاد عشق
سه شنبه 19 آذر 1387, 14:51 عصر
با کد زیر که همون کد آقای عقاب هست و من یه کم تغییرش دادم میتوننین به طور کامل از بانک برنامه پشتیبان بگیرین. روی فرم یک ShellTreeView و یک ADOCommand و یک Button قرار بدین. روی Button دو بار کلیک کنید و کد زیر را بنویسید. فایل پشتیبان گرفته شده در محلی که انتخاب میکنید با نامی که از ساعت و تاریخ جاری سیستم تشکیل شده ذخیره میشود.


اگه این کد مشکلی داشت شما بگید من با کمال میل میپذیرم.


آقا خوبه من گفتم Sample رو دانلود و از همون روش استفاده می کنم!
آخه عزیز من شما که فقط اسم فایل رو تغییر دادی! مشکل اسم فایل نیست؛
Error رو نگاه کنید؛ بعدش به Backup Log Database توی اینجا نگاه کنید :http://www.datasprings.com/Resources/ArticlesInformation/BackupRestoreDatabasesusingMSDE/tabid/864/language/en-US/Default.aspx

من فقط نمیدونم اصلاً مشکل از بزرگی یا اندازه Database هستش که اون error رو موقع Restor میده یا نه؟! اگه هست چطوری باید Backup Log Database... رو بکار ببرم؟!

matinebi
سه شنبه 03 دی 1387, 21:51 عصر
اگه امکان داره یک sample برای گرفتن بکاپ و رستور (فقط برای یک سیستم)که زمانی بکاپ میگیریم حجم فایل بکاپ 2 برابر نشه و بشه اسم اون رو از تاریخ سیستم گرفت قرار دهید

با تشکر فراوان

daffy_duck376
پنج شنبه 12 دی 1387, 11:38 صبح
با اجازه دوستان
حجم BACKup رو که ما تعیین نمی کنیم چون ما فقط با دستورات SQL به SQL SERVER فرمان پشتیبانگیری رو میدیم . شما میتونید با توابعی که برای ZIP کردن فایله تو دلفی هست انو ZIP کنی تا حجمش کم بشه ! برای گرفتن تاریخ سیستم از تابع NOW برای متغیر TDATETIME استفاده کنید بقیه هم با روشی که دوستان زحمتشو کشیدن معرفی کردن ادامه بدید