الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعبت من كثرة الانتظار هل هناك حل لمشكلتي :

مغلق
بدأه فادي لطف في 27 يوليو 2001 · 17 رد · 1,917 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخوتي الأعزاء لقد طرحت هذه الأسئلة في عدة منتديات وقد حاول بعض الأخوة الكرام مساعدتي ولكن لم تنجح تلك الطرق فأرجو ممن يستطيع إرشادي لأني بأمس الحاجة إلى هذه الأجوبة .

_ صنعت برنامج باستخدام الDatabase وأردت أن أخزن فيه صور ولكنه لم يتقبل نوع الـ jpg وإنما تقبل نوع الـ Bmp فهل هناك من حل .

_ لدي برنامج قمت بتصميمه ولكن عندما نسخت برنامجي على كومبيوتر ثاني لم يعمل البرنامج وطلب مني أن أعرف له الـ Alias ...! فما أريده هو أن لا يطلب تعريف الـ Alias أي أنسخ البرنامج فقط .

ملاحظة : ( برنامجي يحتوي على جداول الـ Data base )

_كيف يمكن أن أقوم بالعمليات الأربعة ( + , / , - , * ) داخل ال Query بالإضافة لعملية ال Sum

مع الشكر الجزيل لكل من أجابني في السابق ويجيبني الآن .

فادي

#2

اخي العزيز فادي

يمكنك الرجوع الى الأجوبة السابقة ففيها حل لأسئلتك

اما بالنسبة للصور jpg فيمكنك تحويلها الى صور bmp

بواسطة هذا الكود

uses jpeg;

procedure TForm1.Button1Click(Sender: TObject);

var

bmp : TImage;

jpg : TJpegImage;

begin

bmp := TImage.Create(nil);

jpg := TJpegImage.Create;

bmp.picture.bitmap.LoadFromFile ( 'c:picture.bmp' );

jpg.Assign( bmp.picture.bitmap );

jpg.SaveToFile ( 'c:picture.jpg' );

jpg.Free;

bmp.Free;

end;

وتقبل اطيب تحياتي اخوك SUM

#3

اخواني حسب ما فهمت

1- حول الصورةمن jpg ال bmp قبل ان تضعها في القاعدة وذلك بواسطة اي برنامج يقرا jpg مثل فوتوا شوب ......

2-اماعن مشكلة الا Alias

*- انزع الا Alias من كل الجداول وعوضه path

الدليل الذي يحتوي علي قواعد المعطياة

وعند وضع النسخة في جهاز اخر حدد نفس الوخهةpath

*- الQuery يقبل اي عملية فاين المشكلة

ارجو اني وضحت لك شيئ تقبل تحيات اخوك باتي pati

لاانسي ان اشكر اخي sum علي هذا الكود

#4

السلام عليكم ... بالنسبة لل Table

في خاصية DatabaseName اكتب الفهرس الموجود فيه قاعدة البيانات وفي خاصية TableName

اكتب اسم قاعدة البيانات مثلاً

Active= FALSE

DatabaseName = 'c:book'

TableName = 'BOOK5.DBF'

بعد ذلك في حدث Create للفورم

procedure TForm1.FormCreate(Sender: TObject);

begin

Table1.databasename:=extractfilepath(application.exename);

TABLE1.OPEN;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

TABLE1.Active:=false;

end;

بعد ذلك لن يضر الفهرس السابق الذي حددناه لقاعدة البيانات

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

بالنسبة لإجراء العمليات الحسابية على الحقول طبعاً لابد ان تكون الحقول رقمية وهذا مثال موجود في فهرس دلفي 5 في الديمو

C:Program FilesBorlandDelphi5DemosDbMastappmastapp.dpr

لاحظ المثال التالي وطبق عليه

procedure TMastData.ItemsCalcFields(DataSet: TDataSet);

begin

ItemsExtPrice.Value:=ItemsQty.Value * ItemsSellPrice.Value * (100 - ItemsDiscount.Value) / 100;

end;

وأي خدمة تحت أمرك .. وسلامتك.

#5

أخي العزيز sum شكراً لك ولكن :

