مشکل با اکسس (ثبت روزانه 300 رکورد)

rouzbeh_ziafati

New Member
من برای شرکتی برنامه ای نوشتم و از بانک اکسس برای نگه داری اطلاعات استفاده کردم .
در روز تقریبا حدود 300 رکورد در یکی از جدول هام ثبت میشه .
بمرور زمان 100% با مشکل مواجه خواهم شد هم بخاطر پایین آمدن سرعت جستجو در بانک هم اینکه اکسس مطمئنا با محدود بودن ثبت تعداد رکورد مواجه است .
سوالی که از دوستان دارم اینکه در هر جدول حداکثر در اکسس چند رکورد میشه ثبت کرد ؟
اگر من بخواهم برنامه بطور اتوماتیک در پایان هر سال بانک جدیدی ایجاد کنه و ادامه اطلاعات رو در اون ذخیره کنه آیا راهکاری وجود داره ؟
 

the_king

مدیرکل انجمن
من برای شرکتی برنامه ای نوشتم و از بانک اکسس برای نگه داری اطلاعات استفاده کردم .
در روز تقریبا حدود 300 رکورد در یکی از جدول هام ثبت میشه .
بمرور زمان 100% با مشکل مواجه خواهم شد هم بخاطر پایین آمدن سرعت جستجو در بانک هم اینکه اکسس مطمئنا با محدود بودن ثبت تعداد رکورد مواجه است .
سوالی که از دوستان دارم اینکه در هر جدول حداکثر در اکسس چند رکورد میشه ثبت کرد ؟
اگر من بخواهم برنامه بطور اتوماتیک در پایان هر سال بانک جدیدی ایجاد کنه و ادامه اطلاعات رو در اون ذخیره کنه آیا راهکاری وجود داره ؟​

تعداد رکورد هایی که در هر Table می توان ذخیره کرد محدود نیست (در مستندات اشاره ای به محدودیتی
برای تعداد رکورد نشده که احتمالا محدود به مقادیر 31 یا 32 بیتی است، حداقل 2147483648 رکورد)
اما به هر حال حجم دیتابیس نبایستی از 2 گیگابایت فراتر رود.
Microsoft Access Database برای بانک اطلاعاتی های خیلی حجیم طراحی نشده و قطعا پیش از آنکه به مشکل
محدودیت تعداد رکورد ها برسید، کندی عملکرد اش مشکل ساز خواهد شد.

اگر بانک اطلاعاتی با نام خاصی در ابتدای برنامه گشوده می شود، قطعا استفاده از تاریخ فعلی در نام بانک اطلاعاتی
می تواند مشکل را حل کند. بدین نحو که یک نسخه تهی و بدون رکورد از بانک اطلاعاتی (صرفا شامل جداول تهی)
در یک فایلی در کنار برنامه ذخیره شود، مثلا Empty.mdb
زمانی که برنامه اجرا می گردد، بر اساس سال کنونی (Year(Now ، مثلا بانک اطلاعاتی
"C:\Database" & CStr(Year(Now)) & ".mdb" گشوده شود. و اگر چنین فایلی وجود نداشت، یک نسخه از آن فایل
بدون رکورد Empty.mdb در این فایل منطبق با سال کنونی کپی شود.
 
vb6; کپی گرفتن از Access db یا ایجاد آن از طریق نوشتن کد؟؟؟

سلام the_king عزیز...
آیا ممکنه تنها با نوشتن کد, یک بانک اطلاعاتی اکسس ایجاد کرد؟
اگه پاسخ منفیه ; چطور میشه از یک بانک اطلاعاتی اکسس کپی گرفت؟
ممنون...
 

the_king

مدیرکل انجمن
سلام the_king عزیز...
آیا ممکنه تنها با نوشتن کد, یک بانک اطلاعاتی اکسس ایجاد کرد؟
اگه پاسخ منفیه ; چطور میشه از یک بانک اطلاعاتی اکسس کپی گرفت؟
ممنون...
پاسخ مثبته، کد زیر شامل دو تابع است، CreateAccessDatabase یک بانک اطلاعاتی را می سازد و
CreateAccessTable یک جدول را در داخل یک بانک اطلاعاتی ایجاد می کند.
ابتدا در منوی Project گزینه References را انتخاب کرده و Microsoft DAO Object Library را در لیست پیدا نموده
و تیک بزنید. احتمالا چند نسخه متفاوت از آنرا خواهید یافت، فقط آخرین نسخه را اضافه کنید.

کد:
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Private Sub CreateAccessDatabase(ByVal Path As String)
    Dim db As Database
    If PathFileExists(Path) = 0 Then
        Set db = DAO.CreateDatabase(Path, dbLangGeneral, dbVersion30)
        db.Close
    End If
End Sub

Sub CreateAccessTable(ByVal Path As String, ByVal TableName As String, ParamArray Fields() As Variant)
    Dim table As TableDef
    Dim db As Database
    Dim Index As Long
    Set db = DAO.OpenDatabase(Path, False, False)
    Set table = db.CreateTableDef(TableName)
    With table
        For Index = 0 To UBound(Fields)
            .Fields.Append .CreateField(Fields(Index), dbText)
        Next
    End With
    db.TableDefs.Append table
    db.Close
End Sub

به عنوان مثال کد زیر بانک اطلاعاتی c:\a.mdb و سپس جدول People محتوی فیلد های FirstName و
LastName را داخل آن می سازد :

کد:
    Dim Path As String
    Path = "c:\a.mdb"
    [B]CreateAccessDatabase[/B] Path
    [B]CreateAccessTable[/B] Path, "People", "FirstName", "LastName"

دقت کنید که هر Table تنها یکبار ساخته می شود، تلاش برای ایجاد کردن مجدد آن با خطا روبرو می شود.
 
سلام به the_king عزیز و ممنون از پاسخهای خوبتون...
چطور ممکنه در بانک اکسس ایجاد شده تصاویر رو هم ذخیره کنیم؟ آیا ذخیره تصاویر در msflex هم امکان داره؟
با تشکر...
 

rouzbeh_ziafati

New Member
سوال

ممنون از راهنمایی هاتون
خب من چون با محیط sql آشنایی ندارم از اکسس استفاده کردم .
این برنامه که نوشتم و روزانه 300 رکورد ثبت میکنه برنامه سیستم نوبت دهی به ماشین های باری هست .
تقریبا روزی 300 بار بارگیری داریم که باید بهشون نوبت بدیم و ساعت و تاریخ و شهر مقصد و نوع بار و اطلاعات دیگه ای در جدول نوبت ثبت بشه .
من قصد دارم که آخر هر سال مثلا 100000 هزار رکورد اول جدول نوبت رو از سیستم حذف کنم و در یک بانک دیگه نگه داری کنم . ( از جدول هایی که توی بانک دارم فقط جدول نوبت هست که روزانه اینطور افزایشی پر میشه و بقیه این مشکل رو ندارند)
که اون بانک پشتیبان دقیقا مثل بانک فعلی من باشه فقط فرقش در رکوردهای جدول نوبت باشه .
اگر بخوام چنین کاری بکنم نیاز هست تا برنامه آخر هر سال یک بانک پشتیبان درست بکنه مثلا با نام شماره سال جاری و تمام جدول های بانک فعلی رو اونجا بسازه و محتویات رو اونجا انتقال بده . «فقط محتویات جدول نوبت رو X تای اولش رو ببره اونجا و از جدول فعلی فقط X تای اول رو حذف کنه .»
آیا چنین کاری امکان پذیر هست ؟
 

جدیدترین ارسال ها

بالا