On-line: Pasha, гостей 2. Всего: 3 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 104
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.11.06 01:06. Заголовок: Ошибка _DBFCDX/1020 для APPEND FROM


/*
Подскажите кто может. Как боротся с ошибкой:

Error _DBFCDX/1020 Ошибка в типе данных
Called from __DBTRANS(0)
Called from __DBAPP(0)
Called from MAIN(23)

При копирование записей с одной базы в другую возникает эта ошибка.
Я в структуру новой базы вставил с 58 поля 4 новых поля:
NKODDOST;N;1;0
CKODDOST;C;25;0
SUMDVER;N;2;0
NKALITKA;N;1;0
И теперь при копирование записей возникает ошибка и на Clipper'e и
на Harbour'e.
Вообще-то это происходит всегда, когда добавляешь в DBFCDX-драйвер
дополнительные поля в середине базы.

Для решения этой проблемы приходиться запускать утилиту bdbfs.exe
и ручками копировать с одной базы в другую.
Достало это. Подскажите пожалуйста как решить эту проблему.

Ниже привожу пример.
*/

FUNCTION MAIN()
LOCAL aDbf

#ifndef __HARBOUR__
#else
REQUEST HB_CODEPAGE_RU866
hb_SetCodepage( "RU866" )
REQUEST HB_LANG_RU866
HB_LANGSELECT("RU866")
#endif
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )

USE ("dog_stru.dbf") ALIAS BASE_NEW EXCLUSIVE NEW
aDbf := BASE_NEW->(DBSTRUCT())
CLOSE BASE_NEW

DBCREATE("dog_new.dbf", aDbf)
USE ("dog_new.dbf") ALIAS BASE_NEW NEW

SELECT BASE_NEW
SET DELETED OFF
APPEND FROM ("dogovor.dbf")
SELECT BASE_NEW
? LASTREC()

wait

RETURN NIL


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 31 , стр: 1 2 All [только новые]


постоянный участник


Пост N: 43
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 29.11.06 00:16. Заголовок: Re:


Лукашевский пишет:

 цитата:
И кстати, не будете ли Вы так любезны продемонстрировать Вашу функцию?


Не буду В подобных случаях использую или команду APPEND FROM или соответствующую ей встроенную функцию.

Еще раз внимательно рассмотрите код который Вы предлагаете использовать вместо APPEND FROM

Function Append1From (from)
local f_num, f_pos, f_get
if PCOUNT() = 1
append blank
endif
for f_num=1 TO (from)->(FCOUNT())
f_pos = FIELDPOS( (from)->(FIELDNAME(f_num)) )
if f_pos > 0
f_get = (from)->(FIELDGET(f_num))
if VALTYPE(f_get) = TYPE(FIELDNAME(f_pos))
FIELDPUT(f_pos, f_get)
endif
endif
next
DBCOMMIT()
return .T.

Да она работает, да она проверяет тип поля, а дальше что.
А если VALTYPE(f_get) <> TYPE(FIELDNAME(f_pos)) тогда FIELDGET(f_pos) что даст?
Наверное не всегда то, что ожидалось. Вы ведь просто теряете данные!

Не случайно в документации по APPEND FROM указывается, что КОПИРУЕМЫЕ ПОЛЯ ДОЛЖНЫ БЫТЬ ОДНОГО ТИПА, а то будет вам ошибка времени исполнения, а другими словами смотри, что делаешь, не будет Clipper за тебя думать!
Хотите анализируйте структуру таблицы приемника и таблицы источника (с помощью DBStruct) до вызова APPEND FROM, хотите пишите обработчик ошибок, хотите пишите свою функцию и там ловите ошибки, хотите ничего не делайте, надейтесь что все будет нормально.

Ну и сама реализация - код Димы пошустрее будет.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 116
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.06 00:59. Заголовок: Re:


Петр пишет:

 цитата:
Ну и сама реализация - код Димы пошустрее будет.



