31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
1 | |
Чтение полей Memo (blob) из Paradox23.05.2014, 08:54. Показов 3358. Ответов 14
Метки нет (Все метки)
Вот как-то не ладится у меня работа с чтением этих полей.
Суть в том, что некое приложение ежедневно выкидывает данные в виде табличек на сетевой ресурс. Эти данные мне необходимо качнуть в MS SQL. То есть предложение с конвертацией никак не подходит. Необходима программная обработка. Все данные обработать получается без проблем. Однако вот с BLOB прямо беда какая-то. Мне бы хотя бы понять - как подступиться то из VB.NET (ну или C#). Есть множество примеров из Delphi, но все как-то построены на своеобразных компонентах и я в принципе не понимаю как притянуть это в код NET. Во вложении две таблички: opert.db; opert.mb Прошу пнуть в нужном направлении!
0
|
23.05.2014, 08:54 | |
Ответы с готовыми решениями:
14
Filter в MEMO-поле Paradox-таблицы(BDE)? Редактирование полей таблицы Paradox Изменение наименования полей у БД Paradox. что такое Blob memo? и как с ним работать? |
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
23.05.2014, 10:20 [ТС] | 2 |
Понимаю, что без исходников ответа можно ждать сто лет. Поэтому на скорую руку собрал проект (VS2013) в котором наспех нарисовал суть проблемы. А она такова - поле MEMO в таблице OPERT существует, однако при чтении в Table абсолютно отсутствует. Очевидно - требуется некий иной подход. Но вот какой?
Для тестирования естественно потребуется установленный BDE.
0
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
23.05.2014, 10:41 [ТС] | 3 | |||||
1
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
28.05.2014, 19:36 [ТС] | 4 |
Предлагаю заглянуть на https://www.cyberforum.ru/orde... 91216.html
0
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
29.05.2014, 06:21 [ТС] | 6 |
По сути, Памирыч, там предлагается написать за деньги и на Дельфях, некую DLL позволяющую иметь нормальный, стандартизованный интерфейс доступа табличкам Paradox.
Кстати, я там за ночь накидал общую картину того, как я это вижу...
0
|
39 / 40 / 20
Регистрация: 30.09.2013
Сообщений: 141
|
|
02.06.2014, 17:06 | 7 |
RafStudio, долго искал способ нормально читать из Paradox. Попробовал использовать кусок кода, который ты выше выложил, для своих нужд. Возник вопрос - а есть способ преобразовать кодировку текста при чтении? А то всё, что по-русски в БД записано, отображается кракозябрами.
Спасибо.
0
|
39 / 40 / 20
Регистрация: 30.09.2013
Сообщений: 141
|
|
02.06.2014, 22:01 | 9 |
Увы, до сих пор большое количество софта использует этот устаревший формат =(((( Например, система ресторанного учета R-Keeper, на которой работает большинство ресторанов в нашей стране....
0
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
25.02.2015, 17:06 [ТС] | 10 |
Сообщение было отмечено Памирыч как решение
Решение
Ох, извини, что так поздно откликнулся. Уж наверняка ты и сам за это время нашел ответ. А их тут на самом деле несколько. Во первых стоит произвести настройки драйвера BDE через стандартную утилиту Borland. Во вторых (и часто) помогает исправление типа того, что во вложении. В кратце - там файл реестра с некоторыми подменами. После применения - обязательна перезагрузка. Рекомендую перед применением, выгрузить соответствующие изменяемые ветки реестра. Ну или вообще реестр забекапить соответствующей утилитой, чтобы ежели чего - откатиться!
1
|
1713 / 1201 / 227
Регистрация: 23.12.2010
Сообщений: 1,530
|
|
25.02.2015, 19:09 | 11 |
Вопрос: а что хранится в полях типа blob?
Как я понимаю, там записан некий массив байт, который может быть как файлом, так и изображением, так и текстом (в т.ч. rtf). По логике вещей, надо делать выборку не всех полей в таблицу а поименно с пропуском данного, а уже данное поле подгружать по требованию пользователя в массив byte(). Также, по логике вещей, в БД должна быть информация о том, данные какого типа там записаны (например, если это файл, то должно быть известно хотя бы его расширение) или же может быть так, что хранятся данные одного предопределенного типа и тогда конечная программа, которая работает с БД, сама знает что там за данные.
0
|
39 / 40 / 20
Регистрация: 30.09.2013
Сообщений: 141
|
||||||
28.02.2015, 01:03 | 12 | |||||
Нет, решение я так и не нашел. До сих пор.
И правка реестра тоже не помогла =((( А что конкретно можно в настройках BDE на этот счет покрутить???? Может есть какой-то вариант конвертить "на лету"? Добавлено через 5 часов 36 минут Смог выяснить, что текст из файла приходит в кодировке "Западноевропейская (Windows)" Как его преобразовать в Unicode или в 1251? Добавлено через 2 часа 50 минут В общем, пока приколхозил вот такой вариант:
0
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
27.03.2015, 19:40 [ТС] | 13 |
Уважаемый Дмитрий, не в первый раз сталкиваюсь с Вашими ответами и рекомендациями, а потому, зная Ваш огромный опыт, скажу кратко - BLOB в понимании BDE действительно просто некий массив (поток, если так проще) байт. Проблема в том, что стандартные подходы OleDb и прочие (включая ODBC) от Microsoft не подходят. В MSDN они так прямо и говорят - поддерживаем все поля данных в Paradox кроме BLOB (и в этом есть некое лукавство Microsoft - решить данную проблему, не думаю, что для них сложность. Вопрос в продвижении своего продукта, а потому и незачем полноценно решать проблему - юзайте конвертеры). На сайте codeproject есть некоторые наработки на эту тему у Petr Bříza (статья: Paradox database native .NET reader), но это не совсем то, что надо - нет решения проблемы с файлами защищенными паролями, хотя подход весьма интересный, надо признать!
Однако, возвращаясь к сути - на сегодняшний день я нашел только одну приблудину, 100% решающую проблему чтения любых полей из таблиц Paradox. Это ActiveX компонент под названием Paradox Direct Engine (ActiveX edition) некоего "школьника" под ником Mike Shkolnik. Особо радует отсутствие проблем при работе с таблицами, занятыми на данный момент другими приложениями использующими BDE. (Майкрософтовские драйвера при этом вообще падают в осадок). Я позволил себе изменить демо-приложение для NET платформы Visual Studio 2013 в сборке прикрепленной ниже, включая bat-ники для инсталляции и деинсталляции данного компонента. Но, поскольку начал разглядывать его пристально только вчера, скажу сразу - некоторые моменты несколько меня не порадовали, хотя основное - читать BLOB-поля он выполняет на ура. Надеюсь, что и для Вас, FlegmaSpirit это будет мало-мальски утешением, а может и решением некоторых проблем. Однако, в целом - проблем сохраняется. Может оговоренный выше компонент и может несколько большее, чем я отковырял в DEMO для NET, но пока я не разобрался до конца, а потому и не готов, на сегодня, платить за него 75$... Во вложении PXDA_M.zip - измененные мной батники и Демо-проект для NET. На всякий случай во вложении pxda.zip оставил все так, как было у авторов...
0
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
28.03.2015, 00:08 [ТС] | 14 |
На сколько я знаю - это просто массив байтов. Нет ничего, говорящего о том, что это за файл. Разработчик сам принимает решение о том, каким образом интерпретировать данный массив.
И еще раз спасибо, за осмысленные попытки найти истину. Касаясь предложения можно сказать (или повторить) следующее - подключения с помощью драйверов Microsoft Jet или ODBC являются наиболее ущербными по своей сути. В статье http://support.microsoft.com/en-us/kb/230126/en-us описываются некоторые (подчеркиваю - именно НЕКОТОРЫЕ) ограничения. На деле их значительно больше. От того и проблема - местами, крайне необходимые BLOB-поля не то, что необходимо выбирать по отдельному запросу пользователя, они в принципе недоступны с использованием указанных выше драйверов... Я не стал искать статью одного уважаемого человека, который в полной прелести ощутил на себе попытки прилабунить доступ к Paradox из Visual Studio и вывел с десяток проблем на данной почве - не факт, что найду. Но помню - прочитав тогда, понял, что пользовать столь услужливо написанные Microsoft драйвера, можно только на самом примитивном уровне. Во всех более или менее серьезных вещах, ребята всегда предлагают конвертировать данные в MS SQL и далее уже работать там. (Не скажу, что это плохо - это прогресс на самом деле, просто некоторые приложения этого в принципе не позволят и мало того - конечный покупатель, он же и клиент, зачастую не может или не желает, в силу множества причин, включая финансовые, этого делать. (Плох клиент или недальновиден - вопрос другого порядка, впрочем - Вы это и сами понимаете.) При чем, самое интересное, это ошибки, которые выписывают драйвера от Microsoft при работе с таблицами Paradox. Они зачастую настолько не соответствуют действительности, что только методом проб и ошибок вообще возможно понять то, что в действительности происходит при подключении/выполнении стандартных с виду операций... Короче - в этом месте ребята от Билла нас просто водят за нос. Вот и приходится, работать с велосипедом. Но это не значит, что парень типа Dev.Free (хоть и забанен) с виду перспективу гласит. Написать полноценное серьезное приложение для клиента в виде клиент-серверной архитектуры - всегда выглядит заманчиво. И для программиста (есть на чем подучиться, наесться и добавить не только в кошелек, но и в будущие проекты наработанный код) и для клиента (современная устойчивая к падениям база данных, скорость работы и новые технологии, включая внешний интерфейс) Upgrade предпочтителен. Но на деле - вопрос стоит не в 50 а чаще даже не 100 тысячах рублей. Значительно выше. Ибо за меньшие деньги никто и никогда, ради своего саморазвития, не пойдет на серьезные проекты, от которых зависит работоспособность серьезного предприятия. И получается - расход в виде 600/1000 тысяч рублей большинство предприятий на обслуживании обычного программиста не потянут, но те, кто готов заплатить, разламывают голову программисту простым выводом - одному, в обозначенные сроки, а то и вообще в принципе - не потянуть... Иногда проще заморозить проект и заняться плясками с бубном, под названием Microsoft OleDb или нечто похожим... Проходит время и раз от разу возвращаясь к проблеме, начинает хоть что-то вырисовываться, и ты начинаешь ощущать собственные возможности в решении задачи. И это хорошо! (по крайней мере, мне так это видится). В общем и целом - это я конечно слишком далеко ушел от действительной проблемы. (Простите Дмитрий - виноват, Вам это вообще ни к чему выслушивать - более чем уверен) Однако суть от этого не изменилась - есть сотни приложений, от которых не избавиться за раз и даже за пять, но есть необходимость тянуть данные. И вот тут приходится и надо искать варианты решений. Это я как-раз к тем, кто орет о том, что надобно юзать новейшие технологии... Извините, что так долго и нудно, (повторюсь - не к Вам лично Дмитрий, просто не стал дробить ответ) найти решение соразмерное с вознаграждением и тратой собственных усилий - по-моему самое идеальное решение. Ну и конечно: если есть решение от более опытных коллег - бывает, что лучше к ним направить ... Ну в общем направить и Бог с ним - на время позабыть задачу. "Есть многое в природе, друг Горацио, что и не снилось нашим мудрецам." - По моему весьма достойно. Но, поиски на этом как правило не заканчиваются! Проходит время и раз за разом мы возвращаемся к тому, что не смогли одолеть когда-то! Потом приходит время - вновь решился. Конечно жаль, что поздно, но ищешь решение, которое, как правило, станет знаменателем бессонных ночей. Ведь каждому, наверняка, известна ситуация, когда ложишься спать, а варианты так и сыпят в голову. Лежишь, считаешь - что можно, что нельзя. Как лучше. Иногда встаешь и делаешь шаги. Потом опять в кроватке умолкаешь, но вот уж утро - на работу... Черт ее дери! Ну а потом, чуть позже, в свете дня, уже и полное решение возникает! Добавлено через 31 минуту На удивление, в описанном выше ActiveX компоненте, данный вопрос тоже решен - от pcDOS кодировки (по моему, не помню уже сейчас - пятница, выпил и т.п. - CP866) до Windows-1251. Но, повторяюсь, я еще пока не до конца понял принципы работы данного компонента. Мало того - он абсолютно разрушает весь подход в плане обращения к базам данных (ну или табличкам в понимании Paradox). Без полного перелопачивания исходного кода приложения не обойтись. А потому, прежде, его следует до конца пощупать. Я только пока предложил в качестве варианта данный компонент. В DEMO-проекте для NET, меня он удовлетворил тем, что не смотря на ущербность необходимости грузить в некую промежуточную mdb-таблицу - решает загрузку всех полей в принципе. (в измененном мною демо-проекте для NET, при выгрузке cкажем в csv, прекрасно наблюдаем при открытии полученного файла в Exel поле BLOB - особо очевидно в последней строке, где виден чек из указанного поля, в текстовом формате) Добавлено через 26 минут Возвращаясь к Вашему вопросу, на счет "покрутить". По сути, уж коли Вы установили BDE, то в панели управления у Вас нарисовался BDE Administrator, у которого на вкладке Configuration в дереве есть Native, где Вы должны для драйвера PARADOX и параметра LANGDRIVER указать требуемый лично Вам параметр. Как правило по-умолчанию 'ascii' ANSI не совсем то, что Вам нужно, от-того пробуйте либо Pdox ANSY Cyryllic либо Paradox Cyrr 866. Бывает, что спасает dBASE RUS cp866 Данные настройки глобальны и по сути должны помочь. Вопрос только в том, сколько разнообразных приложений со своими кодировками используется именно на Вашем компьютере. Вообще, можно при желании менять как IDAPI32.CFG так и в наглую лезть в реестр. Вот только изменения на ходу, в работающем приложении, при этом вряд-ли возможны... Но, при должном знании, не сомневаюсь, можно править и определенные ячейки памяти в оперативке, а проще - перед открытием файла. Какие точно: сразу не скажу - читать надо. Где-то, на страницах этого форума мне уже кидали ссылки на подобные полезняшки. Однозначно - все изначальные настройки таблицы хранятся конкретно в ее теле и задаются они предварительно, перед созданием таблицы, в настройках BDE. Изменить позже кодировку можно в DBD32.exe После изменения, я так думаю, подсмотрев в HEX - что именно изменилось, далее возможно менять этот байт (а по моему именно он один и должен меняться) извне на в принципе необходимый. Но это моя теория, я еще не пробовал... Мало того - как правило таблицы зашифрованы при помощи как минимум стандартного jIGGAe Как бы то ни было, надеюсь, что натолкнул на мысль! Добавлено через 16 минут Уже эта строка говорит о далеко не windows-1251 - родной кириллицы. Пробуйте! Я, к сожалению, пока нацелен на другой вопрос. Если Вам удастся найти истину, не перемените - расскажите нам всем о своей победе! Добавлено через 49 минут Вот не поленился-же я наговорить глупостей немного выше! Не принимай сказанное типа - "говорит о далеко не windows-1251" в серьез. Не буду оправдываться - гляди в настройки BDE. Но, пользуясь моментом, немного расскажу о своих мцырях: Попробуй оформить отправку данных с параметром даты в MySQL таблицу, через хранимую процедуру... Вот там тоже - срыв мозга, прежде чем синаптические связи в голове приходят к пониманию, что дату надобно передавать через некий конвертор, понятный только MySQL, хотя с виду пользуешь заточенный именно под NET MySQLConnector и при этом в процессе получения значения Даты все происходит как нельзя хорошо!!! Добавлено через 47 минут Я что хотел сказать - пока не поправили тебя на тему Тебе-то вроде как и не зачем страховаться типа - может есть лучше... Всегда найдется что-то лучше... Особо, если взглянуть со стороны С++... Да правильно все! В свое время в ZX-Revew была рубрика, которая называлась "Перлы", где для искушенных, преподавались куски кода на ассемблере, для процессора Z80 (прародителя x86, точнее это x86 родился из разногласий внутри компании-производителя. Но дело не в этом, хотя язык Z80 я понимаю намного лучше мнемоник x86). Так вот, там люди действительно боролись за байты, а порой и за 1/8 байта, дабы получить оптимально и скорость и размер тела ROUTINES. В те времена, твой вопрос, возможно и вызвал бы нездоровый интерес у профессионалов. Сегодня, мне так кажется, просто решай задачу. Решил - хорошо. Оптимизируй позже и шагами - все равно до оценки по сути миллион шагов. Сегодня перлов-то и нет. Так что бери и делай, а далее совершенствуй в меру возможности. Все равно на предмет Paradox не будет претензиатов! У них сейчас в голове совсем другие опилки! Ибо, если бы кто-то и думал об оптимизации - никогда в сторону древнего Paradox. Оставишь как есть - никто и не заметит! Сегодня языки программирования население рожает в таком количестве, что не каждая баба заметит - кто из рожденных хорош! А все болеющие Вавилоном от рождения - родят новые языки общения и программирования. Обязательно доказывая, что их язык и есть то, что люди ждали. Точнее - рожающие от скучности страдали возвышением над теми, кого им в принципе рукой не достать... Им всегда мало. И каждый, на перебой стремиться доказать - чем новее язык, тем он богаче и умнее! Хорошо бы так. Вот только от Ассемблер все равно, ...поматерился..., ну только из трусняков выпрыгнуть! В общем- не парься. Нашел решение - ДЕРЖИ ПЯТЬ! Какое бы оно там ни было! Просто пройдет время и найдешь более правильное решение! В топике про Paradox, тем более в связке с Visual Studio - почти не найти искателей!
0
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
12.09.2016, 11:31 [ТС] | 15 |
В общем и целом проблема мною решена. Чтобы не повторяться с ответом, просто идите по ссылке https://www.cyberforum.ru/post9533818.html
0
|
12.09.2016, 11:31 | |
12.09.2016, 11:31 | |
Помогаю со студенческими работами здесь
15
Добавление полей в существующую таблицу Paradox Вопрос: определение полей blob и text Хранение изображений в виде blob полей Отображение полей типа BLOB в DBGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |