Импорт файла DBF во временнйю таблицу

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Гаврилюк Марина
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 27 авг 2007, 12:16
Откуда: ОАО КЧХК
Контактная информация:

Импорт файла DBF во временнйю таблицу

Сообщение Гаврилюк Марина »

Ребята,помогите, пожалуйста. Опыта практически у меня никакого.
Сразу при запуске этого интерфейса Галактика вылетает по Runtime. Что ей не хватает?

table struct ppmtemp
(
nn : string[30],
nob : string[60],
drasx : date,
gm : word,
cu : double,
bazost : double,
newost : double,
rasxod : double,
tekost : double,
sklkod : string[60],
cnrec : comp
)
with index
(
ppmtemp = gm+sklkod+nn
)
;

Interface nelikvid 'Æîû íѺ ñó¿ªÑ¡¿∩ ßóδΦÑ 12 ¼Ñß∩µÑó' DoAccept, EscClose, cyan;
Show at (1,1,70,15);
var
mOpen : longint;
mode,countr,kz : integer;
create view nel
as select ppmtemp.*;
Screen SRC show at (,,,);
Buttons
cmOk, Default;
cmCancel;

<<




<. OK .> <. ÄΓ¼Ñ¡á .>
>>

end;


HandleEvent
cmOk:
{
mode:= 15648;

mOpen:=DBFOpen('\\hq\public\galaxy\Gal712\TmpFrm\ppm43069.dbf',mode);
kz:=DBFGetFirst(mOpen);
logstrtofile('logs.log',kz);
while kz=0 do
{logstrtofile('logs.log',mode);
ppmtemp.nn:=DBFGetFieldValue(mOpen,'nn');
ppmtemp.gm:=DBFGetFieldValue(mOpen,'gm');
ppmtemp.cu:=DBFGetFieldValue(mOpen,'cu');
ppmtemp.bazost:=DBFGetFieldValue(mOpen,'bazost');
ppmtemp.newost:=DBFGetFieldValue(mOpen,'newost');
ppmtemp.rasxod:=DBFGetFieldValue(mOpen,'rasxod');
ppmtemp.tekost:=DBFGetFieldValue(mOpen,'tekost');
ppmtemp.sklkod:=DBFGetFieldValue(mOpen,'skl');
ppmtemp.cnrec:=DBFGetFieldValue(mOpen,'nrec');
insert current ppmtemp;
kz:=DBFGetNext(mOpen);
};
DBFClose(mOpen);
}
end;
end.
Alpiton
Посетитель
Сообщения: 40
Зарегистрирован: 18 апр 2006, 09:19

Сообщение Alpiton »

mOpen:=DBFOpen('\\hq\public\galaxy\Gal712\TmpFrm\ppm43069.dbf',mode);
if mOpen = 0 exit ;
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

Не плохо было бы еще явное приведение к типу поставить для каждого поля, GetField возвращает string!

Да и консрукция вот такая более правильная!

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

insert ppmtemp set
  ppmtemp.nn         :=DBFGetFieldValue(mOpen,'nn'),
  ppmtemp.gm        :=DBFGetFieldValue(mOpen,'gm'), 
  ppmtemp.cu         :=DBFGetFieldValue(mOpen,'cu'), 
  ppmtemp.bazost   :=DBFGetFieldValue(mOpen,'bazost'),
  ppmtemp.newost  :=DBFGetFieldValue(mOpen,'newost'), 
  ppmtemp.rasxod  :=DBFGetFieldValue(mOpen,'rasxod'), 
  ppmtemp.tekost   :=DBFGetFieldValue(mOpen,'tekost'), 
  ppmtemp.sklkod   :=DBFGetFieldValue(mOpen,'skl'), 
  ppmtemp.cnrec    :=DBFGetFieldValue(mOpen,'nrec'); 
Кстати еще можете проверить имена полей в dbf может там чего напутали!
Гаврилюк Марина
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 27 авг 2007, 12:16
Откуда: ОАО КЧХК
Контактная информация:

Сообщение Гаврилюк Марина »

PViP, большое спасибо!!!!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Задача следующая, есть БД в которой сделали документы (basedoc) которые надо выгрузить в ДБФ и загрузить в другую базу, но изменив у них нреки, т.к. в другой базе такие нреки уже существуют. Проблема в том что есть другие таблицы, которые ссылаются на этот basedoc по нреку, потому видимо придется писать что-то своё, в связи с этим вопрос:

А если ДБФ имеет стркутуру таблицы (выгружался из другой базы) и надо загрузить этот ДБФ файл во временную таблицу в памяти, имеющую такую же структуру, можно как-то одной командой сделать?

1. надо объявить таблицу в памяти - аналогичную basedoc (не перечисляя всех полей :) )
2. как-то быстро заполнить эту таблицу из ДБФ файлов.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

как быстро выгрузить известно - PutTableToDBF, тока в 810 вроде не очень сработало, а в 712 работало точно. При вгрузке перечислять все поля не обязательно - тока те что нужно заполнить (даже nrec не надо).
можно vip вызвать с лотом для вгрузки в какую либо таблу схемы user , а потом уже из нее вставить в basedoc(если сразу боитесь), тока понадобиться еще в cfg пару параметров выставить.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

1. ну выгрузить можно лотом select c условием и сразу в БДФ, со всеми полями.
2. А вот про "вгрузку" не понял... схемы user или D_user не нашел...
3. Как быть со связанными таблицами stepdoc и spstep.

План был такой, закачить эти таблицы в память, далее при вставке уже генерить нреки и сгенеренные значения подставлять в ссылки.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

вообще в модуле "обмен бизнес документами" вроде был экспорт -импорт До.
насчет схемы - посмотрите таблу pick например.
насчет stepdoc и spstep- после вставки basedoc накопите во времянку nrec и ключ по которому стыкуете таблы ( stepdoc прктически не содержит инфы - его можно и сразу вставить).
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Мне, если честно, нужны не ДО, а заявки на ремонт, они тоже в basedoc живут, но в обмене бизенс документами такого типа документов нет.

В заявках услуга всегда одна (пока что), потому:
сделал следующее: написал в SQL выгрузку где вываливаются все нужные данные в одну строку в ДБФ.
Дальше випом подхватываю и вношу во все таблицы изменения.
Перед этим привел в порядок НРЕКи услуги, все каталоги по ремонтам, отпускные единицы.
gritv
Посетитель
Сообщения: 34
Зарегистрирован: 09 авг 2005, 18:42
Откуда: Воронеж

Сообщение gritv »

Не знаю, как там экспорт -импорт ДО в модуле "обмен бизнес документами", но про экспорт -импорт Основные средства в 7.12 могу сказать следующее. Экспорт настраивается в файл DBF, только выглядит он очень странно. А при попытке его импортировать Галактика выдала: "Отсутствует DBF-файл...". Все тут и заглохло. Неужели не применим этот модуль? Кто-нибудь подскажите!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

не давайте длинные имена и не называйте по русски. Про ос не скажу, но механизм там общий - должно работать. Если нет так сломали значит и пишите в ТП.
gritv
Посетитель
Сообщения: 34
Зарегистрирован: 09 авг 2005, 18:42
Откуда: Воронеж

Сообщение gritv »

Работает и в ОС тоже. Набралась терпения и дождалась конца. Экспорт из базы шел 2,5 часа, а импорт в базу 7,5 часов. Уж больно долго, да и некоторые фильтры не удалось наложить. Решила отказаться от такой возможности.
Ответить