تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشروع النسخ الاحتياطي sqllite
#11
(08-07-24, 07:14 PM)Taha Okla كتب : كود ضغط واصلاح قاعدة البيانات نفسها :
كود :
SQLiteConnection Conn = new SQLiteConnection("Data Source = B2testdb.db");
Conn.Open();
SQLiteCommand cmd = new SQLiteCommand("VACUUM", Conn);
cmd.ExecuteNonQuery();
Conn.Close();

كود نسخة إحتياطية بحجم حقيقي بعد الضغط والاصلاح(للنسخة الاحتياطية) :
كود :
SQLiteConnection Conn = new SQLiteConnection("Data Source = B2testdb.db");
Conn.Open();
SQLiteCommand cmd = new SQLiteCommand("VACUUM main INTO 'backup.db'", Conn);
cmd.ExecuteNonQuery();
Conn.Close();

ما شاء الله
مشكور اخ طه على الاكواد الجميلة
الرد }}}
تم الشكر بواسطة: Taha Okla
#12
فضلا هل يمكن مراجعة الكود الخاص بنسخ قاعدة البيانات الى مسار محدد لأنه لم يعمل معي

كود :
      Dim Con = New SQLiteConnection("Data Source=|DataDirectory|\codedb.db")
       If Con.State = ConnectionState.Closed Then Con.Open()

       'Dim backupFileName As String = Application.StartupPath & "codedb" & "_" & System.DateTime.Now.ToString("dd-MM-yyyy_h-mm-ss") & ".db"
       Dim backupFileName2 As String = Application.StartupPath & "\backup.db"
       Dim cmd = New SQLiteCommand("VACUUM MAIN INTO '" & backupFileName2 & "'", Con)
       'Dim cmd = New SQLiteCommand("VACUUM main INTO 'c:\codedb_backup.db'", Con)
       cmd.ExecuteNonQuery()
       Con.Close()
الرد }}}
تم الشكر بواسطة:
#13
ربما هذا الأمر ("VACUUM main INTO 'backup.db'") لا يعمل على قواعد البيانات القديمة قبل الاصدار الذي ينزل  بـ NuGet   إصدار (SQLite Core)

على كل هناك طريقة أخرى تعمل على الاصدارات القديمة وهي :

كود :
       Dim Con As New SQLiteConnection("Data Source=|DataDirectory|\testdb.db")    ' الكائن الأساسي لقاعدة البيانات الحالية
       Dim Con2 As New SQLiteConnection("Data Source= " & Application.StartupPath & "\backup.db") ' كائن النسخة الاحتياطية

       ' فتح الاتصال
       If Con.State <> ConnectionState.Closed Then Con.Close()
       Con.Open()

       If Con2.State <> ConnectionState.Closed Then Con.Close()
       Con2.Open()

       ' إصلاح قاعدة البيانات الاساسية من أجل ضغطها
       Dim cmd As SQLiteCommand = New SQLiteCommand("VACUUM", Con)


       ' عمل نسخة إحتياطية
       Con.BackupDatabase(Con2, "main", "main", -1, Nothing, 0)

       Con2.Close()
       Con.Close()
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: salamandal , salamandal
#14
(09-07-24, 04:22 PM)Taha Okla كتب : ربما هذا الأمر ("VACUUM main INTO 'backup.db'") لا يعمل على قواعد البيانات القديمة قبل الاصدار الذي ينزل  بـ NuGet   إصدار (SQLite Core)

على كل هناك طريقة أخرى تعمل على الاصدارات القديمة وهي :

كود :
       Dim Con As New SQLiteConnection("Data Source=|DataDirectory|\testdb.db")    ' الكائن الأساسي لقاعدة البيانات الحالية
       Dim Con2 As New SQLiteConnection("Data Source= " & Application.StartupPath & "\backup.db") ' كائن النسخة الاحتياطية

       ' فتح الاتصال
       If Con.State <> ConnectionState.Closed Then Con.Close()
       Con.Open()

       If Con2.State <> ConnectionState.Closed Then Con.Close()
       Con2.Open()

       ' إصلاح قاعدة البيانات الاساسية من أجل ضغطها
       Dim cmd As SQLiteCommand = New SQLiteCommand("VACUUM", Con)


       ' عمل نسخة إحتياطية
       Con.BackupDatabase(Con2, "main", "main", -1, Nothing, 0)

       Con2.Close()
       Con.Close()
أشتغل الكود بنجاح  Big Grin

تقييم +1

