Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
Добрый день, уважаемые!

Может подскажете, как сейчас модно конвертировать данные из dbf-ных
Clipper-ных баз, чтобы индексы использовались (.ntx) и вообще все проходило гладко, а то у меня что-то не всходит?

первый вопрос, какой ODBC драйвер нужно использовать и где его взять, потому как с Microsoft dBase и Microsoft Visual FoxPro, с помощью которых я пытался решить проблему "в лоб", есть проблемы :

1) в полях с кривой нулевой датой, возникает Error 8114 Error converting data type DBTYPE_DBDATE to datetime.

запросы типа SELECT * FROM OPENQUERY(DB_DBF, 'SELECT * FROM table')

Билл рекомендует в данном случае просто исключать колонки из запроса, что соответсвенно не устраивает :)

2) при использовании Visual Foxpro-шного драйвера дата конвертится в '1899-12-30', но возникают проблемы с кодировкой, потому как 0x29 байт в заголовках dbf-ок проставлен 00h, а не 65h, как обойти эту проблему,
чтобы он как-то рюхал codepage.

3) MS DTS кстати тоже ругается на поля с датой какой-бы драйвер из выше перечисленных не использовался.

Заранее благодарю за ответ.
6 июн 03, 12:27    [224027]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
1) в полях с кривой нулевой датой,

Ну так а исправить дату почему нельзя ???
6 июн 03, 12:33    [224037]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
Потому что dbf-ки неприкасаемые, должны оставаться AS IS, а всякие нулевые даты должны загоняться в сиквел как NULL
6 июн 03, 13:04    [224090]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Потому что dbf-ки неприкасаемые,

Ну так а если импортировать не из неприкасаемых, а из их копий с исправленными датами?
6 июн 03, 13:07    [224094]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
Некто Никола Коперник к своему опусу об эллиптических орбитах движения планет сделал эпиграф: "Нельзя-ли сотворить мир попроще?"

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

Ну блин должен же где-то быть нормальный ОДБС драйвер или OLE DB
провайдер под клипперные базы, чтобы и все
конвертилось куда следует и сразу.
6 июн 03, 13:13    [224110]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
A.Pankov
Member

Откуда:
Сообщений: 4
Да, есть проблема с датой из dbf, я тоже наелся.
Я пользуюсь DTS:
1. создаю в sqlserver таблицу с символьными полями где в оригинале дата.
2. закачиваю в нее dbf-ку. Даты она жрет любые в этом случае
3. скриптом отлавливаю и меняю некорректные значения дат, типа так:
update t1 set d1='01.01.1913' where d1='00.00.0000'
А потом уже закачиваю в нужную таблицу, вовсю пользуясь функцией convert с явным указанием формата, иначе можно еще нагореть на перепутанных ДД.ММ-ММ.ДД
7 июн 03, 10:45    [224866]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145719
Попробуйте так.
Приконектесь не через ODBC, а через Jet.

Как - см. БОЛ
C. Use the Microsoft OLE DB Provider for Jet


В этом случае Вы сможете полноценно использовать имена полей и корректно обрабатывать их значения используя CASE WHEN... , ISDATE(), ISNULL()
7 июн 03, 10:46    [224867]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
При использовании полей с датами в запросе через Jet тоже не всходит:

Could not get the current row value of column '[DBFSource]...[decl01].DAT_PD' from the OLE DB provider 'Microsoft.Jet.OLEDB.4.0'. The provider cannot determine the value for this column.
[OLE/DB provider returned message: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.]
[OLE/DB provider returned message: Unexpected error from external database driver (10019).]

Да и вообще какая-то лажа получается. я тут обнаружил что даты в исходных DBF нормальные, надыбал клиппер 5, залез и посмотрел в оригинале, а Visual FoxPro их все в '1899-12-30', впрочем если открыть через Excel, результат аналогичный, весь текст нормально (причем в правильной кодировке, что меня особенно поразило), а даты все пустые.

Надыбал драйвер DataDirect for ODBC 4.2, очень занимательная вещь, только за бабки и глючная www.datadirect-technologies.com, c кучей настроек в том числе специально под клиппер, там все и формат файла, и транслятор и индексы какие юзать, все бы хорошо, только работает неустойчиво, спонтанно начинает ошибки сыпать, дбф-ку прочесть до конца не может и т.д.
Одно порадовало, вроде все данные как в оригинале и текст и даты на месте и похожие на правду, а не нулл, 0 и т.д.

В общем проблема до сих пор не решена :((
8 июн 03, 13:45    [225134]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
Свершилось чудо!!!

Да здраствуют DataDirect Technologies ибо воистину пекутся они о братьях своих!

Глюки в этих драйверах порождались трансляционной Dll-кой ivtrn19.dll, сорцы
к которой поставляются в дистрибутиве (причем, что просто удивительно, только к ней).

При переносе данных через DTS возникала ошибка

[DataDirect][ODBC dBase Driver]
Error using translation DLL
Output buffer size not equal to input buffer size
[DataDirect][ODBC dBase Driver]
Error in row

Учитывая, что конвертятся в ней только текстовые поля причем 1 в 1,
я решил что не стоит вычислять длину выходящих данных, а брать ее равной длине входящих данных и везде в translat.c, где есть строчки "if (pcbValueOut != NULL) *pcbValueOut = <выражение>" просто прописал "if (pcbValueOut != NULL) *pcbValueOut = cbValueIn"

сбилдил Dll (nmake.exe winnt.mak), подложил вместо оригинальной и все запуляло!!! причем как надо и куда надо!!!

Так что ежели кому надо сконвертить любой кривой DBF или еще что-нибудь
выкачивайте солюшены с www.datadirect-technologies.com, мальца дебажте и юзайте на здоровье! Must have!!!

Единственное огорчает эвалюэйшен, может кто-нибудь хакнет?
на astalaviste.box.sk серийники только под 3.6 версию :((
8 июн 03, 17:29    [225193]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145719
Нормальные даты в клипере хранятся в виде YYYYMMDD. Гляньте, так ли это через просмотрщик текстовых файлов.
8 июн 03, 18:00    [225196]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
Именно так.
Старые добрые досовские средства нормально работают с этими дбф-ками,
а под виндами, пока DataDirect не заюзал, все через пятую точку.
8 июн 03, 18:07    [225199]     Ответить | Цитировать Сообщить модератору
 Re: Импорт данных из Clipper в MSSQL  [new]
Palich
Member

Откуда:
Сообщений: 11
Прямой линк на драйвера

http://datadirect.topdownloads.com/pub/bws/bws_88/evals/connect_odbc/win32/420/win9xnt.zip
8 июн 03, 18:34    [225204]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить