Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение ошибки "Missing SQL property" при вставке данных в Access через ADOQuery и Delphi

Delphi , Базы данных , ADO

В процессе работы с базами данных Access и использованием компонента ADOQuery в Delphi может возникнуть ошибка "Missing SQL property", когда вы пытаетесь выполнить операцию вставки данных. Давайте разберемся, как можно решить эту проблему на примере.

Описание проблемы

Пользователь столкнулся с ошибкой "Missing SQL property" при попытке выполнить вставку одной записи в таблицу Access с помощью ADOQuery. Таблица для вставки содержит три поля: StockID (AutoNumber), Description (Text), Cost (Number). В коде использовалась прямая вставка значений, но при выполнении появлялась ошибка.

Пример кода, вызывающего ошибку

adoQuery1.Active := true;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add('INSERT INTO Stock (StockID,Description,Cost) VALUES (4,Cheese,5)');
adoQuery1.Open;
adoQuery1.Close;

Решение проблемы

Для корректной вставки данных следует использовать параметризованный запрос, что позволит избежать многих потенциальных проблем, включая уязвимости типа SQL-инъекций. Вот пример кода, который правильно вставляет запись:

x := StrToInt(txtStockID.Text);
y := txtDescription.Text;
z := StrToCurr(txtCost.Text);

adoQuery1.SQL.Clear;
adoQuery1.SQL.Add('INSERT INTO tblStock (StockID,Description,Cost)');
adoQuery1.SQL.Add('VALUES (:StockID,:Description,:Cost)');
adoQuery1.Parameters.ParamByName('StockID').Value := x;
adoQuery1.Parameters.ParamByName('Description').Value := y;
adoQuery1.Parameters.ParamByName('Cost').Value := z;
adoQuery1.ExecSQL;

Обратите внимание, что свойство Active не должно быть установлено в true, а метод Open не используется для выполнения операций вставки, обновления или удаления (DML). Вместо этого следует использовать метод ExecSQL.

Важные замечания

  • В строковых литералах используйте двойные апострофы (''Cheese'') или функцию QuotedStr('Cheese').
  • Не забудьте удалить строку adoQuery1.Active := true;.
  • Вызов adoQuery1.Close; не требуется после ExecSQL.

Альтернативный подход

Для упрощения выполнения SQL-запросов с параметрами можно использовать вспомогательные функции:

function TCore.ExecQuery(const ASQL: String; const AParamNames: array of string; const AParamValues: array of Variant): Integer;
begin
  // Код функции...
end;

function TCore.GetQuery(const ASQL: String): TDataSet;
begin
  // Код функции...
end;

procedure TCore.SetParamValue(AQuery: TDataSet; const AName: string; const AValue: Variant);
begin
  // Код процедуры...
end;

Использование этих функций позволяет легко выполнить запрос:

Core.ExecQuery(
  'INSERT INTO Stock (StockID, Description, Cost) VALUES (:PStockID, :PDescription, :PCost)',
  ['PStockID', 'PDescription', 'PCost'],
  [4, 'Cheese', 5]);

Использование параметризованных запросов упрощает поддержку кода и повышает его безопасность.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с ошибкой 'Missing SQL property' при попытке вставки данных в базу данных Access через компонент ADOQuery в Delphi, что требует исправления с использованием параметризованных запросов для корректного выполнения операции и повыше


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ADO ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 21:05:36/0.0032830238342285/0