Насчет удобства работы через ADO - вопрос спорный. Лично мне кажется, что простые команды вроде Select, Update, Insert, Delete проще передавать все-таки через ODBC.
Вариантов подключения через ODBC несколько:
1. Если внешний сервер подключен как Linked-сервер (в случае MS SQL), то просто создаешь объект Connection и немного меняешь адресацию к серверу.
SELECT .. FROM LinkedServer.BaseName.owner.Table
Т.е. вместо имени таблицы имя из 4 "колен". Причем, как правило, владельца вообще опускают и пишут 2 точки подряд.
2. Если внешний сервер это совершенно не зависимый сервер, то вместо объекта Connection используют ODBCConnection. А в остальном все то же самое.
Это выглядит примерно так:
X++:
OdbcConnection connectBase;
Statement statment;
ResultSet resultSet;
LoginProperty lp = new LoginProperty();
str strConnectionString;
Name _server = "MyServer";
Name _dataBase = "MyBase";
;
/*
// Можно и в одну строку задать все параметры
strConnectionString = strFmt("DRIVER=SQL Server;SERVER=%1;DataBase=%2;Trusted_Connection=Yes",_server,_dataBase);
lp.setOther(strConnectionString);
*/
// Но для определенности задаю те параметры, которые возможно, явным образом
lp.setDatabase(_dataBase);
lp.setServer(_server);
// Фигурные скобки не обязательны
lp.setOther("DRIVER={SQL Server};Trusted_Connection=Yes");
connectBase = new OdbcConnection(LP);
/*
Для объекта Connection формировать LoginProperty нет необходимости.
В этом случае все ограничивается строкой
Connection connectBase;
connectBase = new Connection();
но это подключение именно к текущему серверу
*/
// Далее работа с настроенным ODBC-соединением
statment = connectBase.createStatement();
// Обновление
statment.executeUpdate("UPDATE someTable SET someTable.someField = '321' WHERE someField2 = '123'")
// Чтение
resultSet = statment.executeQuery("select * from someTable")
while (resultSet.next())
{
info(resultSet.getString(1));
}