كيف يمكنني تنفيذ أمر SQL مع المعلمة سائل في DBX؟
سؤال
ولدي 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)؟ فمن الممكن أن الخطأ ليس في التعليمات البرمجية. هذا النهج (تغيير مزودي البيانات / سائقين) ساعدني مع بعض المشاكل المحيرة، والتي تبين أن لا يكون الألغام.
لا تنتمي إلى StackOverflow