PDA

View Full Version : سوال: مشکل با حجم فایل دیتابیس



mostafa272
یک شنبه 21 شهریور 1389, 17:01 عصر
با سلام

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

linktaz
یک شنبه 21 شهریور 1389, 17:35 عصر
با سلام

من یه برنامه نوشتم که از دیتابیس اکسس استفاده میکنه و خیلی سریع حجم دیتابیس زیاد میشه .پس تعدادی از رکوردهای قدیمی تر رو باید پاک کرد.اما مشکل اینجاست که با پاک کردن رکورد های در حجم دیتابیس تغییری حاصل نمیشه(مثل قبلش هست و یا گاهی بیشتر هم میشه)لطفا بگید مشکل از کجاست؟باتشکر
به مسیر زیر برید:
tools>database utilities>Compact and repair database
حجم فایلتون حتما کاهش پیدا خواهد کرد

mostafa272
دوشنبه 22 شهریور 1389, 10:19 صبح
تو اکسس 2007 به کدوم مسیر باید برم ؟چون مسیری که گفتید رو پیدا نمی کنم

linktaz
دوشنبه 22 شهریور 1389, 10:56 صبح
تو اکسس 2007 به کدوم مسیر باید برم ؟چون مسیری که گفتید رو پیدا نمی کنم
در اکسس 2007 فکر کنم در این مسیر باشه(متاسفانه 2007 روی سیستمم نصب نیست)

روی دکمه آفیس (لوگوی آفیس در بالا سمت چپ) کلیک کنید و از منو Manage رو انتخاب فرمائید و سپس Compact and Repair Database

mostafa272
دوشنبه 22 شهریور 1389, 14:42 عصر
خب این کار رو میشه با کدنویسی تو خود برنامه انجام داد؟

c4soft
دوشنبه 22 شهریور 1389, 15:19 عصر
سلام
دوست عزیز
در فایل ضمیمه همون دستور جناب linktaz رو میتونید تو فرم مشاهده کنید

linktaz
دوشنبه 22 شهریور 1389, 15:59 عصر
دوست عزیزc4soft،وقتی تیک allow full menu رو از استارت آپ برمیدارم دیگه این دستور جواب نمیده،چه راهی واسه این مشکل پیشنهاد میکنید؟

alirezabahrami
دوشنبه 22 شهریور 1389, 17:08 عصر
دوست عزیزc4soft،وقتی تیک allow full menu رو از استارت آپ برمیدارم دیگه این دستور جواب نمیده،چه راهی واسه این مشکل پیشنهاد میکنید؟

سلام
در اكسس 2003 به مسير tools\options\General برو و گزينه campact and close را انتخاب كن ! با انتخاب اين گزينه در هربار خروج از برنامه عمل فشرده سازي ديتابيس بصورت اتوماتيك انجام ميشود .
ضمناً متأسفانه بر روس سيستم من هم اكسس 2007 نصب نيست كه در خصوص مسير مربوطه ( جهت انجام) شما را راهنمائي كنم.
موفق باشيد

c4soft
دوشنبه 22 شهریور 1389, 17:11 عصر
سلام
ضمن تشکر
خب میتونید گزینه ی
access option - Current Database - Compact on Closeرو انتخاب کنید .
با انتخاب گزینه ی فوق دیگه نیازی به اجرای دستی اون نیست.

viruse_del
چهارشنبه 24 شهریور 1389, 01:30 صبح
خیلی ممنون از همه، ولی مشکل من هم مثل Mostafa272 اینه که میخوام حتما با کد حجمو کنترل کنم. کسی میدونه؟
خواهش کمکم کنید:افسرده:

smderfan
چهارشنبه 24 شهریور 1389, 12:11 عصر
سلام
با توجه به اينكه مسأله افزايش حجم بانك اطلاعاتي اكسس از اهميت خاصي برخوردار است و بايستي بصورت مرتب كنترل و عمليات RepairAndCompact صورت بگيرد مي تونيد از برنامه زير جهت كنترل استفاده كنيد.

viruse_del
چهارشنبه 24 شهریور 1389, 12:15 عصر
ممنون، ولي اين فايل رو بايد چيكار كنم؟ ميشه بيشتر توزيح بدين؟

viruse_del
چهارشنبه 24 شهریور 1389, 14:12 عصر
يعني هيچكي بلد نيست كه چطوري با كد اين مشكلو برطرف كنيم؟

viruse_del
چهارشنبه 24 شهریور 1389, 22:24 عصر
کسی بلد نیست؟ مسئله مرگ و زندگیه.... چطوري با كد اين مشكلو برطرف كنيم؟ :افسرده:

