Как я могу обновить поле BLOB-объекта на сервере

У меня есть приложение клиент/сервер, созданное с использованием DataAbstract и RemObjects, где клиент передает двоичную переменную серверу для размещения в БД. Функция сервера выглядит так

function SetItemContent(const anItemId: UnicodeString; const anItemContent: Binary): Boolean;

Но я не знаю, как получить доступ к таблице с сервера, чтобы сохранить эту двоичную переменную в большом двоичном объекте. Я также не могу найти ссылку в документации DA.


person jonjbar    schedule 11.06.2011    source источник


Ответы (1)


Вы можете использовать TDALocalDataAdapter в модуле реализации службы и подключить TDAMemDataTable. Затем вы можете использовать Dynamic Where (или параметризованную DataTable), чтобы найти и обновить свою запись, используя обычные методы TDataset. (т.е. вставить, отредактировать, опубликовать)

Любое обновление следует окружать транзакцией. Используйте Connection.BeginTransaction, RollbackTransaction и CommitTransaction.

Изменить ====

Вы также можете использовать IDASQLCommand: используйте метод Connection.NewCommand. Вы можете либо указать этот SQL напрямую в качестве параметра, либо (лучше IMHO++) указать имя параметризованной команды обновления/вставки SQL, которую вы создали в схеме.

Я предполагаю, что вам все еще нужно знать, нужно ли вставлять/обновлять, чтобы вы могли использовать IDADataset из метода Connection.NewDataset, чтобы установить это с помощью MyDataset.IsEmpty. Сначала создайте набор данных в схеме или передайте SQL.

Пункт об использовании транзакций остается в силе для этого метода.

++ лучше, потому что это позволяет вам лучше поддерживать несколько серверных частей БД, используя несколько операторов для каждого объекта данных или команды.

person Stuart    schedule 11.06.2011
comment
Я ожидал чего-то более простого: создание TDAMemDataTable кажется слишком сложным для такой простой задачи. Я приму ваш ответ, если никто не придумает лучший способ. - person jonjbar; 12.06.2011
comment
После некоторого тестирования я пришел к тому же выводу, что и вы. Большое спасибо за ваш ответ. - person jonjbar; 13.06.2011