ماذا يحدث إذا اتصلت بارامبينام لمعلمة غير موجودة?

StackOverflow https://stackoverflow.com/questions/8880091

  •  28-10-2019
  •  | 
  •  

سؤال

أنا جديد جدا على دلفي وتلقيت الجزء التالي من التعليمات البرمجية (تركت بعض الأجزاء غير ذات الصلة) التي أحاول أن أفهم ما يفعله:

object SelectCosts: TIBQuery
    SQL.Strings = (
      'SELECT * FROM costs '
      'WHERE code = :code')
    ParamData = <
      item
        DataType = ftUnknown
        Name = 'code'
        ParamType = ptUnknown
      end>
  end

في ملف آخر ، يتم استخدام هذا الاستعلام ، ولكن تتم إضافة معلمة غير محددة في الاستعلام.

DM_HRV.SelectCosts.ParamByName('part').Value := 1;

هل هذه المعلمة 'part' تغيير أي شيء عن اختيار جعلت?وبعبارة أخرى:هو الاستعلام سكل تغيرت تلقائيا إلى ما يلي?

'SELECT * FROM costs '
  'WHERE code = :code'
  'AND part = :part'
هل كانت مفيدة؟

المحلول

وهذا يعني أنه قد يتم تغيير بيان سكل في وقت التشغيل.لذلك عند استخدام هذا الاستعلام يحتوي سكل بالفعل AND part = :part.

إذا كان بيان سكل لا يحتوي على هذه المعلمة الإضافية part, ، سيتم رفع استثناء عند التعيين ParamByName('part').Value := 1.

أفترض أنك لم تخلط SelectCosts المرجع (الذي هو في DM_HRV وليس مارك ألماني آخر).

نصائح أخرى

لا تضيف العبارة التالية في مشاركتك معلمة ، بل تحدد قيمتها:

DM_HRV.SelectCosts.ParamByName('part').Value := 1;

لإضافة معلمة في وقت التشغيل ، استخدم كريتابارام كما يلي:

if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then
   DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput);

لا يتم تعديل الاستعلام تلقائيا ، عليك أن تفعل ذلك بنفسك.

في قصاصة الأولى ، لم يتم تعريف بارامتيب و إنبوتيب ، يمكنك تغيير ذلك في إيد عن طريق الوصول إلى قائمة المعلمة (بارامس) محرر الممتلكات ، وتحديث تلك القيم.

لا تؤدي إضافة معلمة جديدة إلى تغيير الاستعلام.عليك أن تفعل ذلك بنفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top