smderfan
چهارشنبه 24 شهریور 1389, 23:48 عصر
سلام
از كد زير استفاده كنيد :

Public Sub CompactDB()
CommandBars("Menu Bar").Controls("Tools").Controls("Database utilities").Controls("Compact and repair database...").accDoDefaultAction
End Sub

smderfan
چهارشنبه 24 شهریور 1389, 23:55 عصر
Code added to the Switchboard form
CODE
Private Sub Form_Load()
AutoExec
End Sub

Private Sub Form_Timer()
Me.TimerInterval = 0
MaintenanceCheck
End Sub

Code within the Autoexec procedure
CODE
Form_Switchboard.TimerInterval = 3000


The Maintenance Check function
CODE
Function MaintenanceCheck()

'--------------------------------------
'- This function checks to see if the -
'- user is the first to log in today. -
'- It triggers a Compact and repair -
'- process if this is true -
'--------------------------------------
On Local Error GoTo MCError1

Dim stDatabaseName As String
Dim stLastCompacted As String
Dim stMessage As String
Dim stSQl As String
Dim stTimeNow As String
Dim stToday As String

stToday = Format$(Now, "yyyymmdd") 'Note the yyyymmdd format
stLastCompacted = DLookup("[ParameterValue]", "tblControl1", "[ParameterName] = 'LastCompacted'")
stDatabaseName = DLookup("[ParameterValue]", "tblControl1", "[ParameterName] = 'DatabaseName'")

'--------------------------------------
'- Database already compacted today -
'--------------------------------------
If stLastCompacted >= stToday Then
Exit Function
End If

'--------------------------------------
'- Database compact process is -
'- required. Display message -
'--------------------------------------
stMessage = "You are the first person to use this database today." & vbCrLf & vbCrLf

If intSecurityLevel = 1 Then
stMessage = stMessage & "Please ask someone with Data-entry or Administrator permissions "
stMessage = stMessage & "to log in and run start of day maintenance."
MsgBox stMessage, vbInformation, stDatabaseName
Exit Function
Else
stMessage = stMessage & "When you click [OK], start of day maintenance will take place." & vbCrLf & "Please wait ..."
MsgBox stMessage, vbInformation, stDatabaseName

stMessage = SysCmd(acSysCmdSetStatus, "Daily Maintenance In Progress ... Please Wait")
End If

'---------------------------------------
'- Write a log record -
'---------------------------------------
stMessage = WriteLogRecord("CompactDatabase", "MaintenanceCheck", "")

'---------------------------------------
'- Update the Control Table record -
'---------------------------------------
stSQl = "UPDATE tblControl1 SET [tblControl1].[ParameterValue] = '" & stToday & "' WHERE [tblControl1].[ParameterName] = 'LastCompacted'"
DoCmd.SetWarnings (False)
DoCmd.RunSQL (stSQl)
DoCmd.SetWarnings (True)

'---------------------------------------
'- Call the CompactDatabase function. -
'- This must be the last line of code -
'- in the MaintenanceCheck function -
'---------------------------------------
CompactDatabase
Exit Function

MCError1:

MsgBox CStr(Err) & " - " & Error$
Resume MCEnd

MCEnd:
End Function


The Compact Database function
CODE
'------------------------------------
'- Compact the database. This only -
'- works if it is the only code in -
'- the function, and if the -
'- function is called from the last -
'- line of another VB function -
'------------------------------------
CommandBars("Menu Bar"). _
Controls("Tools"). _
Controls("Database utilities"). _
Controls("Compact and repair database..."). _
accDoDefaultAction

End Function


You can also call the CompactDatabase function from a Switchboard menu option. Set the menu item up like this via the Switcboard Manager:

Text: Compact and Repair Database

Command: Run Code

Function Name: CompactDatabase

viruse_del
سه شنبه 30 شهریور 1389, 13:07 عصر
smderfan (http://www.barnamenevis.org/forum/member.php?u=17960) ممنون، حاا اين كدي رو كه دادي كجاي برنامم بنويسم؟ اگه ممكنه بيشتر توضيح بدين

smderfan
سه شنبه 30 شهریور 1389, 18:31 عصر
سلام
كد زير رو بر روي كامندباتم مورد نظر خودت قرار بده

CommandBars("Menu Bar").Controls("Tools").Controls("Database utilities").Controls("Compact and repair database...").accDoDefaultAction

mostafa272
یک شنبه 04 مهر 1389, 20:36 عصر
سلام

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

با تشکر