Петр ! Вы только отчасти правы. Здесь самое главное не быстродействие, а возможность сохранения записей из базы "приемника". И вы все расматриваете только одну ситуацию, а именно что база "приемник" целая, т.е. нет "битых" записей. Если они есть, то труба на всё. Т.е. нужно делать обработку и на прием "битых" записей.
Я переодически с таким сталкиваюсь. И причину понять не могу.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 45
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 29.11.06 10:13. Заголовок: Re:


Andrey пишет:

 цитата:
Здесь самое главное не быстродействие, а возможность сохранения записей


1) Одно другому не помеха 2) речь именно о сохранении, а не о сознательной потере данных

Andrey пишет:

 цитата:
И вы все расматриваете только одну ситуацию



Я рассматривал не ситуацию, а конкретный код и его возможное поведение

Andrey пишет:

 цитата:
а именно что база "приемник" целая, т.е. нет "битых" записей


Здесь не совсем понял Вашу мысль,
но если в базе (приемнике, источнике - неважно) действительно есть "битые" записи - "то труба на всё" Если серьезно, то ситуация не из приятных.
Но, думаю, Вы что-то напутали с терминологией.

Andrey пишет:

 цитата:
Т.е. нужно делать обработку


Согласен, и реализация такой обработки может происходить по разному.
Разработчики APPEND FROM предложили свой вариант - не самый худший.
Ни ГЛЮКОМ, ни ошибкой здесь и не пахнет, стандартное задокументированое поведение.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 118
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.06 17:26. Заголовок: Re:


Dima
Дима, я тебе несколько файлов могу скинуть на мыло, там еще несколько моих функций сидят.
Сюда кинуть не могу, слишком много.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 490
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.11.06 17:32. Заголовок: Re:


Andrey пишет:

 цитата:
Дима, я тебе несколько файлов могу скинуть на мыло


cмотри личное сообщение (ЛС)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 122
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.12.06 19:59. Заголовок: Re:


Так, а как быть если записи базы откуда копируем "битые" ?
Т.е. записей МЕМО поля нехватает, записи с мусором и т.д.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 494
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.12.06 20:25. Заголовок: Re:


Andrey пишет:

 цитата:
Т.е. записей МЕМО поля нехватает, записи с мусором и т.д.


была та же проблема и не раз , клиенты меня просто задергали.
в общем в Clipper я отказался от использования memo полей.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 123
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.12.06 15:28. Заголовок: Re:


Хорошо, с мемо-полями понятно, что информацию не востановить, а как быть при копировании записей, если
Clipper или Harbour ругается на ошибку чтения и просто сваливается программа ?
Как написать обрабоку такой ситуации.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 127
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.12.06 11:11. Заголовок: Re:


Дима, а где ты хранишь данные типа МЕМО-полей.
Для них же по барабану кто "рушит", Клипер или Харбор.
Да вообще-то рушит скорее всего система, откуда-же идет мусор ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 497
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.12.06 15:08. Заголовок: Re:


Andrey пишет:

 цитата:
Дима, а где ты хранишь данные типа МЕМО-полей.


В символьных полях длиной от 100 до 250 символов , больше не нужно было.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 52
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.12.06 16:58. Заголовок: Re:


Andrey пишет:

 цитата:
Хорошо, с мемо-полями понятно, что информацию не восстановить


Попытаться можно. Например с помощью программы ASC (Advantage and SIx Commander)
(автор Юрий Сухарев: suv - частый гость этого форума).
Файл ->Доктор - совмещает проверку заголовка, memo, а также содержимого НЕ-memo полей (например, для поиска переполнения *** в числовых полях) (это из описания).
Или вручную.


 цитата:
Да вообще-то рушит скорее всего система, откуда-же идет мусор ?


Этот вопрос в сети обсуждался довольно часто. Ищите.
Устранить причину разрушения memo надо в первую очередь.

Лично я храню MEMO или в dbt
(проще структура, легче восстанавливать, размер при современных объемах ЖД значения не имеет),
или в базе символьное поле - путь + имя файла (или просто имя файла), MEMO соответственно в указанном файле ( txt, rtf, doc, xls, jpg - в общем, что нужно).
При втором подходе есть свои плюсы и минусы. Но все можно решить.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 31 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 334
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет