مشكلة في حفظ قاعدة البيانات
#1
السلام عليكم ورحمة الله تعالى وبركاته
صادفتني مشكلة في حفظ قاعدة اليانات من نوع absolute
كنت استعملها في نسخة الدلفي7 وكانت تعمل بشكل جيد
وعندما استعملتها في نسخة xe8
لا تتم عملية الحفظ وتظهر بانها تمت العملية لكن لا اجد الملف محفوظ
مع العلم ان مسار قاعدة البيانات هو
projrct1\mirnam\sbase\teste.abs
وهذا هو الكود المستعمل
كود :
procedure TRestoreBase.N1Click(Sender: TObject); var Pdir:string; begin RestoreBase.Caption:='حفظ المعطيات'; GroupBox1.Caption:='إختار الشهر والسنة المراد حفظهما'; Pdir:='..\..\sbase\Archives'; CreateDir(Pdir); Sleep(200); if DirectoryExists('sbase\Archives') then begin DM.OnDestroy(sender); copyfile(pchar('teste.ABS'),pchar('sbase\Archives\'+ComboBox1.Text+SpinEdit1.text),false); end else begin ForceDirectories(Pdir); end; DM.OnCreate(sender); Sleep(500); showMessage('تمت عمليةالأرشفة بنجاح'); Close; end;
الرد
#2

وعليكم السلام ورحمة الله
جرب تغيير String بAnsiString
شيئ مثل (لم اجرب الكود)

كود :
procedure TRestoreBase.N1Click(Sender: TObject); var Pdir:AnsiString; begin RestoreBase.Caption:='حفظ المعطيات'; GroupBox1.Caption:='إختار الشهر والسنة المراد حفظهما'; Pdir:='..\..\sbase\Archives'; CreateDir(Pdir); Sleep(200); if DirectoryExists('sbase\Archives') then begin DM.OnDestroy(sender); copyfile(pChar('teste.ABS'),pChar('sbase\Archives\'+ComboBox1.Text+SpinEdit1.text),false); end else begin ForceDirectories(Pdir); end; DM.OnCreate(sender); Sleep(500); showMessage('تمت عمليةالأرشفة بنجاح'); Close; end;
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#3
السلام عليكم انه يشير الى خطأ اثناء compilie وهذا هو الخطأ
[dcc32 Erreur] U_menu.pas(49): E2010 Types incompatibles : 'PWideChar' et 'PAnsiChar'
الرد
#4
حسنا
اعد AnsiChar الى pChar
قمت بتعديل الكود فوق
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#5
لازالت المشكلة كما كانت في الأول

هل هناك طريقة اخرى لعمل نسخة احتياطية لقاعدة البيانات في مجلد اخر
مع العلم ان قاعدة البيانات موضوعة في مجلد داخل مجلد المشروع
للتوضيح :
المجلد الأول اسمه mirnam
وبداخله مجلد المشروع وإسمه project1
ويوجد بداخل مجلد المشروع مجلد اخر المتواجد به قاعدة البيانات واسمه sbase
كما يوجد بايضا داخل مجلد المشروع مجلد اخر والمراد بحفظ النسخة الإختياطية لقاعدة البيانات واسمه Archives
اما بالنسبة لقاعدة البيانات teste.abs ستحمل اسم اخر ناتج عن المكون Combobox1 و المكون spinedit1 اثناء عملية النسخ وتخزن في المجلد Archives
الرد
#6
السلام عليكم, أخ medreg, لم توضح جيدًا المسار الذي تعمل معه.
 لم في المرة الأولى
PHP كود :
Pdir:='..\..\sbase\Archives'; 
ثم في الشرط لم تستخدم المتغير pdir, وقارنت بـ:
PHP كود :
'sbase\Archives' 

هل كنت تقصد ب ..\..\, أن تخرج من المجلد win32\debug؟؟
هكذا لن يتحقق الشرط, لأنه دائما يقوم بانشاء المجلد بالرجوع مجلدين للخلف.


أيضًا, CreateDir, لا يمكنها إنشاء أكثر من مجلد, إستعمل ForceDirectories.

جرب هكذا.

كود :
procedure TRestoreBase.N1Click(Sender: TObject); var     Pdir:string;     backupDBname: string; begin     Pdir:='..\..\sbase\Archives\'; //أو 'sbase\Archives\'     backupDBname := ComboBox1.Text + SpinEdit1.text;          RestoreBase.Caption:='حفظ المعطيات';     GroupBox1.Caption:='إختار الشهر والسنة المراد حفظهما';     Sleep(200);          ForceDirectories(Pdir);          if DirectoryExists(Pdir) then     begin         DM.OnDestroy(sender);         if copyfile(pchar('teste.ABS'),pchar(Pdir + backupDBname), false) then         begin             Sleep(500);             ShowMessage('تمت عمليةالأرشفة بنجاح');         end;         DM.OnCreate(sender);     end;     Close; end;
الرد
#7

السلام عليكم
افهم مما سبق ان قاعدة البيانات
\mirnam\sbase\teste.abs
المشروع
\mirnam\project1.exe
النسخ الاحتياطية تكون في
\mirnam\sbase\archives
هل هذا صحيح ؟
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#8
(18-02-2019, 10:34 AM)B.M.AbdelAziZ كتب :
السلام عليكم
افهم مما سبق ان قاعدة البيانات
\mirnam\sbase\teste.abs
المشروع
\mirnam\project1.exe
النسخ الاحتياطية تكون في
\mirnam\sbase\archives
هل هذا صحيح ؟

بل قاعدة البيانات تكون في
Mirnam\Project1\sbase\teste.abs\
المشروع
Mirnam\Project1\project1.exe
النسخ الإحتياطية تكون في
Mirnam\Project1\sbase\archives\
جزاكم الله عنا كل خير
الرد
#9
كود :
procedure TRestoreBase.N1Click(Sender: TObject); var sPath,Pdir:string; begin RestoreBase.Caption:='حفظ المعطيات'; GroupBox1.Caption:='إختار الشهر والسنة المراد حفظهما'; sPath:=ExtractFilePath(ParamStr(0)); Pdir:=sPath+'sbase\Archives'; CreateDir(Pdir); Sleep(200); if DirectoryExists(Pdir) then begin DM.OnDestroy(sender); copyfile(pchar(sPath+'teste.ABS'),pchar(Pdir+'\'+ComboBox1.Text+SpinEdit1.text),false); end else begin ForceDirectories(Pdir); end; DM.OnCreate(sender); Sleep(500); showMessage('تمت عمليةالأرشفة بنجاح'); Close; end;
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#10
(19-02-2019, 08:26 AM)B.M.AbdelAziZ كتب :
كود :
procedure TRestoreBase.N1Click(Sender: TObject); var sPath,Pdir:string; begin RestoreBase.Caption:='حفظ المعطيات'; GroupBox1.Caption:='إختار الشهر والسنة المراد حفظهما'; sPath:=ExtractFilePath(ParamStr(0)); Pdir:=sPath+'sbase\Archives'; CreateDir(Pdir); Sleep(200); if DirectoryExists(Pdir) then begin DM.OnDestroy(sender); copyfile(pchar(sPath+'teste.ABS'),pchar(Pdir+'\'+ComboBox1.Text+SpinEdit1.text),false); end else begin ForceDirectories(Pdir); end; DM.OnCreate(sender); Sleep(500); showMessage('تمت عمليةالأرشفة بنجاح'); Close; end; لازالت المشكلة قائمة بالنسبة لإنشاء المجلد المسمى archives العملية تمام لكن لا يوجد بداخله اي شيئ يعني قاعدة البيانات لم يتم حفظها
الرد


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


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