Вставить данные в базу данных [Delphi] - PullRequest
5 голосов
/ 26 февраля 2010

Я пытаюсь использовать компонент TAdoTable,

  • В форме Создать я вызываю .Append () и в кнопке я вызываю .Post ()

но он загружает всю таблицу! Мне не нужно ничего загружать, просто нужно вставить строку в эту таблицу.

Мне было интересно, есть ли «хороший способ» вставки данных в базу данных с помощью Ado, я уже пытался использовать «ручной» подход с TAdoCommand, но мне он не подходит

  • Я генерирую запрос INSERT, используя Format (), и все строковые поля экранируются с помощью QuotedStr ()

Заранее спасибо!

Артур.

Ответы [ 4 ]

6 голосов
/ 26 февраля 2010

Вы можете использовать набор данных TADOD (или TADOQuery).

Иногда я делаю это, устанавливая CommandText так, чтобы он возвращал 0 записей из таблицы, то есть SELECT TOP 0 * FROM [table], затем использую .Append и .Post

Но лично я предпочитаю писать SQL, например, с помощью TADOCommand

6 голосов
/ 26 февраля 2010

Используйте объект TADOQuery, если вам не нужно отображать данные таблицы.

В основном:

  • Используйте TADOQuery.SQL.Text для установки команды SQL
  • Используйте метод TADOQuery.ExecSQL для запуска команды SQL
2 голосов
/ 27 февраля 2010

Вы также можете использовать компонент TADOCommand и заставить его выполнить определенную команду SQL. Если вы обнаруживаете, что выполняете одну и ту же команду снова и снова (например, вставки в таблицу), рассмотрите возможность использования параметров, а не прямого изменения SQL для каждого вызова. Параметры просты в использовании, просто поместите: PARAMNAME в свой sql, а затем используйте объект параметров в компоненте ado, который вы используете, чтобы установить значение. Например:

Предполагается, что CommandText компонента TAdoCommand содержит "INSERT INTO TABLENAME (FIELD1) VALUES (:FIELDVALUE1)"

AdoCommand1.Parameters.ParamByName('FIELDVALUE1').Value := 'TEST'
AdoCommand1.Execute;

Когда вышеупомянутый sql выполняется, тогда строка "TEST" будет записана в FIELD1.

1 голос
/ 27 февраля 2010
var
  CountVar: Integer;

begin

  TADOConnection1.Execute(ASQLInsertStatement, CountVar, [adExecuteNoRecords]);

end;
...