كنت افكر في طريقة اخرى باستعمال الكود الاول حتى وجدتت مشاركتك
ضغط واصلاح نفس قاعدة البيانات  ومن ثمة نسخ القاعدة الى مجلد آخر (Backup) باسم مغاير
الرد }}}
تم الشكر بواسطة: Taha Okla
#15
بعد عدة محاولات لانشاء أنواع متعددة من الحقول على قاعدة بيانات SQLite
وجدت أنه :
- لا يوجد خصوصية لأي حقل.
- يمكنك تخزين أي نوع من البيانات في أي حقل من الحقول دون أن ينبهك إلى ذلك ودون أن يعطيك أي رسالة خطأ.
- لا يوجد حدود للتخزين، يعني لو ذكرت نريد حقل نصي(40)  يمكنك كتابة أي شيء يتجاوز 40 حرف بل المئات..
- يمكنك تخزين قيم نصية في حقول رقمية.

- الأهم من  ذلك : يمكنك أثناء كتابة الكود أن تخترع أنواع من عندك للبيانات المخصصة في الحقول...
مثلا بالعادة نكتب حقل من نوع Int أو Text أو VarChar 
لكن الان لست مقيداً فهذه أشياء تكتبه بشكل وهمي، ولكن كل الحقول من نوع واحد مهما وضعت من أنواع بيانات

مثلاً فيك تختار نوع شاكو ماكو ..
جرب أن تصنع جدول في قاعدة بيانات من خلال الكود التالي وستجد أنه يتم إنشاء تلك القاعدة وبدون مشاكل.. :
كود :
"CREATE TABLE items (name ShacoMaco(20) , price SingleMingle, in_stock TikTak) "

بصراحة تفاجأت بها .. على الرغم من بساطة العمل عليها.
هل هذه ميزة : أم عشوائية وإهمال؟!!!...
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة:
#16
(10-07-24, 07:03 PM)Taha Okla كتب : بعد عدة محاولات لانشاء أنواع متعددة من الحقول على قاعدة بيانات SQLite
وجدت أنه :
- لا يوجد خصوصية لأي حقل.
- يمكنك تخزين أي نوع من البيانات في أي حقل من الحقول دون أن ينبهك إلى ذلك ودون أن يعطيك أي رسالة خطأ.
- لا يوجد حدود للتخزين، يعني لو ذكرت نريد حقل نصي(40)  يمكنك كتابة أي شيء يتجاوز 40 حرف بل المئات..
- يمكنك تخزين قيم نصية في حقول رقمية.

- الأهم من  ذلك : يمكنك أثناء كتابة الكود أن تخترع أنواع من عندك للبيانات المخصصة في الحقول...
مثلا بالعادة نكتب حقل من نوع Int أو Text أو VarChar 
لكن الان لست مقيداً فهذه أشياء تكتبه بشكل وهمي، ولكن كل الحقول من نوع واحد مهما وضعت من أنواع بيانات

مثلاً فيك تختار نوع شاكو ماكو ..
جرب أن تصنع جدول في قاعدة بيانات من خلال الكود التالي وستجد أنه يتم إنشاء تلك القاعدة وبدون مشاكل.. :
كود :
"CREATE TABLE items (name ShacoMaco(20) , price SingleMingle, in_stock TikTak) "

بصراحة تفاجأت بها .. على الرغم من بساطة العمل عليها.
هل هذه ميزة : أم عشوائية وإهمال؟!!!...

صحيح  Huh لا ادري كيف استطعت ان تكتشف ذلك


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#17
مما تعلمته عن قواعد البيانات :
أنه العمليات المطبقة على بعض الحقول الرقمية تتجاوز سرعتها عدة مرات عما ينفذ على نظيرتها النصية ..
لذلك أهتم كثيراً بنوع الحقل قبل التنفيذ عليه ..
بساطة العمل على هذه الملفات لفت أنتباهي، وكنت فكر بصرف نظري إلى العمل عليها
مقارنة بآكسس ... فأغلب مشاريعي أعتمد بها على قواعد بيانات آكسس لما توفره مايكروسوفت من مستعرض ملفات إحترافي لها..
وسهولة التعامل معها من خلاال مشغلها الأساسي ، بحيث لو حدث خطأ في إدخال أو العمليات على بعض الحقول أنه بإمكاني من خلال 
خصائص مشغل آكسس أن أجد ذاك الخطأ بسرعة وأصلحه. دون الحاجة لأنتظر حتى أصحح برنامجي وأجعل العميل يتأخر ويعطل عمله ...

و عندما أجرب شيء جديد : أحاول أن أجرب عليه كل الحالات التي أحتاجها...
فخلال أولى التجارب ظهرت لي هذه المشكلة...
والله أعلم إن لم يكن هناك ما هو أعظم منها.. ما دام أهم شيء لم يهتموا فيه (أي نوع البيانات المدخلة)..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: salamandal
#18
(12-07-24, 04:14 AM)Taha Okla كتب : مما تعلمته عن قواعد البيانات :
أنه العمليات المطبقة على بعض الحقول الرقمية تتجاوز سرعتها عدة مرات عما ينفذ على نظيرتها النصية ..
لذلك أهتم كثيراً بنوع الحقل قبل التنفيذ عليه ..
بساطة العمل على هذه الملفات لفت أنتباهي، وكنت فكر بصرف نظري إلى العمل عليها
مقارنة بآكسس ... فأغلب مشاريعي أعتمد بها على قواعد بيانات آكسس لما توفره مايكروسوفت من مستعرض ملفات إحترافي لها..
وسهولة التعامل معها من خلاال مشغلها الأساسي ، بحيث لو حدث خطأ في إدخال أو العمليات على بعض الحقول أنه بإمكاني من خلال 
خصائص مشغل آكسس أن أجد ذاك الخطأ بسرعة وأصلحه. دون الحاجة لأنتظر حتى أصحح برنامجي وأجعل العميل يتأخر ويعطل عمله ...

و عندما أجرب شيء جديد : أحاول أن أجرب عليه كل الحالات التي أحتاجها...
فخلال أولى التجارب ظهرت لي هذه المشكلة...
والله أعلم إن لم يكن هناك ما هو أعظم منها.. ما دام أهم شيء لم يهتموا فيه (أي نوع البيانات المدخلة)..

في بداية تجاربي مع قواعد بيانات sqlite وجدت حديثا كثيرا في المنتديات الاجنبية عن قابلية هذه القواعد للتلف والعطب 
ثم ذهبت اغلب التخمينات ان السبب هو مشاركة القاعدة على الشبكة .لذلك تم الالتفاف على هذه المشكلة بحصر استعمال القاعدة خارج الشبكلات والابتعاد عن المشاركة قدر المستطاع وان كان لا بد فيجب نسخ القاعدة احتياطيا وعلى الدوام 
في النسخ القديمة ظهرت ايضا مشكلة التاريخ في نوع الحقل وتم الالتفاف على هذه المشكلة بحفظ التواريخ على شكل نص ثم الدخول في سلسلة التحويلات واعتقد ان هذا حل غير عملي 
فلا يعقل اذا كانت قاعدة البيانات كبيرة  ان اجبر محرك البحث على  ترجمة وتحويل ملايين السجلات من حقل نصي الى رقمي وخصوصا عند استعمال التعليمة between 
ثم ظهر نوع الحقل الجديد Datetext لان محاولة الالتفاف على المشكلة زادتها تعقيدا خصوصا اذا علمنا ان بعض البرامج تولي اهمية قصوى للتعليمة format اثناء البحث بالتواريخ
Stored procedure ايضا غير موجود اطلاقا ويجب الاستعانة بالجداول المؤقتة كبديل ( يتم انشاؤها برمجيا ومحوها او تدميرها بعد كل عملية ) 
لم اجرب هذه الطريقة ولكن اعتقد في حالة التعامل مع قواعد بيانات كبيرة فان هذا سيشكل عبء اضافي على الذاكرة او على الاقل سيؤثر على زمن استرجاع البيانات
رأيي كمبتدىء ان هذه القواعد تصلح للتخزبن الكمي (ملفات .نصوص.صور...الخ) اكثر منه للتخزين الرقمي (على نحو ما هو موجود في القواعد المحاسبية للشركات) والله اعلم
اعتقد انني سأتوجه الى قواعد بيانات فايربيرد Firebird لاجراء بعض المقارنات عليها ايضا  Shy
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مشروع انشاء قاعدة بيانات sqlite Kamil 12 348 25-06-24, 07:34 AM
آخر رد: salamandal
  مشروع يتيح للمستخدم استخراج الألوان من الصور العتيق 1 121 08-06-24, 04:31 PM
آخر رد: Taha Okla
  مشروع ضغط و صيانة قاعدة بيانات Sql Server غزة العزة 0 165 02-06-24, 12:32 AM
آخر رد: غزة العزة
  نقل البيانات من DataGridView إلى ملف Excel في مشروع C# غزة العزة 3 287 22-05-24, 07:10 PM
آخر رد: العتيق
  مشروع تقريب الارقام Kamil 0 263 01-01-24, 09:04 PM
آخر رد: Kamil
  مشروع الاتصال باي سيرقر و تعديل اسم قاعدة بيانات Kamil 0 560 22-12-23, 01:00 PM
آخر رد: Kamil
  مشروع تفقيط الأرقام عربي / إنجليزي متعدد العملات [منقول]. asemshahen5 11 15,063 03-07-23, 12:55 AM
آخر رد: Heemo
Video [درس فيديو] مشروع انشاء شاشة ختامية لبرنامجك سبلاش سكرين بالفيجوال ستوديو سي شارب c# ahmadpal 3 3,442 27-02-23, 03:16 PM
آخر رد: محمد عبد
  [مشروع] مشروع منظومة مبيعات للكافيعات Abdullah Soliman 2 3,797 18-09-22, 10:29 AM
آخر رد: bhanusuru597
Video [درس فيديو] مشروع انشاء مولد الوان rgb سي شارب ahmadpal 4 3,533 19-10-21, 06:51 PM
آخر رد: عبد العزيز البسكري

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم