Pervasive + Delphi
Модераторы: m0p3e, edward_K, Модераторы
Pervasive + Delphi
Добрый день
Стоит задача - сделать программу которая из файла excel формирует документы в ГАЛАКТИКЕ (Наряд заказ, накладные, акты и прочее). Для этого использую Delphi с компонентами PDAC для доступа к БД Pervasive. Предварительно с конвертировав DDF словарь, и настроил доступ через ODBS.
Доступ к Pervasive из Делфи есть, вижу все ГАЛАКТические таблицы кроме тех что c protect-ом (x$users, x$jurnal...).
Однако, если просто делаю Select-ы и в БД ничего не меняется, то программа делфи отрабатывает нормально, но если же открываю таблицу и добавляю новые данные, то при закрытии вешается весь ENGINE на сервере, в ручную приходится перезапускать ENGINE.
Решили что дело в КОМПОНЕНТЕ - сделали все то же через BDE, без использования PDAC. Программа c добавлением новых данных отрабатывает, но через некоторое время (2-5 минут после) опять ENGINE вешается.
Ладно, пусть это все из-за доступа к данным - решили каждый запрос insert либо update запускать через VIP. Селекты остались на PDAC компоненте. Все то же - выходишь из программы и вешается ENGINE.
Сейчас сделаю программу, которая будет полностью генерировать скрипт на VIP по добавлению всего набора данных.
Может у кого были подобные проблемы?
Как подружить DELPHI и Pervasive на прямую?
Стоит задача - сделать программу которая из файла excel формирует документы в ГАЛАКТИКЕ (Наряд заказ, накладные, акты и прочее). Для этого использую Delphi с компонентами PDAC для доступа к БД Pervasive. Предварительно с конвертировав DDF словарь, и настроил доступ через ODBS.
Доступ к Pervasive из Делфи есть, вижу все ГАЛАКТические таблицы кроме тех что c protect-ом (x$users, x$jurnal...).
Однако, если просто делаю Select-ы и в БД ничего не меняется, то программа делфи отрабатывает нормально, но если же открываю таблицу и добавляю новые данные, то при закрытии вешается весь ENGINE на сервере, в ручную приходится перезапускать ENGINE.
Решили что дело в КОМПОНЕНТЕ - сделали все то же через BDE, без использования PDAC. Программа c добавлением новых данных отрабатывает, но через некоторое время (2-5 минут после) опять ENGINE вешается.
Ладно, пусть это все из-за доступа к данным - решили каждый запрос insert либо update запускать через VIP. Селекты остались на PDAC компоненте. Все то же - выходишь из программы и вешается ENGINE.
Сейчас сделаю программу, которая будет полностью генерировать скрипт на VIP по добавлению всего набора данных.
Может у кого были подобные проблемы?
Как подружить DELPHI и Pervasive на прямую?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Pervasive + Delphi
1. уйти с первасива.
2. перейти на адо
3. где то ту болталась компонента для АДО для работы с типом comp.
4. Подумать все таки чтобы все работало на вип-е.
5. кто то тут спрашивал как правильно вставлять записи - но не помню плтаформу.
2. перейти на адо
3. где то ту болталась компонента для АДО для работы с типом comp.
4. Подумать все таки чтобы все работало на вип-е.
5. кто то тут спрашивал как правильно вставлять записи - но не помню плтаформу.
-
- Местный житель
- Сообщения: 258
- Зарегистрирован: 13 апр 2006, 11:57
- Откуда: Бегущий к Галактике
Re: Pervasive + Delphi
Использую PDAC 9 для Pervasive 8 и Delphi 5, работаю компонентами TPVQuery на чтение-активно читаю katmc, проблем не возникает.
идут запросы еще такого плана
NREC обрабатывается нормально...
Update тоже проходят, если только запись не заблокирована пользователем иначе выдается ошибка... (Использую очень редко в конверторах и когда никто не работает...)
Insert не пробовал...
Да, PvTable точно работать не будет, ошибка конверсии типа comp на NREC
идут запросы еще такого плана
Код: Выделить всё
select a.nrec, a.TABN, .......... from LSchet a left join Persons b on a.TPerson = b.NREC order by a.Tabn
Update тоже проходят, если только запись не заблокирована пользователем иначе выдается ошибка... (Использую очень редко в конверторах и когда никто не работает...)
Insert не пробовал...
Да, PvTable точно работать не будет, ошибка конверсии типа comp на NREC
Re: Pervasive + Delphi
Сегодня определил, что все работает и не вешает engine пока я не трогаю attrval. Все отрабатывает если я не трогаю эту таблицу. Если вставляю туда данные - то вуаля - висяк.
Запрос формирую:
Думаю, может что не заполняю, потому как и через VIP наблюдался висяк.
если сравнить запись которую создаю я в Attrval с записью созданной ГАЛАКТИКой, то отличается только в значении поля VLVAR (memo-значение атрибута), 0x и 0x0000000000545854.
В Pervasive поле имеет тип LONGVARBINARY, в ORACLE - float(22). В оракле если смотреть по триггерам, это поле ссылается на таблицу SYS#MEMO. Куда она ссылается в Pervasive?
Запрос формирую:
Код: Выделить всё
Q1.SQL.Text:='insert into "attrval" (nrec,atl_lastdate,atl_lasttime,atl_originoffice,atl_lastuser,'+#13#10
+'atl_owner,WTABLE,CREC,CATTRNAM,VSTRING)'+#13#10
+' VALUES ('+nrecVal+',CURDATE(),CURTIME(),1,'+atl_lastuser+','+#13#10
+atl_lastuser+',1716,'+nrecPoruch+','+nrecAttrname+','''+value+''')';
если сравнить запись которую создаю я в Attrval с записью созданной ГАЛАКТИКой, то отличается только в значении поля VLVAR (memo-значение атрибута), 0x и 0x0000000000545854.
В Pervasive поле имеет тип LONGVARBINARY, в ORACLE - float(22). В оракле если смотреть по триггерам, это поле ссылается на таблицу SYS#MEMO. Куда она ссылается в Pervasive?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Pervasive + Delphi
видимо никуда - это мемо поле в первасиве сидит непосредственно в этой же таблице. Для некоторых табл сидит в AllMemo,
Re: Pervasive + Delphi
копаем дальше...
Причиной падения engine является запрос, запускаю его в Control Centre:
Запрос отрабатывает, но если закрываешь Control Center - висяк - вешается engine.
шайтан, машина...
Что с этим делать? Косяк ODBC...
И еще, убираем условие в запросе WTABLE - и все работает
Делаем просто условие по ATRVAL.WTABLE=1716 и все - Engine готов!!!
Кто-нибудь повторите эксперимент, если не жалко!!!
Причиной падения engine является запрос, запускаю его в Control Centre:
Код: Выделить всё
select nrec,VSTRING
from "attrval"
where WTABLE=1716 and CATTRNAM=281474976710960
and CREC=281474976710676;
шайтан, машина...
Что с этим делать? Косяк ODBC...
И еще, убираем условие в запросе WTABLE - и все работает
Код: Выделить всё
select nrec,VSTRING
from "attrval"
where CATTRNAM=281474976710960
and CREC=281474976710676;
Кто-нибудь повторите эксперимент, если не жалко!!!
-
- Местный житель
- Сообщения: 258
- Зарегистрирован: 13 апр 2006, 11:57
- Откуда: Бегущий к Галактике
Re: Pervasive + Delphi
На, держи, у меня так работает (обычный глюк в преобразованиях типов или еще чего)
Код: Выделить всё
SELECT * FROM "ATTRVAL" where Convert("WTABLE",SQL_numeric)=1102;
Re: Pervasive + Delphi
Спасибо
заработало
заработало
Re: Pervasive + Delphi
А сколько у Вас записей в таблице ATRVAL?paparocii писал(а):Спасибо
заработало
Re: Pervasive + Delphi
от количества записей не зависит - на тестовой - 10-к записей, а на рабочей - очень много... так как внешнии атрибуты используем для связи накл-актов сбытом со снабжениемLaaLaa писал(а): А сколько у Вас записей в таблице ATRVAL?
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Pervasive + Delphi
А на кой такой гемор (т.е. Delphi)? Что, суперсложный файл екселя? Я делал импорт в Гал-ку (и обратно) из екселя на чистом випе, есть же ф-ии чтения ячеек екселя, тут на форуме в опыте выложены. Причем даже импортировал данные, которые каждый раз размещались в разных ячейках. Все ок шло!
-
- Местный житель
- Сообщения: 258
- Зарегистрирован: 13 апр 2006, 11:57
- Откуда: Бегущий к Галактике
Re: Pervasive + Delphi
Часом никто не открывал мемо поля таблиц (Pervasive показывает их как longvarbinaty) в Delphi?
-
- Постоянный обитатель
- Сообщения: 123
- Зарегистрирован: 01 фев 2007, 12:45
- Откуда: Магнитогорск
- Контактная информация:
Re: Pervasive + Delphi
Имхо, покамест в Дельфи всё же удобнее работать, чем в Випере, да и проблем на чистом Випе возникает ничуть не меньше.savov писал(а):А на кой такой гемор (т.е. Delphi)? Что, суперсложный файл екселя? Я делал импорт в Гал-ку (и обратно) из екселя на чистом випе, есть же ф-ии чтения ячеек екселя, тут на форуме в опыте выложены. Причем даже импортировал данные, которые каждый раз размещались в разных ячейках. Все ок шло!
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
Re: Pervasive + Delphi
Может оно и удобнее, но возникают проблемы с журнализацией при модификациях, проблемы ограничения доступа к данным при чтении и т.д.
Но это все мелочи по сравнению с тем, что с Галактики 9.2 поддержка первасива будет прекращена
Но это все мелочи по сравнению с тем, что с Галактики 9.2 поддержка первасива будет прекращена
-
- Посетитель
- Сообщения: 39
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Волгоград Sealed Air
- Контактная информация:
Re: Pervasive + Delphi
О, класс, помогло решение.
А то я уже 2 месяца не сплю после перехода на 8.10.
В 7.12? кстати, с этим всё было хорошо - то, что вешало engine на базе 8.10, на предыдущей версии работает на ура.
Никто не знает, как это лечить, чтобы не пользоваться CONVERT'ом?
а то так не по индексу вроде...
а база большая, в одном attrval'е 2.5 миллиона записей...
А то я уже 2 месяца не сплю после перехода на 8.10.
В 7.12? кстати, с этим всё было хорошо - то, что вешало engine на базе 8.10, на предыдущей версии работает на ура.
Никто не знает, как это лечить, чтобы не пользоваться CONVERT'ом?
а то так не по индексу вроде...
а база большая, в одном attrval'е 2.5 миллиона записей...