
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
Помогите решить проблему :
Задача: готовое приложение (А) - поставщик данных, экспортирует их или в Excel через DDE или по ODBC. На выбор. Второе приложение (Б) работает с текстовыми файлами , считывает один файл и пишет результаты в другой. Третье приложение (В) - генерирует команды (вызов процедур с передачей данных) которые через OLE передаю на Сервер ом (приложение -(С)). Приложения (А) , (Б) и (В) не мои с ними ничего не сделаещь. Сервер, который реализовал как ActiveX - exe, должен на базе данных из программ (А) , (Б) и (В) производить расчеты и записывать результаты в текстовый файл. (с которым работает приложение (Б)). Так как все данные представляют из себя строки с несколькими данными то вся работа идет с таблицами. Использовал Excel через OLE (не через компонент). Вроде все работает, но проблема возникновения ошибок при попытке: Использовал Excel через OLE (не через компонент). Вроде все работает, но проблема возникновения ошибок при попытке 1) 2-х программ (А) и Сервера работать с страницами одной книги Excel которая является фактически базой данных. Ошибка : "Фильтр сообщений выдал диагностику о занятости приложения" 2) Попыток пользователя что либо делать руками с ячейками Excel на любом листе. При этом ведь всегда адресую ячейки не через ActiveCell а напрямую типа Sheet1.Cells[1,2].Value, тем не менее ошибка вида: "OLE error 800AC472" Эти ошибки, не то чтоб останавливают программу, но забивает весь экран сообщенями (об ошибках). Наверное можно все сообщения убрать через try но это как-то не нормально, ведь ошибка то остается ? Хотя вроде требуемые действия программа исполняет. Как с этим боротся (если не отказываться от Excel) ? - думаю может поможет если Сервер будет работат с Excel через DDE (писать все в буфер и скидывать буфер в зависимости от требований или в Cells или Range? Или это я ошибаюсь и это не устранит проблемму? Excel выбирался как вариант базы данных с возможностью (и необходимостью) легкого изменения формул расчета различных переменных которые используют данные получаемые из различных источников. |
![]() |
Сообщ.
#2
,
|
|
Excel - это НЕ база данных, со всеми вытекающими. Отказывайся от одновременнной работы нескольких программ с одним файлом Excel'я, ни к чему хорошему это не приведет.
|
Сообщ.
#3
,
|
|
|
А что еще использовать учитывая что у меня в файле Excel 24 страницы с данными и каждая страница - это нужно делать отдельную базу , так как наборы столбцов - разные.
У меня не большой опыт програмирования и мне сложно представить чем заменить Excel с его листовым методом организации данных, и какую базу можно быстро освоить чтоб реализовать вывод в нее данных ( как уже писал можно от поставщика данных получать их и по DDE и ODBC) И Excel это возможность оперативно менять разные параметры и формулы расчета (обработки данных) |
![]() |
Сообщ.
#4
,
|
|
OBDC драйвера есть практически под все базы данных.
Я кстати не говорил, что нужно совсем отказаться от EXcel'я. К тому же ты сам сказал, что Цитата cheska @ Приложения (А) , (Б) и (В) не мои с ними ничего не сделаещь. так что тут ты ничего не сможешь изменить. Я лишь сказал, что тебе нужно отказаться Цитата jack128 @ от одновременнной работы нескольких программ с одним файлом Excel'я |
Сообщ.
#5
,
|
|
|
Сделал пока через DDE. Так вроде переписывать ничего особо не нужно, и шлет устойчиво, изгалялся как мог, вроде ничего не падает.
![]() ![]() {Экспортируем данные в Excel} if DdeClientConv1.SetLink('EXCEL', 'D:\[test001.xls]L002') and DdeClientConv1.OpenLink then begin try xlRange:='R'+inttostr(fRow)+'C1:R'+Inttostr(eRow)+'C11'; DDEClientItem1.DdeItem :=xlRange; DdeClientConv1.PokeData(DDEClientItem1.DdeItem, PChar(Buffer)); finally DdeClientConv1.CloseLink; end; end; Вопрос остался нужно ли (и зачем если нужно) обрамлять это все командами в начале процедуры DdeClientConv1.Create(Self) а в конце DdeClientConv1.Destroy. И как часто стоит делать DdeClientConv1.OpenLink {... } DdeClientConv1.CloseLink . Как я понимаю только если меняю Link ? |
Сообщ.
#6
,
|
|
|
Скажите, а никто не знает как "перевести" механизм DDE например в ODBC?
Есть программа "А", которая умеет выдавать данные только по DDE. Есть программа "Б", которая умеет принимать данные по SNMP, ODBC, текстовый-файл Нада их поддружить |
![]() |
Сообщ.
#7
,
|
|
Цитата Mikola_17 @ Нада их поддружить ну напиши третью программу, которая будет уметь принемать данные от программы A и передовать их программе Б |