ما قصدته في سؤالي أني أريد أن أخزن صورة داخل برنامجي ( عن طريق جداول الDataBase ) ولكن المشكلة هي عندما أضع الصورة من نوع bmp فإنها تحفظ داخل البرنامج ولكن إذا كانت من نوع jpg فإنها لاتحفظ داخل البرنامج أي إذا انتقلت إلى صورة ثانية ثم عدة إلى الصورة التي قمت بتخزينها منذ قليل تكون قد اختفت وكأني لم أضعها فما أريده هو أن أخزن الصورة داخل البرنامج من نوع jpg.

#6

اخي العزيز

اولا تكلمنا في هذا الموضوع كثيرا ولكن لا مانع من اعادة توضيح بعض الامور

لماذا تقوم بتخزين الصور داخل قاعدة البيانات ؟

فبهذه الطريقة ستزيد من حجم قاعدة البيانات وهذا سيؤثر سلبا على عملها بصورة كبيره

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

ثالثا اذا كان ولا بد يمكنك فتح الصورة كملف ثنائي وتخزينها في حقل من نوع مذكره Memo ومن ثم تعيد تخذينها كملف على القرص ومن ثم فتحه وبهذه الطريقة ستتمكن من اضافة اي نوع من الملفات

جديد مدونتي الشخصية http://www.badwi.com

ادعو لنا بظاهر الغيب

MyBooksExchange.jpg

#7

شكرا لك أخي العزيز ولكن أرجو منك التوضيح أكثر فأنا مازلت مبتدءا

#8

أولا:

بالنسبة لكلام الأخ محمد بدوي على تخزين الصور ضمن مجلد واستدعاءالصورة

من قبل البرنامج فهذا يؤدي الىامكانية أخذ الصور من قبل مبرمج آخر.

أما بالنسبة لفتح الصورة كملف BINARY وكتابتها ضمن عنصر Memo فهذا أيضا

سوف يعقد عملية التخزين والاسترجاع أثناء عمل البرنامج مما يؤدي الى ابطاء

التنفيذ.

لذا لتخزين صور Jpg لديك الطريقة التالية:

1- انت بحاجة أولا لما يلي 1- عنصر من نوع TJpegImage و عنصر TImage بسيط من

لوحة additional لاظهار الصورة وذلك لأن العنصر

الخاص باظهار الصور في قواعد البيانات لا يتعامل

سوى مع نوع Bmp .(استحدم uses jpeg)

2- استخدم TBlobStream من أجل نقل الصورة من/الى قواعد

البيانات بشرط أن يكون حقل قاعدة البيانات من

من نوع BLOB .

3- استخدم توابع منفصلة لتحميل الصورة عند الانتقال

من سجل لآخر في قاعدة المعطيات.(مثلا حدث OnClick

لزر السجل التالي و السجل السابق)

أو استخدم الحدث التالي

2-

procedure TForm1.btnShowImageClick(Sender: TObject);
var
  bS  : TBlobStream;
  Pic : TJpegImage;
begin
  bS := TBlobStream.Create
        (Table1Picture, bmRead);
  try
    Pic:=TJpegImage.Create;
    try
     Pic.LoadFromStream(bS);
     JpegImage.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
end;

ثانيا:

بالنسبة لنسخ برنامجك الى كمبيوتر آخر(اذا كان البرنامج يتصل بقواعد بيانات

مكتبية) أنصحك باستخدام البرنامج Installshield وهو مخصص من أجل برامج دلفي

ويمكنك من انشاء alias أثناء تنزيل البرنامج على كمبيوترآخر بالاضافة الى

امكانية الضغط والتجزيء الى عدة اقراص.

أرجو أن يكون الجواب مفيدا وأن تطلعني على النتائج ...‏

#9

إلى الأخ العزيز محمد غياث شكراً جزيلاً لك :

ولكن أخي العزيز مازالت المشكلة قائمة فلقد وضعت حقلاً من نوع BLOB ووضعت DBGrid + Image ووضعت Button وكتبت بداخله الكود الذي وضعته لي مشكوراً ولكن وضع لي خطأ عند تشغيل البرنامج على :

var

bS : TBlobStream;

