• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Использование Лоцман API в .NET

Автор K9, 19.09.08, 13:50:26

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

YorikER

Прочитайте внимательно всю тему, речь идет о написании своего собственного клиента в среде Visual Studio NET 2008 с использованием Visual Basic.

anatoliy

Здравствуйте.
Если я правильно понял, чтобы работать с данными, через COM сервер Лоцмана, необходимо наличие интерфейса IDataSet. Доступен он, начиная с версии 8.5 (SP2).
У меня вопрос. Как эта проблема решалась в старых версиях. Там где нет IDataSet ?
Неужели нужно самому разбираться в формате списков и отписывать свой интерпретатор ?

Chaa

С помощью IDataSet плагину предоставляется доступ к стандартному компоненту Delphi TClientDataSet. Если вы пишете на Delphi, то проблем с доступом к данным в виде датасета у вас не будет.
В других средах разработки вам или нужно использовать XML-представление данных, или использовать внешний COM-объект, написанный на Delphi, для работы с датасетом (например клиент Лоцмана).
Раньше я выкладывал пример COM-объекта с интерфейсом IDataSet: http://forum.ascon.ru/index.php/topic,15373.msg88876.html#msg88876
Для сборки вам понадобится Delphi версии до 2007 включительно.

Вообще использование Лоцман версии меньше 8.5 это проблема сама по себе, из-за огромного количества ошибок и недоработок.

anatoliy

Спасибо, за полезную информацию.
Пишу я на VC++, приложение которое подключается к  COM серверу Лоцмана,
и выдергивает из него данные. Поэтому могу воспользоваться внешним, Делфийским IDataSet, объвернутым в COM.
Но не хотелось бы конечно так всё усложнять.

Когда вы говорили про  XML-представление данных, что именно вы имели в виду ? К ним тоже можно как то получить доступ через COM ?  Или это реализованно в каком то другом виде ?

Chaa

Цитата: anatoliy от 29.08.11, 11:18:50
Когда вы говорили про  XML-представление данных, что именно вы имели в виду ? К ним тоже можно как то получить доступ через COM ?  Или это реализованно в каком то другом виде ?
Метод SetFormat сервера приложений. После этого методы сервера приложений вместо двоичных данных датасета будут возвращать строки с XML представлением набора данных.

Вообще, TClientDataSet для работы с данными датасета использует midas.dll, исходный код которого поставляется вместе с Delphi, он написан на C++. Но там довольно сложная система.

YorikER

Тогда следующий вопрос, как притянуть XML представление к DBGrid, чтобы визуализировать табличные данные?

anatoliy

ЦитироватьМетод SetFormat

Это, то что нужно. Огромное спасибо!

Chaa

Цитата: YorikER от 29.08.11, 13:51:06
Тогда следующий вопрос, как притянуть XML представление к DBGrid, чтобы визуализировать табличные данные?
Если мы говорим про .NET, DBGrid ожидает видеть какой-то датасет, например класс System.Data.DataSet, который и придется создать из полученного XML.

YorikER

Как то сложно... Может лучше перейти на Delphi...

l2qwe

Не так уж и сложно как кажется на первый взгляд.
У меня занесение результат в DataSet получилось примерно вот такое.

                    AppServer.SetFormat("xml", out lReturn, out lError);
                    AppServer.ConnectToDBEx(cDB, "", "", out lReturn, out lError);
                    lsResult = AppServer.[Метод]([параметры],out lReturn, out lError).ToString();
                    DataSet lDSv = new DataSet();
                    System.Xml.XmlDocument lXmlDoc = new System.Xml.XmlDocument();
                    lXmlDoc.LoadXml(lsResult);
                    lDSv.ReadXml(new System.Xml.XmlNodeReader(lXmlDoc));

В датасете lDSv в .Tables[3] сам результат, но обозначение столбцов вида с0, c1, c2, c3...
Соответствие индекса столбца с именем поля из результата в 1 или 2 Tables(точно не помню)