Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Универсальные интерфейсы загрузки/выгрузки данных (число прочтений - 28781 )
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #15 - 15. Июля 2008 :: 12:28
Печать  
kiruha писал(а) 15. Июля 2008 :: 09:45:
Так как раз думаю. Появилась идея написать DCOM-сервер на FoxPro - тогда запросы можно выполнять
на физическом сервере.
Непонятно только как возвращать данные - через возврат простых типов долго,  через создание временных
файлов ДБФ - лучше, но не настолько...


P.S>В принципе же наверно лучше универсальный способ, не привязанного к конкретному com-серверу ?
Или просто нужен для тестов?

Делал подобное на delphi только на TCP, передавал через Stream и возврат результата в ТЗ простых типов,
прирост был за счет маленьких выборок из больших таблиц  Подмигивание

Будет возможность через интерфейсы из набора данных получать ТЗ, ИТ с типизацией значений по id?

Цитата:
В массиве только простые типы.
Или только в цикле поэлементно?

И без цикла по ячейкам, будет заполнение?
Будет доступ к интерфейсу например из delphi, VB?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #16 - 15. Июля 2008 :: 12:46
Печать  
Если интересно - Создание сервера пошагово в Fox (по Клепенину)

1.Меню \"Новый проект" например myserver
2.Добавить програмный файл (prg) - в нем
3. Определить класс (написать строку)
DEFINE CLASS t1 AS custom OLEPUBLIC или другой
ключ слово OLEPUBLIC -т.е.  доступный по com
4. Добавить методы, например FUNCTION GetMyArray() AS array
5. кнопка Buld... Выбрать Win .../ com server(exe) - OK
- т.е. скомпилировать
6.меню Project \ Project Info \ закладка Server \Instancing - Single Use \ OK
создавать отдельные инстанции (экземпляры) com-серверов

Все - Можно работать на сервере с com-сервером

Для клиентов
7.установить и зарегестрировать у клиентов com-сервер
8. У клиентов в консоль mmc добавить оснастку службы компонентов
9. Служба компонентов \Мой компьютер \ настройка DCOM \ myserver\свойства- задаем где запускать приложение
(на сервере)
10. Дать права клиентам запускать приложение на сервере.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #17 - 15. Июля 2008 :: 12:59
Печать  
PVR писал(а) 15. Июля 2008 :: 12:28:
Будет возможность через интерфейсы из набора данных получать ТЗ, ИТ с типизацией значений по id?

Цитата:
В массиве только простые типы.
Или только в цикле поэлементно?

И без цикла по ячейкам, будет заполнение?
Будет доступ к интерфейсу например из delphi, VB?


Все просто -
1. Серверу передали текст запроса и возможно параметры.
2. Сервер выполнинил запрос и вернул результат ввиде массива
3. Массив преобразовали в ТЗ (типы - только строки и числа).
4. Далее с ТЗ работаем в 1С.

Типизация в объекты 1С видимо "вручную".

P.S> Вообще тема  шире - прокси оболчка для работы com-объектов, сервер FoxPro я привел как пример.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #18 - 15. Июля 2008 :: 13:13
Печать  
artbear
Доступ к 1C++ "ун. интерфейсам загрузки/выгрузки" будет из других яз. нпример Delphi,VB или только С++?

kiruha
Если будешь делать сервер к FOXу, то сделай пожалуйста TCP/IP сервер Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #19 - 18. Июля 2008 :: 13:12
Печать  
Продолжаю по универсальным интерфейсам.
Вопрос - как с помощью универсального механизма варьировать варианты выгрузки?
например, ИТЗ::ВыгрузитьВСтроку(Приемник)
если приемник - СЗ, то удобно выгружать как значения, так и колонки как представление
если же приемник - вектор, то выгрузить можно либо только имена, либо только значения
если же приемник - ТЗ, то выгрузить можно любой набор колонок или всю таблицу.

Как эти ситуации будем разруливать?
Или все-таки пусть приемники или прокси-объкты сами разруливают, а источник выгружает все единым образом?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #20 - 18. Июля 2008 :: 16:30
Печать  
artbear писал(а) 18. Июля 2008 :: 13:12:
Или все-таки пусть приемники или прокси-объкты сами разруливают, а источник выгружает все единым образом?

Именно.
Источник определяет возможные данные, а уже приемник сам определяется, как эти данные интерпретировать.
Иначе число сочетаний будет расти и приведет к невозможности нормальноо поддерживать все это хозяйство.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #21 - 19. Июля 2008 :: 18:31
Печать  
Наверное, вот в чем вопрос:
Код
Выбрать все
	if (nLoaderColumns != 1 && typeid(*pLoader) == typeid(CVLResultLoader)) // TODO это условие для СЗ нужно более красиво исправить, желательно без typeid
		RuntimeError("Передано неверное число колонок");
 


Ты можешь это дело разруливать универсально штатным образом.
Если CVLResultLoader считает, что предоставление большего числа колонок, чем он может принять, это противозаконно - пусть возвращает ошибку в Init.
Это приведет к исключению, которое тебе и нужно.

Другой вариант - просто ограничивать источник по числу колонок, не считая это аварийной ситуацией.
В этом случае Init ошибку возвращать не должен.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #22 - 21. Июля 2008 :: 03:20
Печать  
kms писал(а) 19. Июля 2008 :: 18:31:
Наверное, вот в чем вопрос:
Код
Выбрать все
	if (nLoaderColumns != 1 && typeid(*pLoader) == typeid(CVLResultLoader)) // TODO это условие для СЗ нужно более красиво исправить, желательно без typeid
		RuntimeError("Передано неверное число колонок");
 


Ты можешь это дело разруливать универсально штатным образом.
Если CVLResultLoader считает, что предоставление большего числа колонок, чем он может принять, это противозаконно - пусть возвращает ошибку в Init.
Это приведет к исключению, которое тебе и нужно.

Другой вариант - просто ограничивать источник по числу колонок, не считая это аварийной ситуацией.
В этом случае Init ошибку возвращать не должен.

Да, именно из-за этого кода.
А вообще я согласен, просто хотелось узнать еще доп. точки зрения.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #23 - 22. Июля 2008 :: 08:45
Печать  
kms
Михаил, давай что-нибудь решим по интерфейсу выгрузки источника.
Примем для себя хоть какой-то, пусть и промежуточный, вариант.
И начнем с ним работать.
Мне, в принципе, нравится вариант Саши, но пока предлагаю сделать строго по аналогии с нашим интерфейсом приемника - т.е. коды ошибок HRESULT.
В случае чего потом будет легче исправить.

Код
Выбрать все
class IValuesDataSource
{
public:
	virtual HRESULT vdsInit(DWORD& colCount, DWORD& rowCount) throw() = 0;
	virtual HRESULT vdsAddColumnInfo(DWORD colIdx, CString& colName, CType* pType) throw() = 0;
	virtual HRESULT vdsGetNextValues(CValue const* const* &ppVals) throw() = 0;
	virtual CString vdsGetLastErrorMessage() throw() = 0;
}; 

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #24 - 22. Июля 2008 :: 15:16
Печать  
Артур, если я сказал, что сделаю, значит сделаю.
Я рад, что ты поддерживаешь идею, но не надо бежать впереди паровоза.
Все же это моя идея, мой интерфейс и мое право думать над ним до посинения.

Если ты реально хочешь форсировать решение, давай начнем думать.
Итак, для возврата ошибки у нас будет функция GetLastError.

Достаточно иметь одну такую функцию на объект (как это предлагает Саша).
Или статус ошибки - это принадлежность конкретного интерфейса?

Аргументируй, пожалуйста.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #25 - 23. Июля 2008 :: 06:16
Печать  
kms писал(а) 22. Июля 2008 :: 15:16:
Достаточно иметь одну такую функцию на объект (как это предлагает Саша).
Или статус ошибки - это принадлежность конкретного интерфейса?

Аргументируй, пожалуйста.

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

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #26 - 23. Июля 2008 :: 06:19
Печать  
artbear писал(а) 23. Июля 2008 :: 06:16:
Мне нравится простой вариант с HRESULT как наиболее универсальный именно потому, что статус ошибки принадлежит конкретной реализации интерфейса.

Не, я имею в виду функцию GetLastError().

Достаточно одной такой функции на все интерфейсы (как у Саши)?
Или есть необходимость получать отложенно разные ошибки при использовании нескольких интерфейсов в одном объекте?
У нас пока GetLastError в инт. выгрузки принадлежит интерфейсу и ни с кем не разделяется.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #27 - 23. Июля 2008 :: 07:32
Печать  
kms писал(а) 23. Июля 2008 :: 06:19:
Или есть необходимость получать отложенно разные ошибки при использовании нескольких интерфейсов в одном объекте?
У нас пока GetLastError в инт. выгрузки принадлежит интерфейсу и ни с кем не разделяется.

Да, меня привлекает именно этот вариант, считаю, что работа с ошибкой должна быть отдельной для каждого интерфейса.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #28 - 23. Июля 2008 :: 18:50
Печать  
artbear писал(а) 23. Июля 2008 :: 07:32:
kms писал(а) 23. Июля 2008 :: 06:19:
Или есть необходимость получать отложенно разные ошибки при использовании нескольких интерфейсов в одном объекте?
У нас пока GetLastError в инт. выгрузки принадлежит интерфейсу и ни с кем не разделяется.

Да, меня привлекает именно этот вариант, считаю, что работа с ошибкой должна быть отдельной для каждого интерфейса.

Воот.

Теперь давай определимся, зачем они нужны.
Ведь схема работы у нас сейчас какая:

1. вызвал метод
2. получил код ошибки
3. если надо - получил расшифровку ошибки.

Привязка расшифровки ошибки к конкретному интерфейсу (а не к объекту) позволяет менее строгую схему:

1. вызвал метод интерфейса А.
2. получил код ошибки
3. вызвал метод интерфейса Б
4. получил код ошибки
5 получил расшифровку ошибки Б
6. получил расшифровку ошибки А

Т.е. есть возможность использования "отложенного" получения расшифровки для интерфейса.

С другой стороны, при возникновении ошибки в первой схеме, мы запросто реализуем те же возможности, просто забирать ошибку (копировать к себе) надо сразу.
Так стоит ли овчинка (с разнесением расшифровок ошибок) выделки?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #29 - 24. Июля 2008 :: 11:57
Печать  
ИМХО удобна была бы фича - методы Выгрузить(Приемник, ....) должны возвращать значение Приемника, а не абстрактные числа и т.д.
В этом случае становится удобным писать код типа Вектор.Выгрузить(ТЗ).Показать или что-то более сложное и удобное.

Естественно, это относится к новым методам Выгрузить - Вектор, АссоцВектор, ИТЗ::ВыгрузитьСтроку и т.п.

Давно существующие методы Выгрузки ради совместимости менять не будем.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 
ОтправитьПечать