ملاحظة : لقد صنعت الحقول بواسطة عنصر الـ ClientDataSetوذلك لأني لم أجد حقلاً بهذا الاسم في قاعدة البيانات DataBase فهل هنالك خطأ ما

وبالنسبة للسؤال الثاني :

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

فماذا أفعل أرجو منك المساعدة وطول الصبر وشكراً لك .

#10

أخي فادي:

1 - استخدم نوع المعطيات graphic من جداول من نوع paradox

وذلك عند انشاء جدول باستخدتم البرنامج Database Desktop

2 - مشكلة ضهور خطأ عند التعريف var bS : TBlobStream

بسبب عدم استدعاء الوحدة uses dbtables

3 - بالنسبة لنقل البرنامج لايمكنك نسخ برنامجك مع ملفات قواعد

البيانات الى جهاز آخر (حتى وان لم تستخدم alias) لأنك بحاجة

الى BDE وهو ضروري لربط الواجهة مع قاعدة البيانات لذلك أنت

بحاجة الى أحد الخيارات التالية :

1- تنزيل BDE من قرص دلفيز

2- استخدام install shield لتنصيب البرنامج وتوفير امكانية

تنزيل ملفات الربط للـ BDE

3- نسخ ملفات BDE وهي عبارة عن ملفات dll الى الجهاز المستقبل

ملاحظة : يمكنك مراجعة help الخاص ببرنامج install shield لمعرفة

هذه الملفات

#11

مازال البرنامج لا يعمل فلقد وضع لي خطأ على :

bS := TBlobStream.Create(Table1Picture, bmRead);

فوضعت بدل Table1Picture اسم الجدول الموجود لدي : Table1

ولكن مازال يضع خطأ عليها فحذفت هذا السطر فوضع خطأ أيضاً على :

TJpegImage.Picture.Graphic:=Pic;

فأرجو منك طول الصبر .

#12

أخ فادي:

1- بالنسبة للخطأ الأول هو نتيجة لعدم تعريف الحقل الخاص بالصورة

ضمن البرنامج لذا اتبع الخطوات التالية:

1 - لنفرض أن الحقل الخاص بالصورة اسمه ضمن الجدول picture

2 - في دلفي وبعد اضافة كائن الجدول TTable وربطه مع الجدول

الفيزيائي من خلال الخاصتين databasename & tablename

3 - انتقل الى كائن الجدول ضمن form واضغط زر الماوس اليمين

واختر fieldeditor واضف الحقل picture

4 - الآن سيزول الخطأ عند bS := TBlobStream.Create(Table1Picture, bmRead);

2- بالنسبة للخطأ الثاني فهو نتيجة لعدم استبدال Jpegimage باسم كائن من نوع TImage

الذيي أضفته الى form اذا

1 - اضف كائن صورة وأعد تسميته ب jpimage مثلا

2 - اكتب العبارة كما يلي jpimage.picture.graphic := pic;

3 - أو للسهولة قم بتسمية كائن الصورة Jpegimage دون التعديل في العبارة

قم بالتنفيذ الآن وأخبرني ...

#13

لقد قمت بما طلبته مني ولكن مازال الخطأ على bS := TBlobStream.Create (Table1,bmRead);

وأمّا الخطأ الثاني فلقد زال .

#14

أخي فادي :

ليس

bS := TBlobStream.Create (Table1,bmRead);

ولكن

bS := TBlobStream.Create (Table1picture,bmRead);

#15

لقد عمل البرنامج بشكل طبيعي ولكن وضعت صورة في ال image من نوع jpg ثم ضغطت على الزر الذي قد وضعت فيه الكود ولكن أعطاني رسالة ولم يعمل ( أي لم يقبل حفظ هذه الصورة ) .

#16

أخي فادي:

هذا الكود الذكور سابقا هو من أجل القراءة وليس الكتابة

#17

أخي فادي:

هذا الكود المذكور سابقا هو من أجل القراءة وليس الكتابة

#18

أخي العزيز : محمد غياث

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

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

أخي العزيزإذا كان هذا الكود للقرائة فهل هناك كود للحفظ أرجو منك مساعدتي وطول الصبر .

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…