اذهب إلى المحتوى

السؤال

نشر

عند تجربة ال تطبيق أثناء التطوير يعمل بشكل جيد ولا أخطاء تظهر لكن بعد تثبيته عند اول مرة يعمل بشكل جيد لكن بعد المحاولة الثانية يظهر خطأ  sqllite-readolny بعد محاولة الاضافة 

حاولت التعديل بقلب الخاصية readOlny إلى false ثم

أعدت التثبيت لكن نفس الخطأ يظهر بمجرد أن أضغط على زر الاضافة ؟؟

لماذا يظهر هذا الخطأ فقط عند التثبيت ؟

 

كود قاعدة البيانات مكتوب في ملف drug.js

 

Gestion-Cabinet-Medical.zip

received_744991046566298.jpeg

Recommended Posts

  • 0
نشر
  • انسخ رسالة الخطأ كنص لتسهيل موضوع البحث على المدرب!!
  • وماهي الحلول التي قمت بتجريبها لحل المشكلة، يوجد الكثير من نتائج البحث الممكنة.

مثلاً أين تقوم بتخزين قاعدة البيانات؟ من المفترض أن تخزنها في المسار الذي يعيده تنفيذ:

app.getPath('userData')

حيث user data هو مجلد بيانات المستخدم ونحفظ ملفات قواعد البيانات فيه

مثلاً محاولة كتابة بيانات على قاعدة البيانات في حال وجودها ضمن مجلد لاتملك صلاحية الكتابة عليه لن تعمل وسيظهر نفس الخطأ

  • 0
نشر

الخطأ يظهر لك لأن محتويات الpackage  التي ينتجها electron تكون read-only أي أن الملفات في الحزمة تكون غير قابلة للتعديل ولكن للقراءة فقط. بما أنك تضع قاعدة البيانات داخل ملف المشروع فلن ينجح الأمر. لحل المشكلة نقوم بوضع قاعدة البيانات في مسار خارج ملف المشروع ومن ثم إجراء التعديلات اللازمة في ملف drugs.js وكما يلي:

  1. قم بإنشاء حافظة folder في القرص الصلب C أو D أو غيره بشرط أن يملك المستخدم كامل صلاحيات الوصول الى الملفات فيه. وليكن إسمه databases
  2. قم بنسخ ملف قاعدة البيانات draugsDB.db إلى المسار الذي أنشأته في الخطوة السابقة.
  3. ألان نعدل على ملف drugs.js ونضيف مسار قاعدة البيانات الجديد وكما يلي.
const { ipcRenderer } = require("electron");
const path = require("path") // نستورد هذه المكتبة لغرض إنشاء المسار الصحيح لملف قاعدة البيانات
const dbPath= path.join( // ننشيء المسار الجديد ونضعه في ثابت
    path.dirname('c://'), //  مسار القرص الصلب الذي قمنا بإختياره
    '/databases/drugsDB.db' // هنا تضع هذا المسار الذي يشير الى ملف قاعدة البيانات
)

console.log("dbPAth", dbPath)
const sqlite3 = require("sqlite3");
var db = new sqlite3.Database(dbPath, (err) => { // نستعمل ثابت المسار الجديد للإتصال بقاعدة البيانات
  if (err) {
    console.log("could not open db");
  } else {
    console.log("Connected to db");
  }
});
...
  • 0
نشر
بتاريخ 33 دقائق مضت قال علي محسن:

الخطأ يظهر لك لأن محتويات الpackage  التي ينتجها electron تكون read-only أي أن الملفات في الحزمة تكون غير قابلة للتعديل ولكن للقراءة فقط. بما أنك تضع قاعدة البيانات داخل ملف المشروع فلن ينجح الأمر. لحل المشكلة نقوم بوضع قاعدة البيانات في مسار خارج ملف المشروع ومن ثم إجراء التعديلات اللازمة في ملف drugs.js وكما يلي:

  1. قم بإنشاء حافظة folder في القرص الصلب C أو D أو غيره بشرط أن يملك المستخدم كامل صلاحيات الوصول الى الملفات فيه. وليكن إسمه databases
  2. قم بنسخ ملف قاعدة البيانات draugsDB.db إلى المسار الذي أنشأته في الخطوة السابقة.
  3. ألان نعدل على ملف drugs.js ونضيف مسار قاعدة البيانات الجديد وكما يلي.

const { ipcRenderer } = require("electron");
const path = require("path") // نستورد هذه المكتبة لغرض إنشاء المسار الصحيح لملف قاعدة البيانات
const dbPath= path.join( // ننشيء المسار الجديد ونضعه في ثابت
    path.dirname('c://'), //  مسار القرص الصلب الذي قمنا بإختياره
    '/databases/drugsDB.db' // هنا تضع هذا المسار الذي يشير الى ملف قاعدة البيانات
)

console.log("dbPAth", dbPath)
const sqlite3 = require("sqlite3");
var db = new sqlite3.Database(dbPath, (err) => { // نستعمل ثابت المسار الجديد للإتصال بقاعدة البيانات
  if (err) {
    console.log("could not open db");
  } else {
    console.log("Connected to db");
  }
});
...

لكن عند تثبيت التطبيق عند مستخدم أخر ألن يتغير المسار؟؟؟

  • 0
نشر
بتاريخ 4 دقائق مضت قال Mohamed Lamin Mahmoudi:

لكن عند تثبيت التطبيق عند مستخدم أخر ألن يتغير المسار؟؟؟

في إعداد تنصيب البرنامج، اجعله ينسخ ملف قاعدة البيانات الى مسار مجلد userdata لتكون قابلة للكتابة

  • 0
نشر
بتاريخ 2 ساعات قال Mohamed Lamin Mahmoudi:

لكن عند تثبيت التطبيق عند مستخدم أخر ألن يتغير المسار؟؟؟

تستطيع تثبيت التطبيق على أكثر من جهاز لكن عليك نقل قاعدة البيانات يدوياً الى المسار الصحيح كل مرة.

في حال أردت حلاً أفضل تستطيع إستعمال app.getPath("userData") لكن عليك أولاً نقل الكود المتعلق بالإتصال والتواصل مع قاعدة البيانات الى main.js لأن app غير متاح في renderProcess ولكن في mainProcess. وعندها تستعمل ipcRenderer و events لإرسال طلبات التعديل والقراءة إلى قاعدة البيانات.

هناك حل أخر وهو إلإستمرار بما لديك وإعتماد الحل الذي طرحته لك وبعد أن تعمل packing للتطبيق , تستعمل packager مثل zip  وتستعمل خاصية sfx وتعمل ملف setup يقوم بنقل ملف قاعدة البيانات إلى مسار مسبق التحديد وأيضا يقوم بتنصيب التطبيق لك.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...