ماذا يحدث إذا اتصلت بارامبينام لمعلمة غير موجودة?
-
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);
لا يتم تعديل الاستعلام تلقائيا ، عليك أن تفعل ذلك بنفسك.
في قصاصة الأولى ، لم يتم تعريف بارامتيب و إنبوتيب ، يمكنك تغيير ذلك في إيد عن طريق الوصول إلى قائمة المعلمة (بارامس) محرر الممتلكات ، وتحديث تلك القيم.
لا تؤدي إضافة معلمة جديدة إلى تغيير الاستعلام.عليك أن تفعل ذلك بنفسك.