حفظ قاعدة البيانات Absolute database
#1
السلام عليكم و رحمة الله تعالى و بركاته
اخوتي الاعزاء صادفتني هذه المشكلة في حفظ قاعدة البيانات
لم افهم هل المشكل في المسار ام في الكود من الرغم انني عندما اطبقها
في تطبيق صغير تنجح معي و يحفظ لي قاعدة البيانات و عند تطبيقها على برنامجي لا تعمل اي شيئ

هذا الكود الاول
كود :
procedure TFLaCloture.SpeedButton2Click(Sender: TObject); begin Sleep(1000); data.OnDestroy(sender); copyfile(pchar('..\..\Pstock\Stock.ABS'),pchar('..\..\Pstock\Stock')+(Edit1.Text)+ '.ABS');//,False); data.OnCreate(sender); sleep(1000); showMessage('l''Opération de sauvgarde est réussie avec succés' ); FLaCloture.Close; end;


و الكود الثاني


كود :
function CopyFile(Source, Destination: String ) : boolean; var fos : TSHFileOpStruct; begin FillChar(fos, SizeOf(fos),0); with fos do begin wFunc := FO_COPY; pFrom := PChar(Source+#0); pTo := PChar(Destination+#0); fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT; end; result := (0 = ShFileOperation(fos)); end; procedure TFLaCloture.MaCloture; begin Chemin := ExtractFilePath(Application.ExeName); screen.cursor := crHourGlass; CopyFile(Chemin + '..\..\Pstock\Stock.ABS',Chemin + '..\..\Pstock\Stock' + Edit1.Text + '.ABS'); Sleep(1000); Sleep(1000); ShowMessage('Terminer...'); screen.cursor := crDefault; close; end; procedure TFLaCloture.SpeedButton2Click(Sender: TObject); begin Sleep(1000); data.OnDestroy(sender); copyfile(pchar('..\..\Pstock\Stock.ABS'),pchar('..\..\Pstock\Stock')+(Edit1.Text)+ '.ABS');//,False); data.OnCreate(sender); sleep(1000); showMessage('l''Opération de sauvgarde est réussie avec succés' ); FLaCloture.Close; end; procedure TFLaCloture.SpeedButton3Click(Sender: TObject); begin Chemin := ExtractFilePath(Application.ExeName); if FileExists(Chemin+ '\'+ 'Stock'+ Edit1.Text + '.ABS') then begin messagedlg('L''exercice '+ Edit1.Text + ' est déjà clôturer',mtWarning,[mbYes],0); end else if messagedlg('Confirmer la Cloture de l''exercice '+ Edit1.Text +' ? ',mtconfirmation,[mbYes,mbNo],0) = mrYes then begin MaCloture; end; end;
الرد
#2
وعليكم السلام ورحمة الله وبركاته
إقتباس :في تطبيق صغير تنجح معي و يحفظ لي قاعدة البيانات و عند تطبيقها على برنامجي لا تعمل اي شيئ
وضح مالذي يحدث أو رسالة الخطأ!
إقتباس :من فضلكم اخوتي اتوسم فيكم ال****** ان شاء الله
انتبه:
11- هناك كلمات محظورة عند كتابتها تظهر على شكل نجوم ***** ، احرص على عدم ظهورها لكي لا تحذف مشاركتك
الرد
#3
السلام عليكم و رحمة الله تعالى و بركاته
اخي كاش و احد المشكلة انها لا تظهر اي رسالة خطأ

وحاولة ايضا بتطبيق هذا الكود لم ينجح معي و هذا بالمرفق ان شاء الله

و هذه قاعدة البيانات


الملفات المرفقة
.rar   Cloturer.rar (الحجم : 5.24 ك ب / التحميلات : 93)
.rar   Stock.rar (الحجم : 3.57 ك ب / التحميلات : 104)
الرد
#4
آسف، لا أدري بالضبط أين الخلل
ليست لدي المكونات للتجريب لا أدري أي نسخة دلفي تستخدم...
المهم...
1- لا تستخدم توابع Shell لنسخ الملفات إن لم تكن تتحكم فيها بشكل جيد
أيضا افحص الناتج لتحديد موضع الخلل، مثال:
كود :
if copyfile('e:\text.txt','d:\bakcup\'+Edit1.Text+ '.txt') then ShowMessage('Opération terminé!') else ShowMessage('Erreur de copie!')
بهذه الطريقة -على الأقل- تعرف أين الخطأ في (أو ليس في) تابع النسخ...

2- استخدمت الأعلام FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT هل تعرف جيدا معناها؟
إذا لم تكن بحاجة لنافذة نسخ الملفات، فلِم لا تستخدم تابع API مباشرة (وهو ما أنصحك به)، مثال:
كود :
function MyCopyFile(const Source, Dest: string; Overwrite: Boolean = False): Boolean; {Usage: if MyCopyFile('c:\text.txt', 'd:\') then } begin Result := CopyFile(PChar(Source), PChar(IncludeTrailingPathDelimiter(Dest)+ ExtractFileName(Source)), Overwrite); end;

3- التابع الذي استخدمت ينسخ الملفات بشكل صحيح...
فقط تأكد من صحة المسارات (كلاها)
ليس بالعين المجردة، وإنما بشيء مثل:
كود :
if not FileExists('..\..\Pstock\Stock.ABS') then ShowMessage('Fichier introuvable!');
تتبع الخطأ بهذه المنجهة:
- تأكد من صحة عمل الدالة
- تأكد من سلامة المسارات
- افحص الناتج دائما (if... then)
بالتوفيق.
الرد
#5
السلام عليكم و رحمة الله تعالى و بركاته
على كل حال انا اقدر تعبك معي مشكور اخي كاش واحد اظن ان المشكل
في DataModule
لانني كما سبق الذكر قد جربتها قبل في تطبيق صغير و لم استعمل فيه
العمليات و البرمجة وضعت فقط table 2
هل هذا سياثر عل قاعدة البيانات
المهم مشكور اخي كاش و احد
ساحاول ان شاء الله ايجاد الخلل
الرد
#6
إقتباس :في datamodule
تأكد أيضا من إمكانية الوصول إلى الملف من قبل النظام
والأفضل غلق الاتصال بقاعدة البيانات قبل النسخ.
بالتوفيق.
الرد
#7
السلام عليكم و رحمة الله تعالى و بركاته

اخي كاش واحد بالنسبة datamodule
قد قمت باغلاقها و ذالك في

كود :
data.OnDestroy(sender);
واعادت فتحها
كود :
data.OnCreate(sender);
اما بالنسبة من إمكانية الوصول إلى الملف من قبل النظام
فهذا لم افهمه
الرد
#8
السلام عليكم ورحمة الله تعالى وبركاته
ربما أخي يفيدك هذا
كود للحفظ
كود :
procedure TForm1.MenuItem3Click(Sender: TObject); begin Sleep(1000); DModule.OnDestroy(sender); copyfile(pchar('teste.ABS'),pchar(Form2.ComboBox1.Text+Form2.SpinEdit1.Text),False); DModule.OnCreate(sender); Sleep(10000); showMessage('تمت عملية الحفظ بنجاح'); end;

كود الإسترجاع
كود :
procedure TForm4.BitBtn1Click(Sender: TObject); begin Sleep(1000); DModule.OnDestroy(sender); copyfile(pchar(ComboBox1.Text+SpinEdit1.text),pchar('teste.ABS'),false); DModule.OnCreate(sender); Sleep(10000); showMessage('تمت علية الإسترجاع بنجاح'); Close; end;
ملاحظة
يجب ان تكون قاعدة البيانات موجودة داخل البرنامج
وبالتوفيق
الرد
#9
السلام عليكم و رحمة الله تعالى و بركاته
مشكور اخي لكن ليس هذا هو المطلوب
الرد
#10
إقتباس :قد قمت باغلاقها و ذالك في
ليس كذلك، يكفي غلق TABSDatabase ثم إعادة فتحه بعد النسخ...

منذ قليل ثبتت المكونات وقمت بالنسخ...
مر كل شيء على ما يرام وتم النسخ بسلام
باستخدام الدالة التي أعطيتك في المشروع الذي أرفقته
ودون الحاجة أصلا لغلق قاعدة البيانات
تم التجريب على Delphi 7

المثال مرفق فقط ضع قاعدة البيانات في المجلد Data
ثم أطعلنا على النتيجة Smile
بالتوفيق.


الملفات المرفقة
.rar   Cloture_01-10-2010_15-15-07_Delphi4arab.rar (الحجم : 2.71 ك ب / التحميلات : 145)
الرد


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


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