Страница 1 из 2

Pervasive + Delphi

Добавлено: 30 авг 2011, 16:45
paparocii
Добрый день

Стоит задача - сделать программу которая из файла 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 на прямую?

Re: Pervasive + Delphi

Добавлено: 30 авг 2011, 17:30
edward_K
1. уйти с первасива.
2. перейти на адо
3. где то ту болталась компонента для АДО для работы с типом comp.
4. Подумать все таки чтобы все работало на вип-е.
5. кто то тут спрашивал как правильно вставлять записи - но не помню плтаформу.

Re: Pervasive + Delphi

Добавлено: 31 авг 2011, 15:16
Начинающий путь
Использую PDAC 9 для Pervasive 8 и Delphi 5, работаю компонентами TPVQuery на чтение-активно читаю katmc, проблем не возникает.
идут запросы еще такого плана

Код: Выделить всё

select a.nrec, a.TABN, .......... from LSchet a left join Persons b on a.TPerson = b.NREC order by a.Tabn
NREC обрабатывается нормально...
Update тоже проходят, если только запись не заблокирована пользователем иначе выдается ошибка... (Использую очень редко в конверторах и когда никто не работает...)
Insert не пробовал...

Да, PvTable точно работать не будет, ошибка конверсии типа comp на NREC

Re: Pervasive + Delphi

Добавлено: 31 авг 2011, 16:28
paparocii
Сегодня определил, что все работает и не вешает engine пока я не трогаю attrval. Все отрабатывает если я не трогаю эту таблицу. Если вставляю туда данные - то вуаля - висяк.

Запрос формирую:

Код: Выделить всё

        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+''')';
Думаю, может что не заполняю, потому как и через VIP наблюдался висяк.

если сравнить запись которую создаю я в Attrval с записью созданной ГАЛАКТИКой, то отличается только в значении поля VLVAR (memo-значение атрибута), 0x и 0x0000000000545854.
В Pervasive поле имеет тип LONGVARBINARY, в ORACLE - float(22). В оракле если смотреть по триггерам, это поле ссылается на таблицу SYS#MEMO. Куда она ссылается в Pervasive?

Re: Pervasive + Delphi

Добавлено: 31 авг 2011, 18:01
edward_K
видимо никуда - это мемо поле в первасиве сидит непосредственно в этой же таблице. Для некоторых табл сидит в AllMemo,

Re: Pervasive + Delphi

Добавлено: 31 авг 2011, 18:39
paparocii
копаем дальше...

Причиной падения engine является запрос, запускаю его в Control Centre:

Код: Выделить всё

select nrec,VSTRING 
from "attrval" 
where WTABLE=1716 and CATTRNAM=281474976710960
	and CREC=281474976710676; 
Запрос отрабатывает, но если закрываешь Control Center - висяк - вешается engine.

шайтан, машина...

Что с этим делать? Косяк ODBC...

:???:

И еще, убираем условие в запросе WTABLE - и все работает :shock:

Код: Выделить всё

select nrec,VSTRING 
from "attrval" 
where CATTRNAM=281474976710960
	and CREC=281474976710676; 
Делаем просто условие по ATRVAL.WTABLE=1716 и все - Engine готов!!!

Кто-нибудь повторите эксперимент, если не жалко!!!

Re: Pervasive + Delphi

Добавлено: 01 сен 2011, 11:54
Начинающий путь
На, держи, у меня так работает (обычный глюк в преобразованиях типов или еще чего)

Код: Выделить всё

SELECT * FROM "ATTRVAL" where Convert("WTABLE",SQL_numeric)=1102;

Re: Pervasive + Delphi

Добавлено: 01 сен 2011, 12:29
paparocii
Спасибо

заработало

Re: Pervasive + Delphi

Добавлено: 01 сен 2011, 16:29
LaaLaa
paparocii писал(а):Спасибо
заработало
А сколько у Вас записей в таблице ATRVAL?

Re: Pervasive + Delphi

Добавлено: 05 сен 2011, 00:07
paparocii
LaaLaa писал(а): А сколько у Вас записей в таблице ATRVAL?
от количества записей не зависит - на тестовой - 10-к записей, а на рабочей - очень много... так как внешнии атрибуты используем для связи накл-актов сбытом со снабжением

Re: Pervasive + Delphi

Добавлено: 12 сен 2011, 17:37
savov
А на кой такой гемор (т.е. Delphi)? Что, суперсложный файл екселя? Я делал импорт в Гал-ку (и обратно) из екселя на чистом випе, есть же ф-ии чтения ячеек екселя, тут на форуме в опыте выложены. Причем даже импортировал данные, которые каждый раз размещались в разных ячейках. Все ок шло!

Re: Pervasive + Delphi

Добавлено: 15 сен 2011, 16:15
Начинающий путь
Часом никто не открывал мемо поля таблиц (Pervasive показывает их как longvarbinaty) в Delphi?

Re: Pervasive + Delphi

Добавлено: 19 сен 2011, 08:19
Semi-bit
savov писал(а):А на кой такой гемор (т.е. Delphi)? Что, суперсложный файл екселя? Я делал импорт в Гал-ку (и обратно) из екселя на чистом випе, есть же ф-ии чтения ячеек екселя, тут на форуме в опыте выложены. Причем даже импортировал данные, которые каждый раз размещались в разных ячейках. Все ок шло!
Имхо, покамест в Дельфи всё же удобнее работать, чем в Випере, да и проблем на чистом Випе возникает ничуть не меньше.

Re: Pervasive + Delphi

Добавлено: 17 окт 2011, 16:07
Vitaliy
Может оно и удобнее, но возникают проблемы с журнализацией при модификациях, проблемы ограничения доступа к данным при чтении и т.д.
Но это все мелочи по сравнению с тем, что с Галактики 9.2 поддержка первасива будет прекращена

Re: Pervasive + Delphi

Добавлено: 16 дек 2011, 19:30
Syte
О, класс, помогло решение.
А то я уже 2 месяца не сплю после перехода на 8.10.
В 7.12? кстати, с этим всё было хорошо - то, что вешало engine на базе 8.10, на предыдущей версии работает на ура.

Никто не знает, как это лечить, чтобы не пользоваться CONVERT'ом?
а то так не по индексу вроде...
а база большая, в одном attrval'е 2.5 миллиона записей...