PDA

View Full Version : استفاده از progress bar در پشتيبان گيري



majid_vb_2008
یک شنبه 08 شهریور 1388, 13:12 عصر
سلام
من بانك اطلاعاتي برنامم رو با SQL ساختم حالا موقعي كه از بانكم پشتيبان مي گيرم براي چند لحظه برنامم هنگ مي كنه حالا مي خوام موقعي كه برنامه درگيره يك progress bar نمايش داره بشه و روند كارو نشون بده
حالا كسي بلده روند پشتبانگيري رو با progress bar هماهنگ كنه

majid_vb_2008
یک شنبه 08 شهریور 1388, 22:00 عصر
دوستان من منتظرم چي شد...................... :متفکر:

majid_vb_2008
دوشنبه 09 شهریور 1388, 11:49 صبح
يعني هيچ كس بلد نيست :متعجب:

parsehvb
دوشنبه 09 شهریور 1388, 12:27 عصر
می تونی از این نمونه ایده بگیری

parsehvb
دوشنبه 09 شهریور 1388, 12:52 عصر
این یکی رو هم نگاه کن

majid_vb_2008
دوشنبه 09 شهریور 1388, 17:31 عصر
دوست من اگه مي شه بيشتر بران توضيح بده

majid_vb_2008
جمعه 13 شهریور 1388, 23:14 عصر
دوستان من هنوز منتظرم كسي نيست مارو راهنمايي كنه

////////////////................................\\\\\\\\\\\\\\\\\

ALI TT
شنبه 14 شهریور 1388, 02:00 صبح
منظورت از پشتیبان گیری ، همان کپی کردن بانک هستش ؟

شما بگید چگونه پشتیبان می گیرید تا کمکتون کنم

majid_vb_2008
چهارشنبه 18 شهریور 1388, 15:24 عصر
منظورت از پشتیبان گیری ، همان کپی کردن بانک هستش ؟

شما بگید چگونه پشتیبان می گیرید تا کمکتون کنم


اين كل كدي است كهمن توي فرم پشتيبان گيري نوشتم





Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common

Public Class FrmBackUp
Dim path As String
Private strsql As String
Private con As SqlConnection
Private da As SqlDataAdapter
Private com As SqlCommand
Private ds As DataSet

Public Shared Sub BackupDatabase(ByVal ConnectionStr As String, ByVal DevicePath As String, ByVal FileName As String)
Dim DataName As String = FileName
Using cnn As New SqlConnection(ConnectionStr)
cnn.Open()
Dim Srvcon As New ServerConnection(cnn)
Dim Srv As New Server(Srvcon)
' Create backup device item for the backup
Dim bdi As New BackupDeviceItem(DataName, DeviceType.File) 'DevicePath &
' Create the backup informaton
Dim Backup As New Backup
Backup.Devices.Add(bdi)

With Backup
'Type Of Backup
.Action = BackupActionType.Database
.BackupSetDescription = "Backup DataBase"
.BackupSetName = "DB"
.Database = cnn.Database.ToString()
.LogTruncation = BackupTruncateLogType.Truncate
'Backup.ExpirationDate = New DateTime(2007, 5, 1)
' Run the backup
.SqlBackup(Srv)
End With
End Using
End Sub

Private Sub cmdPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPath.Click
SaveFile.Filter = "Backup File (*.Bak)|*.bak"
SaveFile.ShowDialog()
txtPath.Text = SaveFile.FileName
'SaveFile.FileName
End Sub

Private Sub FrmBackup_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.MdiParent = Frmmain
Try
con = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Data.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub

Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
L.Text = "چند لحظه منتظر بمانيد"
path = txtPath.Text
BackupDatabase(con.ConnectionString, SaveFile.FileNames.ToString, SaveFile.FileName)
L.Text = "پشتيبان گيري با موفقييت انجام شد"
L.ForeColor = Color.Green
End Sub

Private Sub cmdBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBack.Click
Me.Close()
End Sub
End Class

Hesamzadeh
پنج شنبه 19 شهریور 1388, 03:18 صبح
در مورد هنگ کردن شما باید کد بک آپ رو در یک ریسمان جداگانه بنویسی

اما در مورد هماهنگ کردن زمان و نمایش یک progres bar با توجه به اینکه به موارد بسیاری از جمله حجم فایل سرعت هارد و سرعت کامپیوتر وابسته هست این کار به طور دقیق شدنی نیست همانطور که میبینیم شرکت ادوبی در ویزارد نصب همین مشکل رو داره و یکی دو دقیقه در زمان صفر ثانیه! باقی میمونه. همینطور در ویندوز ایکس پی یا در ویستا که برای کپی هر فایلی میبینیم زمانی رو برای محاسبه زمان هدر میده و در اخر هم غلط از آب در میاد

majid_vb_2008
پنج شنبه 19 شهریور 1388, 10:40 صبح
در مورد هنگ کردن شما باید کد بک آپ رو در یک ریسمان جداگانه بنویسی

مي شه بيشتر توضيح بدين

Hesamzadeh
پنج شنبه 19 شهریور 1388, 14:46 عصر
خوب من یه کد ساده میزارم برای شمارش مثلا از 1 تا 1000000000
یک کلاس ایجاد میکنیم برای شمارش:



public class counter
public Max as integer
Public Event Done(byval Number as integer)
sub Count()
dim intTotal as integer=0
For intLoopIndex As Integer=1 To Max
intTotal+=1
Next
RaiseEvent Done(intTotal)
End Sub
End Class



حالا تو فرم اصلی یک شئی از این کلاس ایجاد میکنیم و ...:




Dim CounterObj as new Counter
Private sub Button1_Click(ByVal sender as system.Object,ByVal e as system.EventArgs) Handles Button1.Click
Thread1 = New System.Threading.Thread(AddressOf CounterObj.Count)
TextBox2.text=""
CounterObj.Maximum=Val(TextBox1.text)
AddHandler CounterObj.Done, AddressOf DoneEvent
Thread1.start()
End Sub


Sub DoneEvent(Byval Number as Integer)
TextBox2.Text=Number
End Sub


البته کامپیوتری که من باهاش دارم اینها رو مینویسم روش VS نصب نیست اگر یکم بهم ریخته هست شما به بزرگی خودتون ببخشید

majid_vb_2008
جمعه 20 شهریور 1388, 16:35 عصر
دوست اگه ميشه بيشتر توضيح بديد

5mmmmm
شنبه 21 شهریور 1388, 13:50 عصر
با تشکر
میشه در مورد همین برنامه نویسی thread ها بیشتر توضیح بدی.به نظر من هم کار مفیدیه.حتی موقع پرینت.چون میشه کار پرینت را با سایر عملیات بانک همزمان کرد.

Hesamzadeh
یک شنبه 22 شهریور 1388, 15:19 عصر
خوب ببینید به هر قطعه کدی که بطور مستقل اجرا میشود ریسمان(Thread) گفته میشود مثل هر برنامه ای که شما مینویسید یا برنامه هایی که در کامپیوتر ظاهرا هم زمان اجرا میشوند.
کامپیوتر هر ریسمان را در یک برش زمانی(Slice) مستقل اجرا میکند و به همین دلیل است که به نطر میرسد بطور همزمان ایجاد میشوند.
خوب برای ایجاد یک ریسمان جدید شما باید یک شیئ مستقل ایجاد کنید برای این منظور نیاز به یک کلاس داریم که کدهای مورد نظر رو در آن بنویسیم
خوب حالا کدها رو نوشته اید و برنامه رو اجرا کردید ولی آیا نباید از پایان عملیات ریسمان اطلاع داشته باشید؟ خوب برای این منظور باید یک Event به کلاس خود اضافه کنید که پایان عملیات کلاس را به شما اعلام کند
همانطور که در مثال بالا میبینید:

RaiseEvent Done(intTotal)

که این Event پایان شمارش رو با اعلام عدد آخر به برنامه اعلام میکنه.

خوب حالا این ریسمان چطور شروع به کار میکنه؟ برای این کار شما باید یک شیئ جدید از این کلاس در برنامه تون ایجاد کنید و سپس در هنگام ایجاد ریسمان (شیئ Thread) جدید ادرس متد مورد نظر از کلاسی که نوشته بودید رو به سازنده کلاس Thread پاس کنید
البته اگر متدهایی که به سازنده کلاس ریسمان پاس میشوند دارای آرگومتن باشند نباید این آرگومانها رو قید کرد
دستورات زیر در مثال بالا:

Dim CounterObj as new Counter

Thread1 = New System.Threading.Thread(AddressOf CounterObj.Count)



سپس مقادیر مورد نیاز شیئ رو ست میکنیم
سپس روال رویداد شیئ رو مینویسیم و فعال میکنیم(همانگونه که برای کنترلهای داینامیک انجام میدادیم) و در آخر ریسمان رو اجرا میکنیم:



TextBox2.text=""
CounterObj.Maximum=Val(TextBox1.text)
lAddHandler CounterObj.Done, AddressOf DoneEvent
Thread1.start()
End Sub
Sub DoneEvent(Byval Number as Integer)
TextBox2.Text=Number
End Sub


خوب کار تمام شد:لبخند:
خوب حالا ممکن است به هر دلیل بخواهید ریسمان رو برای مدتی در حین کار به حالت تعلیق در بیاورید خوب برای این کار از متد Suspend کلاس Thread استفاده میکنیم:

Thread1.suspend()



و برای ادامه کار از متد Resume:


Thread1.Resume()



خوب برای توقف ریسمان هم از Abourt استفاده میکنیم
برای تعلیق موقت ریسمان و شروع خودکار اون هم از متد Sleep استفاده میسه که ریسمان رو بر حسب میلی ثانیه به حالت تعلیق درمیاره مثلا برای یک ثانیه باید عدد 1000 رو وارد کنید.
خوب ریسمان یک سری مسائل دیگه هم داره از جمله Priority یا تعیین اولویت ریسمان نسبت به ریسمانهای دیگه یا خاصیت ThreadState برای تشخیص حالت ریسمان که مقداری از نوع شمارشی بر میگرداند و دیگری همزمانی ریسمانها(Synchronize) که از حوصله تایپ کردن من فعلا خارج شد فقط تا همین حد بگم که یکی دستور SyncLock هست و دیگری متد Join
خوب موفق باشید :لبخند:

majid_vb_2008
چهارشنبه 25 شهریور 1388, 15:59 عصر
ببخشيد دوست من اگه مي شه يك نمونه كد برام بزاريد

ممنون

Ali_Mor
پنج شنبه 26 شهریور 1388, 17:50 عصر
این مقاله رو بخون، توضیح داده که چگونه می توان پشتیبان گیری نمود. از همان روش SMO استفاده کرده که شما در بالا آورده اید اما امکان تشخیص میزان پیشرفت کار هم در آن وجود دارد
http://www.codeproject.com/KB/database/BackupRestoreWithSmo.aspx

majid_vb_2008
یک شنبه 05 مهر 1388, 13:42 عصر
دوستان من هنوز منتظرم





0000000000000000

saadi2
یک شنبه 05 مهر 1388, 16:59 عصر
این یه نمونه با smo

majid_vb_2008
یک شنبه 05 مهر 1388, 17:23 عصر
دوست من
من از روشي كه در پست پشتيبان گيري از SQL در VB.net (http://barnamenevis.org/forum/showthread.php?t=178801) ‏ توضيح داده شده استفاده كردم

اگه كسي مي تونه كمك كنه

saadi2
سه شنبه 07 مهر 1388, 23:05 عصر
با این روش فقط میتونی انجامش بدی

majid_vb_2008
چهارشنبه 08 مهر 1388, 16:16 عصر
با این روش فقط میتونی انجامش بدی

دوست من من نتونستم از اين كد استفاده كنم
به نظر من اين كد فقط يك progress bar رو با يك تايمر پر مي كنه و ارتباطي با پشتيبان گيري ندارده



ممنون مي شم بيشتر توضيح بدي

saadi2
چهارشنبه 08 مهر 1388, 22:24 عصر
آره دقیقا
هیچ کدی نیست که بشه باهاش در این روش بکاپ گیری رو پیشرفتشو تو پروگرس بار نشون داد چون فقط یک دستور ساده اسکیوال هست. مثل بقیه دستورهای delete , insert, update پس باید به شکل نمایشی فقط این کارو بکنی.

کدهای بکاپتو قبل از این کدای پروگرس قرار بده بعد تایمشم هر جور دوست داری قرار بده. فک نکنم جز این روش راه دیگه ای باشه

majid_vb_2008
چهارشنبه 15 مهر 1388, 13:55 عصر
يعني هيچ روشي وجود نداره براي اين كار