View Full Version : آموزش طریقه ساخت datbase در sql و restore کردن فایل backup توسط یک برنامه دلفی!
oghab
جمعه 27 آبان 1384, 16:31 عصر
سلام
(براي ديدن نسخه جديد restore كردن به صفحه دوم برويد و يا لينك زير را ببنيد:
http://barnamenevis.org/forum/showthread.php?p=624052#post624052
و گرفتن backup از پايگاه داده در sql توسط دلفي لينك زير را
http://barnamenevis.org/forum/showthread.php?t=32985
اين پرانتز در تاريخ 9 آبان 87 اضافه شد)
به این روش می تونید با استفاده از backup ای را که database تون تو sql گرفتید. توسط یک برنامه دلفی ساده databse را در sql در كامپيوتر ديگري ساخته و توسط همین برنامه با تمام table های دورنش و اطلاعات آنها restore کنید
یک adoconneciton روی فرم بگذارید! سپس روی سه نقطه خصوصیconncetion string کلیک کرده. build کلیک کرده. microsoft OLE DB Provider for SQL Server را ناتخاب کرده و next بزنید و use windows Nt را انتخاب کنید و next بزنید! test conection و ok و ok
سپس یک adocommand روی فرم بگذارید. و خصوصیت connection آنرا را برابر adoconnection1 انتخاب کنید.
یک button برای ساخت database ویکی برای restore در نظر بگیرید!
در رویداد کلیک buuton اول این کد را بنویسید!
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOCommand1 do
begin
CommandText:='CREATE DATABASE mydatabase1';
execute
end;
ShowMessage(' پایگاه داده موفقیت آمیز ساخته شد');
end;
البته به جای mydatabase1 نام database خودتان را بنویسید!
در همان فولدری که exe این برنامه را قرار می دهید. backup مورد نظر را نیز قرار دهید!
و دو رویداد کلیک button دوم این کد را بنویسید!
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
begin
s:=ExtractFilePath( Application.ExeName );;
s:=s+'MYBACKUP';
with ADOCommand1 do
begin
CommandText:='RESTORE DATABASE mydatabase1 FROM DISK='+QuotedStr (s);
execute
end;
ShowMessage('فایل پشتیبان موفقیت آمیز احیا شد');
end;
ایبته به جای mybackup نام backup خودتان را بنویسید!
و به جای mydatabase1 اسم database خودتون را!
این برنامه را تازه ساختم. و تا جایی چک کردم درست بود! ولی اگه هر ایراد و انتقادی باشه با کمال میل می پذیرم.
موفق باشید!
نمونه برنامه را هم ضمیمه کردم!
موفق باشید!
ehsan2000
شنبه 28 آبان 1384, 11:18 صبح
دستت درد نکنه :تشویق: :تشویق:
disappear
شنبه 28 آبان 1384, 17:14 عصر
خیلی عالی بود .
oghab
شنبه 28 آبان 1384, 19:58 عصر
سلام
ممنونم
قابلی نداشت
موفق باشید!
hac0de
شنبه 28 آبان 1384, 21:04 عصر
man chand vaght bod roye in gir karde bodam mamnon
movafagh bashid
oghab
یک شنبه 29 آبان 1384, 14:44 عصر
خواهش می کنم
شما هم موفق باشید!
ماریا وکیلی
یک شنبه 29 آبان 1384, 17:52 عصر
عقاب جان منتظر آموزش های بعدی شما هستیم
خیلی عالی بود
newdesign
یک شنبه 29 آبان 1384, 18:58 عصر
تو بانک اکسس هم میشه استفاده کرد ؟ اگه آره ؟لازمه تغییری تو code داده بشه ؟
babak869
یک شنبه 29 آبان 1384, 21:51 عصر
عالی بود آفرین من تست کردم ایرادی نداشت
موفق باشید
oghab
دوشنبه 30 آبان 1384, 16:32 عصر
ممنون از همگی
خوشحالم که مفید بود
در مورد اکسس هم. احتمال زیاد راهش هست. ولی من چون با اکسس کار نکردم:خجالت: . بلد نیستم!
eilia_43
یک شنبه 05 شهریور 1385, 08:38 صبح
دست شما درد نکنه
مجتبی جوادی
یک شنبه 19 آذر 1385, 23:09 عصر
ولی برنامه شما یک ایراد دارد و آن اینکه اگر کلید ایجاد دیتابیس را مجددا فشار دهیم برنامه پیغام خطا می دهد که دیتا بیس قبلا ایجاد شده است . حالا بفرمایید چگونه می توان اول چک کرد که دیتابیس مورد نظر وجود دارد یا نه؟ اگر موجود نبود ایجاد گردد و اگر موجود بود برنامه کنسل و یک پیغام نمایش داده شود .
با تشکر
babak869
دوشنبه 20 آذر 1385, 23:12 عصر
شما براحتی میتونید پس از دستورات لازم اون دگمه رو غیر فعال کنید تا کاربر نتونه مجددا کلید رو فشار بده
.......
Button1.Enabled:=False;
davoodmz
سه شنبه 21 آذر 1385, 11:03 صبح
دوست من دست شما درد نکنه- عالی بود
یک بار دیگر بک آپ گیری از sql با کدهای دلفی هم محبت کرده بودین که یک مشکل داشت لطفاً اونم همین اینجا کدشا بگذارید هم اینکه مشکلشا حل نمایئد:
کدی که برای بک آپ گیری بود: اگر یک بار بک آپ میگرفتی - بار دوم در یک روز بک آپ تکرار میشد ظرفیت بک آپ دو برابر اگر چندین بار عمل بک اپ گیری را تکرار میکردیم باز هم ظرفیت اضافه میشد.
ضمناً آقا بابک سوال آقای جوادی هم سوال خوبی است و به نظر من باید جوابی دیگر برای اون پیدا کرد.
باتشکر از همه- داود
Dolphin
چهارشنبه 22 آذر 1385, 21:33 عصر
با عرض سلام بعد از یکسال
دوست گرامی آیا میشه از ابزارهای sql view یا حتی از تگهای اون هم استفاده کرد
oghab
پنج شنبه 23 آذر 1385, 15:30 عصر
با سلام خدمت دوستان عزیز
ممنوم از نکته ها و انتقاداتتون
انتقاد سازنده است و رفع این اشکالات در برنامه و در نظر گرفتن بعضی از نکته ها به کامل شدن برنامه و بهتر شدن اون کمک میکنه
اما متاسفانه الان حدود 7-8 ماهی است که من از دنیای برنامه نویسی دور افتادم و کار خاصی نکردم
الان هم حال و حوصله و فرصت پرداختن بهش ندارم (امیدوارم پیدا کنم)
بهر حال این برنامه هر چند کاربردی برنامه مشکلی نیست و زحمت چندانی براش نکشیدم و فکر می کنم همه شما دوستان گرامی با توجه به source برنامه و توضیحاتش، روند برنامه را متوجه شدید و کد آنچنانی هم نداره که تغییز دادنش مایه دردسر بشه.
پس انتقاداتتون و نکاتی که فکر میکنید بهتره داشته باشه را خودتون به برنامه اضافه کنید، با کمی تلاش و جستجو و سوال میتونید راهی پیدا کنید که ببینه database ی با این نام موجود هست یا نه و با یه if و چک کردنش پیغام بده که این databse موجود است و عمل create database انجام نشه و پیغام خطا نده
و یا چک کنید فایلی با نام backup امروز وجود داره یا نه و اگه وجود داره backup جدید را با یه اسم دیگه بسازه و یا فایل قبلی را حذف و backup جدید را جایگزین کنه تا مشکل چند برابر شدن حجم فایل بوجود نیاد
من نمیدونم چطور میشه یه فایل را از روی هارد توسط دلفی پاک کرد یا چطور میشه چک کرد فایلی با این نام در این مسیر وجود داره، ولی حتما راهی داره، و فکر نمیکنم راه سختی باشه . اگه تو همین انجمن جستجو کنید ممکنه قبلا مطرح شده باشه و راهشو پیدا کنید و اگه نبود در یه تاپیک جدید از دوستانی که در امر دلفی واردترند و همیشه راهنماییهاشون ارزنده است، بپرسید.
و بعد این برنامه را تغییر بدید و اشکلاتشو برطرف کنید
من روش restore کردن را از طریق جستجو در تاپیک های هم انجمن پیدا کردم و این برنامه را اونطور که فکر میکردم بهتره درست کردم و به عنوان نمونه اینجا قرار دادم چون فکر میکردم کاربردیه
شما هم میتونید با یه مقدار جستجو و کمک گرفتن اونو اصلاح کنید و هم خودتون استفاده کنید و هم اینجا برای استفاده دیگر دوستان قرار بدید
و یا برنامه را طبق نیاز خودتون در برنامه خودتون سفارشی کنید. این برنامه یه نمونة ساده است
مطمئنم میتونید
امیدوارم بازم به جمع برنامه نوسان و این انجمن خوب برگردم
موفق و شاد باشید
امیدوارم نسخه اصلاح شده این برنامه را توسط شما دوستان در همین تاپیک ببینم
در مورد سوال آخر هم متاسفانه درست نمیدونم و الان چیزی به ذهنم نمیرسه
مجتبی جوادی
سه شنبه 28 آذر 1385, 00:51 صبح
آقای احدی شما درست می فرمایید . می توان بعد ازایجاد کردن بانک کلید را غیر فعال کرد اما این غیر فعال کردن دائمی نیست زیرا گر برنامه بسته و دوباره اجرا گردد باز هم کلید فعال می شود و دوباره باید عمل چک کردن انجام گردد .
Good Looking
سه شنبه 11 تیر 1387, 00:59 صبح
خیلی عالی بود
منتظر يك همچين نكته هاي نابي هستم
pm_hamze
سه شنبه 11 تیر 1387, 01:06 صبح
خوب بود ...
ای بابا تو این سایت هم فرق می زارند حالا اگه ما یه مقاله یا آموزش گذاشته بودیم که شصتا اطلاعیه و انتقاد و تذکر و تهدید میومد که بار آخرت باشه و حرفهای دیگه
vcldeveloper
سه شنبه 11 تیر 1387, 02:18 صبح
خوب بود ...
ای بابا تو این سایت هم فرق می زارند حالا اگه ما یه مقاله یا آموزش گذاشته بودیم که شصتا اطلاعیه و انتقاد و تذکر و تهدید میومد که بار آخرت باشه و حرفهای دیگهاولا ما با کسی اینجا پدرکشتگی نداریم!
ثانیا اینجا محل مطرح کردن انتقادها نیست!
ثالثا، به تاریخ ایجاد تاپیک (سال 84) دقت کنید.
رابعا، این بنده خدا در حدود یک پاراگراف توضیح نوشته + یک سورس کد تا مسئله و راه حل آن را توضیح بده. مشکل تاپیک های شما این بود که عنوان "مقاله" داشتند، ولی در آنها هیچ مطلبی جزء یک سورس کد وجود نداشت. به همین دلیل هم از شما خواسته شد که اینگونه مطالب را که جنبه نکته دارند، در تاپیک نکات مطرح کنید.
همینجا یک نکته را هم به شما تذکر بدم؛ دوست عزیز، ارسال پست های بی خود برای بالا آوردن تاپیک در این سایت خلاف قوانین هست. شما عادت کردید که هر چند وقت که یکی از تاپیک هاتون بی جواب میمونه، یک پست بی ربط در اون تاپیک میزنید و تاپیک را بالا میارید! تا بحال چندین بار اینگونه پست های شما پاک شده، ولی باز هم توجه نمی کنید. اگر این روند ادامه داشته باشه، مطابق قوانین سایت بابت ارسال اینگونه پست ها جریمه و امتیاز منفی دریافت می کنید!
اگر می خواید تاپیکی را که به جواب نرسید، بالا بیارید، در پست جدید خود به نکات جدیدی که در اون زمینه خودتان در این مدت آزمایش کردید، یا به آنها پی بردید، بپردازید، یا توضیحات بیشتری درباره سوال خود مطرح کنید، نه اینکه مطالبی مثل "همچنان منتظریم"، "کسی نبود؟!" و... ارسال کنید.
jafar_mollaei
دوشنبه 08 مهر 1387, 10:55 صبح
سلام از شما تشکر می کنم ولی این کد یک مشکل دیگر نیز به نظر می رسد که اون Backup روی شبکه می باشد. اگر شما دستور پشتیبان را روی یک کلاینت اجرا کنید نسخه پشتیبان بر روی سرور ساخته می شود.
hentjanson
دوشنبه 08 مهر 1387, 11:23 صبح
سلام به تمام اساتید این برنامه میشه بانکش اکسس باشه میشه در این رابطه هم مثالی بزنید
oghab
دوشنبه 08 مهر 1387, 18:19 عصر
سلام
اين فقط يه نمونه برنامه ساده است و خيلي ايرادها و نقصها مي تونه داشته باشه
و هر كس بنا به نياز خودش ميتونه هر قسمتي اش را تغييرش بده
موفق باشيد
oghab
پنج شنبه 09 آبان 1387, 10:40 صبح
سلام
سعي كردم برنامه قبلي را كاملتر كنم و بزارم
برنامه قبلي خيلي ساده بود. و بيشتر براي اين كاربرد داشت كه بار اول كه ميخواهيم برنامه را در يك كامپيوتر استفاده كنيم database مورد نظرمون را اول بسازيم و بعد پايگاه داده مون را روش restore كنيم.
ولي اين برنامه براي اينكه كه backup هاي را كه گرفتيم بتونيم انتخاب و restore كنيم.
وقتي كه به database وصليم نميشه عمل restore را انجام داد و با پيغام database in use مواجه ميشيم. براي همين من تو برنامه اصلي اين كار را نميكنم و يه برنامه جدا براش ميسازم. البته ميشه تو همون برنامه اصلي هم گذاشت و ارتباط بقيه adoconnection ها را به database مورد نظر قطع و دوباره وصل كرد. ولي خب ساخت يه برنامه جدا راحتتره. حالا شما مختاريد
************************************************** ************
یک adocommand روی فرم بگذارید! سپس روی سه نقطه خصوصیconncetion string کلیک کرده. build کلیک کرده. microsoft OLE DB Provider for SQL Server را انتخاب کرده و next بزنید و use windows Nt را انتخاب کنید و next بزنید! test conection و ok و ok
دقت كنيد نام database را انتخاب نكنيد
يك ShellListView1 روي فرم بگذاريد براي انتخاب فايل مورد نظر.
ShellComboBox1 براي دسترسي راحتتر به درايوها
و خاصيت ShellComboBox مربوط به كنترل ShellListView1 را برابر ShellComboBox1 قرار دهيد
و يك button براي انجام restore كد آن به شرح زير است:
procedure TFrmRestore.Button2Click(Sender: TObject);
var
s:string;
begin
if ShellListView1.selectedfolder.PathName ='' then
ShowMessage('Please Select the file')
else
begin
s:=ExtractFileExt(ShellListView1.selectedfolder.Pa thName);
if Length(s)>0 then
ShowMessage('Type of the file is not valid')
else
begin
try
begin
with ADOCommand2 do
begin
CommandText:='RESTORE DATABASE MyDataBase FROM DISK='+QuotedStr (ShellListView1.selectedfolder.PathName);
execute
end;
ShowMessage('DataBase has Successfully Restore');
end;
except
ShowMessage('Please Close any releated Programs and Select a True type file');
end;
end;
end;
end;
if ShellListView1.selectedfolder.PathName ='' then چك ميكنه فايلي انتخاب شده است يا نه!
s:=ExtractFileExt(ShellListView1.selectedfolder.Pa thName);
if Length(s)>0 then
ShowMessage('Type of the file is not valid')
چك ميكند فايل انتخابي از نوع ديگري مثلا عكس نباشد. ولي در اينجا يك مشكل دارد. اگر يك فولدر انتخاب شود تشخيص نمي دهد و باعث بروز خطا مي شود. از آنجا كه فايل بك آپ اس كيو ال داراي پسوند نيست. من نتونستم براي افتراق اون از يك فولدر راهي پيدا كنم
with ADOCommand2 do
begin
CommandText:='RESTORE DATABASE MyDataBase FROM DISK='+QuotedStr (ShellListView1.selectedfolder.PathName);
Execute
و كد بالا هم عمل resotore را انجام ميدهد.
************************************************** ******************
خب اين برنامه حتما هنوز ايرادات و نواقصي داره كه به بزرگي خودتون ببخشيد
متاسفانه من اكسس بلد نيستم و درباره ش نميتونم چيزي بگم. و در زمينه شبكه هم خيلي بي سوادم و بيشتر نياز به راهنمايي ديگران دارم.
موفق باشيد
التماس دعا
پ.ن. فايل نمونه ضميمه شده
karimi.ali2005
جمعه 17 آبان 1387, 16:29 عصر
برای تشخیص اینکه فولدر انتخاب شده یا نه
if DirectoryExists(ShellListView1.Selectedfolder.Path Name) then
begin
mamali_zeshte
شنبه 30 آذر 1387, 11:26 صبح
ممنون از کدتون ولی وقتی aql در حالت start باشه پیغام database in use میده و وقتی که stop باشه پیغام [DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied'. Process stopped. Use Step or Run to continue. میده ! مشکل رو اگه بگید ممنون میشم:چشمک:
vcldeveloper
شنبه 30 آذر 1387, 12:13 عصر
ممنون از کدتون ولی وقتی aql در حالت start باشه پیغام database in use میده و وقتی که stop باشه پیغام [DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied'. Process stopped. Use Step or Run to continue. میده ! مشکل رو اگه بگید ممنون میشم
SQL Server باید Start باشه، ولی Database ایی که میخواید ازش Backup بگیرید، یا Restore کنید، نباید In use باشه؛ یعنی نباید کانکشنی اون دیتابیس رو باز کرده باشه.
mamali_zeshte
یک شنبه 01 دی 1387, 08:49 صبح
مرسی آقای کشاورز:تشویق:
matinebi
یک شنبه 01 دی 1387, 11:37 صبح
لطف کنین یک SAMPLE کامل برای بکاپ و رستور گیری قرار دهید ممنون میشم
فایل restor87 مشکل داره
Mersen
دوشنبه 07 بهمن 1387, 11:05 صبح
ولي اين برنامه براي اينكه كه backup هاي را كه گرفتيم بتونيم انتخاب و restore كنيم.
وقتي كه به database وصليم نميشه عمل restore را انجام داد و با پيغام database in use مواجه ميشيم. براي همين من تو برنامه اصلي اين كار را نميكنم و يه برنامه جدا براش ميسازم. البته ميشه تو همون برنامه اصلي هم گذاشت و ارتباط بقيه adoconnection ها را به database مورد نظر قطع و دوباره وصل كرد. ولي خب ساخت يه برنامه جدا راحتتره. حالا شما مختاريد
سلام من می خواستم توی برنامه خودم این کار رو انجام بدم هرکاری هم می کنم نمی تونم اتصال adoconnection رو قطع کنم اگه میشه لطفا کمک کنید ممنون می شم بگید کجا باید این کار رو انجام بدم و چه طور!!!:متعجب::خجالت:
vcldeveloper
سه شنبه 15 بهمن 1387, 07:08 صبح
هرکاری هم می کنم نمی تونم اتصال adoconnection رو قطع کنم
AdoConnection.Close
ahmadbh
جمعه 02 اسفند 1387, 15:31 عصر
چطور ميشه كه Database را Open كرد و از آن استفاده كرد و تاريخ Bachup آن در برنامه مشخص كنيم و چطور ميشود آن را بر روي يك درايو ديگه ذخيره كرد
با تشكر صميمانه از شما
saied_genius
شنبه 03 اسفند 1387, 19:13 عصر
براي RESTORE كرد ديتابيس SQL شما بايد ابتدا دسترسي به بانك را محدود به يك دسترسي نماييد. (كه آ ن هم دسترسي خود Restore است)
و سپس اقدام به RESOTRE نماييد.
براي دسترسي محدود :
ALTER DATABASE MyDatabase SET SINGLE_USER
و يا
EXEC sp_dboption 'MyDataBaseName','single user','TRUE'
و سپس از هر نوع RESTORE كه دوست داري استفاده كن.
همان RESTORE كه استفاده كرده اي خوب است از همان استفاده كن.
و يا از لينك زير استفاده كنيد.
http://barnamenevis.org/forum/showthread.php?t=120434&page=3
**نكته: تنظيم ديتابيس به حالت تك كاربره پس از بازيابي اطلاعات به صورت اتوماتيك به حالت چند كاربره باز مي گردد.
موفق باشيد.
hmahdavi921
دوشنبه 05 خرداد 1393, 09:51 صبح
لطفا یک آموزش هم برای بک آپ گیری و رستور دیتابیس با savedialog بزارید.
sempaisaleh
سه شنبه 10 تیر 1393, 15:02 عصر
با سلام من از اين كد استفاده كردم. پيغام پشتيبان گيري با موفقيت انجام شد رو ميده ولي هيچ كاري انجام نميده. يعني هيچ بك آپ اي نميگيره.
ADOCommand1.CommandText:='use TadbirAsak91 BACKUP DATABASE TadbirAsak91 TO DISK='+QuotedStr (ExtractFilePath(Application.ExeName)+'backup\MYBA CKUP.Bak');
ADOCommand1.execute;
ShowMessage('پشتيبان گيري با موفقيت انجام شد');
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.