import|export to dbf из випа

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

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

Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

import|export to dbf из випа

Сообщение Alexander »

Нужно некоторые выбранные записи таблиц экспортить в dbf, можно ли как-то сделать по типу:
select * from katmc to dbf test;
пытался написать так:

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

SQL select * from katmc to dbf test;
выдает ошибку, так:

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

SQL select * from katmc dbf test;
компилит, но при выполнении летят непонятные ошибки...
полный текст:

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

interface ifctest;
   create view select * from katmc;
browse b1;
fields
   katmc.name;
end;
handleevent
   cmInit:{
      SQL select * from katmc dbf test;   
   }
end;   
end;   
причем ошибки валятся даже так:

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

SQL select * from katmc;   
При выполнении пишет: "Неизвестная ошибка. код 30003"

Таблицы разные, очень не хочется описывать все поля для всех таблиц. как быть?
Последний раз редактировалось Alexander 08 апр 2010, 10:46, всего редактировалось 1 раз.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1.поиском в vipprogr.chm PutTableToDBF, это метод вьюхи.
2.есть функции по работе с dbf , медленно, но надежно если не забыть проверить что файл открылся.
3. Есть "прямой sql" - на форуме обсуждалось. Там могете запрос построить и выполнить.
4. Можно еще порыскать насчет компиляции lot файлов из галки.
ну и так далее.
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

нашел PutTableToDBF, все работает, а вот с импортом вопрос...
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

1. Можно ли описать временную таблицу как дубликат существующей?
2. Можно ли как-нибудь дернуть всю строчку из dbf в Эту временную таблицу?

Порыскал по форуму, подобные вопросы нашел, но ответов нет... :-(

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

Сообщение edward_K »

"Прямой" вроде уже на первасиве пашет.
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

может с какими-то патчами и работает...
Только что проверил на том, что стоит у нас: на оракле норм, на первазиве-балалайка... :-(
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

возник вопрос по PutTableToDBF, точнее флагам.
Этафункция перезависывает дбф, т.е.

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

view 
   MyTable.nrec == myTableChild.cmytable
далее

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

_loop MyTable
   PutTableToDBF(#myTableChild, 'mydbf.dbf', 0);
в дбф получаем записи только по последнему MyTable.
Может есть какой флаг, чтобы дбф не пересоздавалось, а дописываись записи?
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

По-моему, только два флага. 0 - выгружать с текущими ограничениями, ptfFullTable - выгружать без учета ограничений.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

А коды ошибок PutTableToDBF что означают? Вот у меня, например, 4, файл DBF не создаётся.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Неужели все отдыхают или в отпуске?
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Может стандартные коды вам помогут:

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

const tsOk                                =  0;
const tsInvalidOperation                  =  1;
const tsIOError                           =  2;
const tsFileNotOpen                       =  3;
const tsNotFound                          =  4;
const tsDuplicateKey                      =  5;
const tsInvalidKeyNumber                  =  6;
const tsDifferentKeyNumber                =  7;
const tsInvalidPositioning                =  8;
const tsEndOfFile                         =  9;
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Хм... Получается, надо пустую заготовку сделать? Мне казалось, что в случае отсутствия файла, он должен создаваться...
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Вам правильно кажется. Файл создается, если отсутствует. Я никогда его не создаю заранее. И еще ни разу не получал какой-либо ошибки, используя данный метод, хотя очень часто им пользуюсь.
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Тут, скорее всего, не файл не найден, а узел вьюхи. Вы во вьюху таблицу добавили? В select as добавили поля, которые хотите увидеть в дбф? Может стоит на валидность проверить перед использованием метода?
Последний раз редактировалось Vik 11 май 2010, 12:48, всего редактировалось 1 раз.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Всё добавил. Вот фрагмент кода:

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

.create view vmol as
select katmol.nrec, attrval.vdate
from attrval, katmol
where
((
katmol.nrec    /== attrval.crec and
10000000000A1h  == attrval.cattrnam and
1424            == attrval.wtable
));
.create view ost as
select katmc.nrec, saldomc.kol, saldomc.dsaldo, saldomc.cparty, saldomc.nrec
from katmc, saldomc, katpodr
where
((
nrmol                /== saldomc.cmol and
1                    /== saldomc.sp and
saldomc.cmc          /== katmc.nrec and
katpodr.nrec         /== saldomc.cpodr and
add_day(cur_date, 1) >>= saldomc.dsaldo
))
order sortost by katmc.nrec, saldomc.cparty, saldomc.nrec;
...
.{table 'vmol'
.begin
   nrmol:=vmol.katmol.nrec;
   dzakr:=vmol.attrval.vdate;
   nrmc:=0; 
   SetOrder(ost.tisortost);
   if nrmol = 100000000031Fh then
   begin
     kodosh:=ost.PutTableToDBF(-1, 'D:\1.dbf', 0);
     if kodosh <> 0 then message(kodosh);
   end;
end.
.{table 'ost' by ost.katmc.nrec
.begin
...
Сообщение выдаёт код "4".
Ответить