كيف يمكنني تنفيذ أمر SQL مع المعلمة سائل في DBX؟

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

  •  11-07-2019
  •  | 
  •  

سؤال

ولدي TSqlDataSet الذي يحتوي على حقل النقطة، ولست بحاجة للحصول على بيانات هذا الحقل سائل في حال BeforeUpdateRecord مقدم وتنفيذ أمر التحديث، لقد حاول هذا:

Cmd := TSQLQuery.Create(nil);
try
  Cmd.SQLConnection := SQLConnection;
  Cmd.CommandText := 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID';
  Cmd.Params.CreateParam(ftBlob, 'PIMAGE ', ptInput).Value := DeltaDS.FieldByName('IMAGE').NewValue; //blob field
  Cmd.Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
  Cmd.ExecSQL;
finally
  Cmd.Free;
end;

وعندما تنفيذ أن أحصل على EDatabaseError مع رسالة: "لا قيمة للPIMAGE المعلمة

ما أنا في عداد المفقودين؟

هل كانت مفيدة؟

المحلول

وردا على سؤالي الخاص، والطريقة الصحيحة للقيام بذلك هو ما يلي:

const
  SQL = 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID;';
var
  Params: TParams;
begin
  Params := TParams.Create(nil);
  try
    Params.CreateParam(ftBlob, 'PIMAGE', ptInput).AsBlob := DeltaDS.FieldByName('IMAGE').NewValue;
    Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
    SQLConnection.Execute(SQL, Params);
  finally
    Params.Free;
  end;
end;

نصائح أخرى

هل حاولت اختبار مع سائق آخر (على سبيل المثال ODBC)؟ فمن الممكن أن الخطأ ليس في التعليمات البرمجية. هذا النهج (تغيير مزودي البيانات / سائقين) ساعدني مع بعض المشاكل المحيرة، والتي تبين أن لا يكون الألغام.

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