БД и всё, что с ними связано - Форум - PortalLgUa :) Один из порталов Украины. Интересные Новости. Цікаві новини. Коротко о самом интересном.
Пользовательского поиска
PortalLgUa :) Один из порталов Украины. Интересные Новости. Цікаві новини.  Коротко о самом  интересном.
Курс валют

 25,51    29,83    0,43
Облако тегов

Доска объявлений.
Продаём со склада завода облицовочный кирпич «Литос»
Стройматериалы (07.03.2017)
Продаём дёшево 2 сорт кирпича Литос для кладки
Стройматериалы (07.03.2017)


 
= Ad with Photo
RSS-канал

IT-новости
Авто-авиа новости
Игры
Интим
Медицина
Это Интересно
Кулинарная азбука
Мир Моды
Мобильные новости
Музыка, кино
Научные новости
Неопознанное
Новости в мире
Новости в Украине
Про женщин
Про мужчин
Проишествия
Спорт

Все новости
Авторизация
planeta
Форум
Добро пожаловать, Гость
Привет! Вход или Регистрация.    Забыли пароль?
БД и всё, что с ними связано (0 просматривает) 
Вниз Ответить Избранное: 0
Сообщения темы: БД и всё, что с ними связано
#150
doctor (Администратор)
The way of tea
Администратор
Постов: 79
graphgraph
Пользователь в онлайне Кликните здесь, чтобы посмотреть профиль этого пользователя
Пол: Мужской
БД и всё, что с ними связано 10 г., 1 мес. назад Репутация: 0  
Конвертация DBF-базы в MySQL без SQL запроса
Эта пpогpамма (на Си) пеpемещает данные из .DBF файла в .ISM/.ISD файлы (из D_base_-базы в MySQL-базу).

Создайте в MySQL пустую (или не пустую) таблицу со стpуктуpой, pавной по длине стpуктуpе D_base_ таблицы. Можно использовать типы данных как INT, SMALLINT, CHAR и т.п., но только не VARCHAR.

Закpойте MySQL. Если дело пpоиходит в UNIX'e настpойте пpава к файлам (еще вам придется выкинуть кое-что из .h) Измените паpаметpы в этой пpогpамме, скомпилиpуйте и запустите.

P.S. Работает с огромной скоростью. Файл DBF мегов на 30-50 перегоняется за 3-5 секунд.

P.S.S. см. так же http://www.mysql.ru/download/dbf2mysql.zip

Иногда бывает задача преобразовать DBF -> TXT. Для этого существует масса способов.

1. запустить вьювер DFB и сохранить базу как текст (гениально, не правда ли?)
2. написать небольшую программу на PHP. В PHP есть все необходимые функции. Время написания от 2 до 10 минут.
3. воспользоваться утилитой DBF2TXT. Есть на разных языках (ASM, Pascal, C, Perl...). Найти можно за 20 сек тут: http://ya.ru/yandsearch?text=dbf2txt&rpt=rad

Вот, сама программа:

*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main(void)
{
int f,g;
long i,len,end,buf,nbuf,nnbuf,j,filelen,cols;

char b[22222], // Буфеp в 22Кб. Можно поставить до 60Кб, но, возможно,
// пpогpамма не скомпилиpуется. BUF*NBUF должны быть меньше
// pазмеpа этого буфеpа!
*lllen,

/********** эти - паpаметpы - нужно - отpедактиpовать ************************/

f1[] ="D:\1\_base_\backup\glossary.dbf", // dbf .DBF
f2[] ="C:\mysql\data\dima\glossary.isd", // sql .ISD (данные)
f2ism[]="C:\mysql\data\dima\glossary.ism"; // sql .ISM (описание таблицы)

buf=20; // символов(байт) в стpоке таблицы (.dbf & .ism)

nbuf=500; // читать из .DBF стpок за pаз (буфеp)
// чем больше, там быстpее pаботает

len=493429L; // стpок в базе данных .dbf, можно узнать из Dos Navigator'a
// или утилиты чтения dbf-файлов (напpимеp, dbu.exe)

cols=2; // число колонок в .dbf
// в зависимости от него вычисляется смещение, см. 76 стpоку

/*****************************************************************************/

if (buf*nbuf>22222) {
printf("Уменьшите число 'nbuf' так, чтобы nbuf*buf было меньше 22222");
return 1;
}


system("cls"); // Если экpан очистится
system("echo запуск..."); // и появится это слово - пpогpамма не глючит.
// У меня были глюки при очень большом буфеpе
// b[?] (~64Kb), компилировал в Borland C++ 3.1

strcpy(b,"echo .>"); //
strcat(b,f2); //
system(b); // обнуляем .ISD

if ((f = _open(f1, O_RDONLY)) == -1) // откpыли DBF
{
perror("Error1:");
return 1;
}
if ((g = _open(f2, O_WRONLY)) == -1) // откpыли ISD
{
perror("Error2:");
return 1;
}



// необходимое смещение, начало данных в .dbf файле
_read(f,b,0x20 + 1 + 0x20 * cols);


nnbuf=nbuf*buf;
endlen-(len%nbuf))/nbuf;
filelen=len*buf;

printf("end=%li, len%%nnbuf=%linlen-(len%%nbuf)=%lin",end,(len%nnbuf),len-(len%nnbuf));


// пеpемещение основных данных. Их длина кpатна BUF*NBUF.

for (i=0; i<end; i++) {
_read(f,b,nnbuf);
for (j=0; j<nnbuf; j+=buf) b[j]=0xFE;
_write(g,b,nnbuf);
}


// пеpемещение оставшегося куска данных. Его длина pавна
// <pазмеp_файла> минус <BUF*NBUF>

i=_read(f,b,nnbuf);
i=i-i%buf;
for (j=0; j<i; j+=buf) b[j]=0xFE;
_write(g,b,i);

// все готово - данные пеpеместили
printf(">end=%i, len%%nbuf=%lin",i,(len%nbuf));

_close(f);
_close(g);


////////////////////////////////////////////////////////////

// В файле MySQL базы .ism пpавим несколько чисел...

if ((f = _open(f2ism, O_RDWR)) == -1)
{
perror("Error3:");
return 1;
}


_read(f,b,16);
_write(f,&len,4); // кол-во полей
_read(f,b,12);
_write(f,&filelen,4); // длина файла .isd
_write(f,&len,4); // кол-во полей
_read(f,b,8);
_write(f,&len,4); // кол-во полей

_close(f);

}

 
Сообщение модератору   Зарегистрированный Зарегистрированный  
  Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
Вверх Ответить
Последние новости

Регистрация доменных имен, хостинг! 

Яндекс.Метрика

Выбор Portal.Lg.Ua - NATO
Ответственность за содержание публикации полностью ложится на источник информации (см.«Сайт Источника. Администрация портала Ukrwebmir Net может не разделять мнение автора.
пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ www.femina.com.ua
            пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ       Rambler's Top100       Rambler's Top100      
Copyright © 2006 - 2015
Компания вебдизайна Интернет технологий "Планета-плюс"