FireDAC компонент FDUpdateSQL как использовать в связке с FDQuery?

SJenek
Дата: 07.05.2015 10:19:29
Добрый день!
Мне нужно изменять выборочно отдельные ячейки таблицы. FDQuery как я понял может это сделать в связке с FDUpdateSQL, но как это реализовать не пойму. Примеры в документации FireDac скудны.
Я делаю
MainForm->FDUpdateSQL1->ModifySQL->Add(UPDATE !Table SET !Attribute = :NEW_AttributeOpen WHERE !ID = :OLD_ID);
MainForm->FDUpdateSQL1->Commands[arUpdate]->MacroByName("Table")->AsRaw = "dbo.TableBarrier";
MainForm->FDUpdateSQL1->Commands[arUpdate]->MacroByName("Attribute")->AsRaw = "AttributeOpen";
MainForm->FDUpdateSQL1->Commands[arUpdate]->MacroByName("ID")->AsRaw = "ID";
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("NEW_AttributeOpen")->ParamType = ftInteger;
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("NEW_AttributeOpen")->DataType = ptInput;
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("OLD_ID")->ParamType = ftInteger;
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("OLD_ID")->DataType = ptInput;
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("NEW_AttributeOpen")->AsInteger = 1;
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("OLD_ID")->AsInteger = 1;
Как теперь это передать в FDQuery и выполнить непонятно!
Буду благодарен за любую помощь.
RenVold
Дата: 18.08.2015 13:46:49
SJenek,
Мне кстати, тоже не понятно.

Бросил компоненты FDQuery + FDUpdateSQL, вроде с помощью встроенного редактора FDUpdateSQL сгенерировал скрипт. А как его теперь использовать через FDQuery - не пойму.

Есть примеры их связывания?
Гхостик
Дата: 18.08.2015 13:58:42
2 SJenek:

Нафига тебе макрос с именем таблицы если оно не меняется? Нафига заполнять это в run-time?

Применить - так:
FDQuery1->Edit();
FDQuery1["AttributeOpen"] = 1;
FDQuery1->Post();
Гхостик
Дата: 18.08.2015 14:00:15
Вот это пропустил:
MainForm->FDUpdateSQL1->Commands[arUpdate]->ParamByName("OLD_ID")->AsInteger = 1;

Вот так, перед Edit():

FDQuery1->Locate("ID", 1, []);
RenVold
Дата: 19.08.2015 09:50:35
Оказывается, из справки.... [url=]http://docwiki.embarcadero.com/RADStudio/XE5/en/Editing_Questions_(FireDAC)[/url]

Q1: When is it necessary to use TFDUpdateSQL?

A: FireDAC generates updating SQL commands automatically, when the original SQL command is a simple SELECT or a SELECT with JOIN, where a single table preserves the primary key fields. So, the TFDUpdateSQL usage is optional. TFDUpdateSQL is required when:
The original SQL command is not a SELECT command (for example, stored procedure returning result sets).
The original SELECT command does not preserve the primary key (for example, join several tables, have DISTINCT or GROUP BY clauses).
An application needs non-standard update SQL command (for example, the application posts updates using stored procedure calls).

Из вольного перевода я понял так, что не всегда компонент целесообразно использовать в проекте. Использовать только тогда, когда надо внести изменения в полученном результирующем наборе данных, в результате очень сложных запросов из многих таблиц и или вьюшек, и в последствии их потом закоммитить (изменения)

Т.е. если этот компонент использовать для простейших SELECT, UPADATE, INSERT - это расстрел из пушек по воробью.