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

رسالة تخرج لي أثناء تنفيذ تعليمة الترقيم التلقائي

بدأه أمناينلواد في 21 أكتوبر 2008 · 12 رد · 1,416 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أثناء تنفيذي لكود الترقيم التلقائ للحقل num من نوع integer تخرج لي الرسالة التالية فما سببها

procedure TForm1.Button4Click(Sender: TObject); 
var a:integer;
begin
t1.last;
a:=t1.fieldvalues['num']+1;
t1.insert;
t1.fieldvalues[' num ']:=a;

مع العلم أني أستعمل قاعدة البيانات باردوكس

شكرا

post-138793-1224538489_thumb.jpg

تم تعديل هذه المشاركة بواسطة أمناينلواد في 21 أكتوبر 2008 في 00:39

#2

أخي الكريم هل تأكدت أن

t1.fieldvalues['num']

ليست فارغة :huh:

post-143282-1224540823_thumb.jpg

تم تعديل هذه المشاركة بواسطة rober في 21 أكتوبر 2008 في 01:15

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#3

السلام عليكم...

"سبقني rober بينما كنت أجهز الرد"

رغم أني لا أعرف الفرنسية إلا قليلاً فأعتقد أن الرسالة تقول: لا يمكن تحويل الـ Variant المحتوي على Null إلى قيمة من النوع Integer.

و يحدث هذا الخطأ عند السطر: a := t1.fieldvalues['num'] + 1

و السبب هو أن الحقل num في السجل الأخير لا يحتوي على أي قيمة (أي أنه فارغ، و هو ما يعني أن قيمته هي NULL). و القيمة Null لا يمكن تحويلها إلى قيمة من النوع Integer.

الحل:

أولاً: بما أن هذا الحقل حقل عددي و تعتمد عليه في بعض الحسابات فينبغي أن لا تسمح بوجود قيم Null فيه، أي يجب إدخال قيمة عددية بما في ذلك الصفر.

ثانياً: لتجنب مقابلة هذه الحالة حتى صدفة، تأكد من أن الحقل لا يحتوي على Null:

  1.  
  2. if t1.FieldByName('num').IsNull then
  3. a := 1
  4. else
  5. a := t1['num'] + 1;
  6.  

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#4
najy_zl كتب:

و يحدث هذا الخطأ عند السطرأولاً: بما أن هذا الحقل حقل عددي و تعتمد عليه في بعض الحسابات فينبغي أن لا تسمح بوجود قيم Null فيه، أي يجب إدخال قيمة عددية بما في ذلك الصفر.

Null:

[/quote

جزاكم الله خير على المعلومة

فقد حل جزء من المشكلة ولكن الآن ادخال القيمة الى الجدول

فالحقل num هو للترتيب فقط وهو المفتاح

اذا فيجب اسناد القيمة aالى الحقل وجعلت ذلك من خلال الكود التالي

if t1.FieldByName('num').IsNull then  
  a := 1
  else   
 a := t1['num'] + 1;
t1.insert;
t1.fieldvalues[' num ']:=a;

ولكن خرجت رسالة غير التي من قبل تفيد بأن الحقل num ليس موجود

تم تعديل هذه المشاركة بواسطة أمناينلواد في 21 أكتوبر 2008 في 07:58

#5

السلام عليكم...

إذا كان الكود لديك كما يبدو في مشاركتك تماماً فأعتقد أن المشكلة هي وجود فراغات قبل و بعد اسم الحقل داخل علامات التنصيص:

  1. t1.fieldvalues[' num '] := a; // خطأ
  2. t1.fieldvalues['num'] := a; // صح
  3.  

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#6

يا ريت يا أخي أمناينلواد لو ترفق مثال توضح فيه المشكلة حتى لا نتحزر في كل مرة على حل مختلف

و بهذا تكون حللت مشكلتك بشكل أسرع :blush:

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#7

السلام عليكم

شكرا جزيلا أخي روبير على المساعدة

فرأي أخينا ناجي كان صائبا لقد تركت الفرغات وبعد حذفها أصبح كل شيئ تمام

#8
أمناينلواد كتب:
فرأي أخينا ناجي كان صائبا لقد تركت الفرغات وبعد حذفها أصبح كل شيئ تمام

حقك علي يا معلم لأني لم أنتبه إلى وجود الفراغات :blush:

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#9

السلام عليكم

اضن ان ابسط الطرق و اصغرها هى :

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
   table1['..']:=DataSet.RecNo;
end;
#10

بارك الله فيك

أخي الكريم

أود لو فسرتها قليلا

#11

لو تسمحلي أخ هاني

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

أي :

لنفرض أن الجدول يحتوي على 56 سجل و قمت بإضافة سجل جديد سيكون رقم السجل = 57 قم بإستخدام هذا الرقم ليكون هو قيمة خلية الترقيم

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

بالتفصيل :

لنفرض وجود 25 سجل فيه كل خلية من حقل الترقيم تأخذ قيمة هي رقم السجل و قام المستخدم بحذف السجل رقم 10 فيصبح عدد السجلات 24 عند إضافة سجل جديد سيكون رقمه 25 بالتالي نكون حصلنا على سجلين يأخذن القيمة 25 في حقل الترقيم

أمل أن لا أكون قد أخطأت في الشرح

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#12

بارك الله في علمك أخب روبير

نعم سنتنج مشاكل كثيرة جدا فما لو كان جدول فيه 1000 سجل وتوجد عدة جداول مرتبطة به

سيكون هناك فوضى كبيرة

بارك الله فيك وجزاك الله خيرا على الفائدة

#13

لماذا لا تغي مباشرة نوع الحقل num على مستوى table من ...الى + اي incrementation وهكذا قد تكون تخلصت نهائيا من هذا المشكل

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

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

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

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

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