|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Да, нужно что-то похожее на WinAPI. Острой необходимости нет, есть желание "причесать" наш продукт. Трудоемкость создания функции, конвертирующей файл напрямую, лично мне представляется большим, чем я готов выделить времени на это вот "причёсывание" (разве что может поискать где, может кто писал). Ну вот честно - в заголовках лень копаться. Мне представляется, что средствами языка это было бы делать куда проще. Кроме Visual FoxPro с его файлами кто работать напрямую умеет (и чтобы еще dll можно было компилить)? Может Harbour какой-нибудь? Или в соседнем подфоруме спросить? Если простого решения найдено не будет, то задача будет опять отложена на неопределенный срок по принципу "работает - не трогай" (а оно работает) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2012, 11:18 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
RaFaeL-NNТрудоемкость создания функции, конвертирующей файл напрямую, лично мне представляется большим, чем я готов выделить времени на это вот "причёсывание" Как говорится: "глаза боятся - руки делают", даже при отсутствии опыта в данной области можно за день управиться. Даже если времени больше уйдет - бонусом получишь опыт низкоуровневой работы с фалами. Поверь DBF распарсить гораздо проще чем DOC или XLS :) Тут структура фоксовых DBF Даже если бы можно было бы на фоксе написать DLL с функциями, подумай стоит ли оно того. Фокс - интерпретатор, поэтому все-равно будет грузится рантайм (vfp*.dll) чтобы исполнить этот код. Т.е. от 5-6 мегабайт DLL-ек ты никак не избавишься, хотя тоже самое на Си займет 10-20 кб. RaFaeL-NNКроме Visual FoxPro с его файлами кто работать напрямую умеет (и чтобы еще dll можно было компилить)? Поищи, только маловероятно мне кажется. Хранение в DBF пошло на спад лет 10-15 назад, когда стали развиваться клиент-серверные технологии, поэтому для прочих систем они остановились в развитии, а в фоксе за это время появились новые типы данных, поэтому и не читаются. Хотя возможно чтение останавливается на проверке первого байта (тип файла) можешь попробовать его менять для начала, только новые типы данных не распознаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2012, 12:31 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Если я правильно понял то, как Вы работаете, то получается следующее 1. Файл DBF конвертируется из формата VFP7 в формат Fox2x, при этом мемо-поля конвертируются в Character(254), а поля Double в Numeric(20,5) 2. Ваша программа, написанная на Clarion, берет этот файл формата Fox2x, строит по нему необходимые индексы и далее с ним как-то работает. Честно говоря, не понимаю, почему Вы не можете через драйвер ODBC сделать выборку этой таблицы напрямую в Clarion и сохранить результат этой выборки на диск в виде той же таблицы DBF. Далее делайте с ней что угодно. Последняя версия драйвер ODBC для FoxPro выпускалась для VFP6. Но в VFP7 никаких новых типов данных введено не было. Поэтому драйвер ODBC для VFP6 будет нормально работать с таблицами VFP7. Также был выпущен драйвер OLE DB для VFP9. Но это уже Вам виднее, может ли Ваша версия Clarion работать черз ADO. И драйвер ODBC, и драйвер OLE DB для VFP можно найти на сайте Microsoft. Они распространяются бесплатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2012, 20:49 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Честно говоря, не понимаю, почему Вы не можете через драйвер ODBC сделать выборку этой таблицы напрямую в Clarion и сохранить результат этой выборки на диск в виде той же таблицы DBF. Далее делайте с ней что угодно. А вы знаете, как работает драйвер ODBC для FoxPro? Ну, скажем так, внутри? Вот я интересовался, когда разбирался, а чего он так тупит то. На каждый селект создаётся временная таблица в темповом каталоге Windows, куда проходит выборка. Т.е. мы еще толком данные не зачитали, зато уже нагрузили работой и наш жесткий диск, и сеть (напоминаю - исходные данные лежат в сети)... По ODBC хорошо работать с мелкими файлами на небольших задачах, какой-нибудь допустим bnkseek.dbf быстренько открыли, пару сотен записей импортнули, всё хорошо. Но когда надо обработать файл на пару сотен мегабайт, ODBC - отказать, это не та технология ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 02:47 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Во-первых, Вы не очень понимаете то, как работают выборки вообще, а, во-вторых, это все не имеет никакого отношения к тому, о чем я Вам говорю. Я ведь предлагаю Вам использовать ODBC не для штатной работы с таблицами, а для выполнения процесса конвертации . Ну, смотрите, что Вы сейчас делаете 1. Конвертируете таблицу из одного формата в другой 2. Работаете с этой таблицей напрямую в Clarion Я Вам предлагаю использовать ODBC только и исключительно для выполнения первого пункта примерно так 1. Скачали ВСЮ таблицу через ODBC 2. Сохранили на диске в нужном формате Все. ODBC больше не нужен. Далее работаете с этой сохраненной таблицей напрямую через Clarion. При таком подходе у Вас вообще нет внешних (по отношению к Clarion) приложений. Ну, разве что, собственно драйвер ODBC. Вся "конвертация" выполняется только и исключительно средствами Clarion. Вероятно, имеет смысл запускать эту процедуру, скажем, один раз в сутки. Ночью. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 11:46 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Я понимаю. что вы предлагаете ;) Только не могу понять, в чём преимущество вашего способа перед тем, как сейчас делается и что хотелось бы? Т.е. с вашей точки зрения ODBC драйвер это не внешнее приложение? Его, если что, настраивать надо. Windows у пользователя переставили - заново настраивать. У каждого пользователя! Этот вариант не годится, программа работать должна независимо от того, откуда она запущена, какой у пользователя Windows, и т.д. и т.п. Да и еще раз повторяю, это работает медленнее, чем конвертация в момент копирования файла! Вариант "сделайте ночью" ну совсем уже не годится, пользователю сказали отчёты строить - он жмёт кнопку импорта, по свежим данным. Начальник ночи ждать не будет, да и лишние звенья это. Всё должно работать максимально просто и надёжно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 12:18 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Мда... "Как все запущено" (с) Ну, начем с начала. Не знаю, как для Вас, но для меня является аксиомой, что поддерживать одно приложение, проще, чем "зоопарк" различных приложений. При том, что в некоторых из этих дополнительных приложений разработчик мало что понимает. Это значит, что разработка механизма выполнения отчетов средствами только и исключительно Clarion с ODBC-драйверами предпочтительнее, чем использование "левой" программы для решения очень частной (промежуточной) задачи. Настройки Windows. Здесь Вы опять заблуждаетесь, вероятно предполагая, что для создания соединения необходимо настроить DSN. Это не так. Не знаю, как это делается чисто технически в Clarion, но обязательно должен быть способ установки соединения с внешним источником путем прямого указания всех опция соединения, в том числе и драйвера. БЕЗ предварительно созданного DSN RaFaeL-NNWindows у пользователя переставили - заново настраивать Что настраивать? Вы хотите сказать, что Ваша программа на Clarion не требует никаких настроек? "Не верю" (с). Любая программа требует некоторых настроек при установке. А установка драйвера - это уже почти стандартная операция при установке приложений. А кроме собственно драйвера ничего устанавливать больше и не надо. RaFaeL-NNДа и еще раз повторяю, это работает медленнее, чем конвертация в момент копирования файла! (...) пользователю сказали отчёты строить - он жмёт кнопку импорта, по свежим данным Т.е. Вы хотите сказать, что построить индекс по всему файлу - это быстрее, чем сделать выборку из файла? Ну, если в выборку попадают все записи или большая их часть, то вероятно это действительно так. Однако создается ощущение, что Вы "ищите там, где светлее". У Вас сама технология создания отчетов явно "кривая". Вот зачем Вам для отчета ВСЕ данные таблицы? В FoxPro есть такой механизм, называется Rushmore-оптимизация. Его основа - это индексы. При определенных запросах этот механизм используется, что позволяет существенно сократить время выборки. ODBC-соединение использует этот механизм. База Паруса, очевидно, должна иметь свои собственные индексы. Следовательно, если через ODBC-соединение выборка выполняется медленно, то возможны следующие варианты 1. Вы составили запрос, который не использует существующие индексы. Не оптимальный запрос. 2. Вы выбираете бОльшую часть данных из таблицы. Всю, или почти всю таблицу. Ну, второй вариант не интересен. Тут Вам конвертируй или нет, особого выигрыша в производительности не добиться. Никакими способами. Да и не нужно этого. Хотите видеть вообще все? Ну, тогда ждите А вот первый вариант требует, во-первых, знаний того, какие индексы в родной базе Паруса вообще есть, а, во-вторых, как эти индексы правильно использовать, чтобы получить ускорение. Задача достаточно творческая. Другими словами, Вам нужно менять сам подход к интеграции с внешней системой. Вы выбрали не самый рациональный путь. RaFaeL-NNпо свежим данным. Начальник ночи ждать не будет Это вопрос обсуждаемый и не очевидный. Вы же не говорите о каких отчетах идет речь. Для большинства отчетов обновляемость раз в сутки вполне приемлимо. А для тех, где это неприемлимо, и объем выборок, как правило, небольшой. ODBC вполне себе будет быстро работать. RaFaeL-NNда и лишние звенья это. Всё должно работать максимально просто и надёжно. Вы почему-то не хотите примерить этот тезис на текущее положение дел. То, как Вы работаете сейчас. Разве внешнее приложение - это не "лишнее звено"? А разве сам факт наличия этого самого внешнего приложения не вносит элемент не надежности? Ведь Вы же не контролируете работу этого приложения. Оно для Вас "черный ящик". Да хотя бы как Вы вообще определяете насколько "свежий" сконвертированный файл? Для каждого отчете делаете новую копию? А если пользователь запустил две копии приложения и "одновременно" вызвал один и тот же отчет? Вторая копия затрет содержимое первой? Возникает куча вопросов по отслеживанию этой самой актуальности, разведения копий файлов по разным директориям, уникальность имен, удаление уже не нужных копий. В общем, довольно большое количество проблем необходимо решить. О надежности тут речи вообще нет. Подобная система работает до тех пор, пока есть кто-то, кто ее постоянно "пальцем придерживает". Именно что вручную следит за рядом настроек (переустановка Windows) и также "врукопашную" разруливает разнообразные конфликты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:22 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
RaFaeL-NN, Ты на форуме по своему Clarion`у спрашивал? или у сопровождающих парус? Думаю там эта тема актуальнее чем тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:37 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Не знаю, как для Вас, но для меня является аксиомой, что поддерживать одно приложение, проще, чем "зоопарк" различных приложений. При том, что в некоторых из этих дополнительных приложений разработчик мало что понимает. Это значит, что разработка механизма выполнения отчетов средствами только и исключительно Clarion с ODBC-драйверами предпочтительнее, чем использование "левой" программы для решения очень частной (промежуточной) задачи. Вы мне всё-таки объясните, почему вы считаете DLL/EXE с параметрами "левой" программой, а ODBC-драйвер, по сути являющимся тем же самым, но требующим более тонких настроек, вы такой программой не считаете? Настройки Windows. Здесь Вы опять заблуждаетесь, вероятно предполагая, что для создания соединения необходимо настроить DSN. Это не так. Не знаю, как это делается чисто технически в Clarion , но обязательно должен быть способ установки соединения с внешним источником путем прямого указания всех опция соединения, в том числе и драйвера. БЕЗ предварительно созданного DSN А никак. В качестве параметра передаётся именно имя в DSN, а уже в DSN настраивается путь к файлам. Если у нас несколько баз в нашей программе и несколько баз для импорта, всё это выглядит совсем весело. Это не зоопарк даже, а ферма. Что настраивать? Вы хотите сказать, что Ваша программа на Clarion не требует никаких настроек? "Не верю" (с). Любая программа требует некоторых настроек при установке. Все нужные ей настройки она хранит в своём каталоге. На компьютер пользователя устанавливать её не надо, просто запускаете из сетевого каталога. Ссылку на Free-версию дать или так поверите? Т.е. Вы хотите сказать, что построить индекс по всему файлу - это быстрее, чем сделать выборку из файла? Я хочу сказать, что сделать индекс по файлу и дальше делать по индексу сотни выборок быстрее, чем делать сотни выборок без индекса А вот первый вариант требует, во-первых, знаний того, какие индексы в родной базе Паруса вообще есть, а, во-вторых, как эти индексы правильно использовать, чтобы получить ускорение. Задача достаточно творческая. Часто нужных нам индексов нет в принципе, причём чаще всего нет самых нужных Вы почему-то не хотите примерить этот тезис на текущее положение дел. То, как Вы работаете сейчас. Разве внешнее приложение - это не "лишнее звено"? А разве сам факт наличия этого самого внешнего приложения не вносит элемент не надежности? Ведь Вы же не контролируете работу этого приложения. Оно для Вас "черный ящик". Наличие исходников и среды компиляции - это уже никак не "черный ящик". Или вы думаете, что в этом коде сложно разобраться? )) Да хотя бы как Вы вообще определяете насколько "свежий" сконвертированный файл? Копирование идёт из рабочей базы, там файлы всегда "свежие" Для каждого отчете делаете новую копию? А если пользователь запустил две копии приложения и "одновременно" вызвал один и тот же отчет? Вторая копия затрет содержимое первой? Здесь я слабо понял ход мыслей, но отчёты строятся уже на основе данных, импортированных в нашу базу ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:49 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Ты на форуме по своему Clarion`у спрашивал? Там мне предложили примерно то же, что и ты http://forum.clarionlife.net/phpbb/viewtopic.php?f=1&t=2790 и даже дали исходники класса, который пишет/читает DBF напрямую. Если не заленюсь, сделаю )) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:52 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
P.S. По ссылке обсуждение не моего вопроса, но схожего Моя тема вот: http://forum.clarionlife.net/phpbb/viewtopic.php?f=1&t=2872 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:54 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
RaFaeL-NNНастройки Windows. Здесь Вы опять заблуждаетесь, вероятно предполагая, что для создания соединения необходимо настроить DSN. Это не так. Не знаю, как это делается чисто технически в Clarion , но обязательно должен быть способ установки соединения с внешним источником путем прямого указания всех опция соединения, в том числе и драйвера. БЕЗ предварительно созданного DSN А никак. В качестве параметра передаётся именно имя в DSN, а уже в DSN настраивается путь к файлам. Если у нас несколько баз в нашей программе и несколько баз для импорта, всё это выглядит совсем весело. Это не зоопарк даже, а ферма. Не знаю как в Clarion, но в других языках можно не давать DSN (и не создавать), а сгенерить строку подключения где указать ODBC-драйвер и необходимые ему параметры (примеры тут www.connectionstrings.com ) Но драйвер ставить надо если его нет. При желании это можно автоматизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:58 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
RaFaeL-NNТы на форуме по своему Clarion`у спрашивал? Там мне предложили примерно то же, что и ты http://forum.clarionlife.net/phpbb/viewtopic.php?f=1&t=2790 и даже дали исходники класса, который пишет/читает DBF напрямую. Если не заленюсь, сделаю )) Почти готовое решение. Допиши сверху свою логику и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 14:05 |
|
Сделать из exe -> dll
|
|||
---|---|---|---|
#18+
Не знаю как в Clarion, но в других языках можно не давать DSN (и не создавать), а сгенерить строку подключения где указать ODBC-драйвер и необходимые ему параметры Ну да, более внимательно почитал, есть т.н. DSN-less вариант. В любом случае нужно знать имя драйвера и драйвер должен быть установлен ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 14:15 |
|
|
start [/forum/topic.php?fid=41&msg=37672321&tid=1583820]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 255ms |
total: | 396ms |
0 / 0 |