Страница 1 из 2
import|export to dbf из випа
Добавлено: 08 апр 2010, 10:28
Alexander
Нужно некоторые выбранные записи таблиц экспортить в dbf, можно ли как-то сделать по типу:
select * from katmc to 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;
причем ошибки валятся даже так:
При выполнении пишет: "Неизвестная ошибка. код 30003"
Таблицы разные, очень не хочется описывать все поля для всех таблиц. как быть?
Добавлено: 08 апр 2010, 10:44
edward_K
1.поиском в vipprogr.chm PutTableToDBF, это метод вьюхи.
2.есть функции по работе с dbf , медленно, но надежно если не забыть проверить что файл открылся.
3. Есть "прямой sql" - на форуме обсуждалось. Там могете запрос построить и выполнить.
4. Можно еще порыскать насчет компиляции lot файлов из галки.
ну и так далее.
Добавлено: 08 апр 2010, 10:48
Alexander
нашел PutTableToDBF, все работает, а вот с импортом вопрос...
Добавлено: 14 апр 2010, 12:04
Alexander
1. Можно ли описать временную таблицу как дубликат существующей?
2. Можно ли как-нибудь дернуть всю строчку из dbf в Эту временную таблицу?
Порыскал по форуму, подобные вопросы нашел, но ответов нет...
P.S. Прямой SQL не подходит. Должно работать в том числе и на первазиве
Добавлено: 14 апр 2010, 12:27
edward_K
"Прямой" вроде уже на первасиве пашет.
Добавлено: 14 апр 2010, 13:21
Alexander
может с какими-то патчами и работает...
Только что проверил на том, что стоит у нас: на оракле норм, на первазиве-балалайка...
Добавлено: 26 апр 2010, 11:21
Alexander
возник вопрос по PutTableToDBF, точнее флагам.
Этафункция перезависывает дбф, т.е.
далее
Код: Выделить всё
_loop MyTable
PutTableToDBF(#myTableChild, 'mydbf.dbf', 0);
в дбф получаем записи только по последнему MyTable.
Может есть какой флаг, чтобы дбф не пересоздавалось, а дописываись записи?
Добавлено: 26 апр 2010, 12:20
Vik
По-моему, только два флага. 0 - выгружать с текущими ограничениями, ptfFullTable - выгружать без учета ограничений.
Добавлено: 28 апр 2010, 15:17
RAJAH
А коды ошибок PutTableToDBF что означают? Вот у меня, например, 4, файл DBF не создаётся.
Добавлено: 05 май 2010, 12:07
RAJAH
Неужели все отдыхают или в отпуске?
Добавлено: 05 май 2010, 19:31
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;
Добавлено: 06 май 2010, 09:31
RAJAH
Хм... Получается, надо пустую заготовку сделать? Мне казалось, что в случае отсутствия файла, он должен создаваться...
Добавлено: 06 май 2010, 10:55
Vik
Вам правильно кажется. Файл создается, если отсутствует. Я никогда его не создаю заранее. И еще ни разу не получал какой-либо ошибки, используя данный метод, хотя очень часто им пользуюсь.
Добавлено: 06 май 2010, 16:13
Vik
Тут, скорее всего, не файл не найден, а узел вьюхи. Вы во вьюху таблицу добавили? В select as добавили поля, которые хотите увидеть в дбф? Может стоит на валидность проверить перед использованием метода?
Добавлено: 11 май 2010, 10:15
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".