المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: رسالة تخرج لي أثناء تنفيذ تعليمة الترقيم التلقائي
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي Borland Delphi
أمناينلواد
السلام عليكم
أثناء تنفيذي لكود الترقيم التلقائ للحقل num من نوع integer تخرج لي الرسالة التالية فما سببها
كود
procedure TForm1.Button4Click(Sender: TObject);
var a:integer;
begin
t1.last;
a:=t1.fieldvalues['num']+1;
t1.insert;
t1.fieldvalues[' num ']:=a;


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

كود
t1.fieldvalues['num']


ليست فارغة huh.gif
najy_zl
السلام عليكم...

"سبقني 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.  


نرجو الاستفادة و السلام.
أمناينلواد
[quote name='najy_zl' date='Oct 21 2008, 02:16 AM' post='883772']

و يحدث هذا الخطأ عند السطرأولاً: بما أن هذا الحقل حقل عددي و تعتمد عليه في بعض الحسابات فينبغي أن لا تسمح بوجود قيم 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 ليس موجود
najy_zl
السلام عليكم...

إذا كان الكود لديك كما يبدو في مشاركتك تماماً فأعتقد أن المشكلة هي وجود فراغات قبل و بعد اسم الحقل داخل علامات التنصيص:
انسخ الكود
  1. t1.fieldvalues[' num '] := a; // خطأ
  2. t1.fieldvalues['num'] := a; // صح
  3.  


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

rober
يا ريت يا أخي أمناينلواد لو ترفق مثال توضح فيه المشكلة حتى لا نتحزر في كل مرة على حل مختلف
و بهذا تكون حللت مشكلتك بشكل أسرع blush.gif
أمناينلواد
السلام عليكم
شكرا جزيلا أخي روبير على المساعدة
فرأي أخينا ناجي كان صائبا لقد تركت الفرغات وبعد حذفها أصبح كل شيئ تمام
rober
إقتباس(أمناينلواد @ Oct 23 2008, 01:42 AM) *
فرأي أخينا ناجي كان صائبا لقد تركت الفرغات وبعد حذفها أصبح كل شيئ تمام

حقك علي يا معلم لأني لم أنتبه إلى وجود الفراغات blush.gif
hanitaieb
السلام عليكم
اضن ان ابسط الطرق و اصغرها هى :
كود
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
   table1['..']:=DataSet.RecNo;
end;

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

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

أمل أن لا أكون قد أخطأت في الشرح
أمناينلواد
بارك الله في علمك أخب روبير
نعم سنتنج مشاكل كثيرة جدا فما لو كان جدول فيه 1000 سجل وتوجد عدة جداول مرتبطة به
سيكون هناك فوضى كبيرة
بارك الله فيك وجزاك الله خيرا على الفائدة
kamakam
لماذا لا تغي مباشرة نوع الحقل num على مستوى table من ...الى + اي incrementation وهكذا قد تكون تخلصت نهائيا من هذا المشكل
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.