Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2008, 19:42   #1
Djarx
Новичок
Джуниор
 
Регистрация: 21.04.2008
Сообщений: 1
По умолчанию Конвертор

Подскажите пожалуйста существуют ли программы для конвертирования данных из формата dbf в frf, т.е. в MySQL. Нужно перенести данные из таблиц dbf в таблицы на MySQL.
Djarx вне форума Ответить с цитированием
Старый 21.04.2008, 19:53   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это же настолько элементарно...
Киньте на форму пару TTable, подключите одну из них к DBF-таблице, а другую - к FRF-таблице.
Добавьте кнопку для начала преобразования и в его событии опишите последовательный проход по исходной таблице с созданием новых записей в таблице назначения.
Добавьте ShowMessage, чтобы знать, когда эта бодяга завершится.
И все.
mihali4 вне форума Ответить с цитированием
Старый 21.04.2008, 22:39   #3
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

проще говоря слова Михалыча, сделайте всё это в цикле
Код:
while not DBFTable.Eof do
begin
   FRFTable.Insert;
     for i:=0 to DBFTable.Fields.Count-1 do
       begin
         FRFTable.FieldByName(DBFTable.FieldDefs[i].Name).Value := DBFTable.Fields[i].Value;
       end;
     FRFTable.Post;
     DBFTable.Next;
    end;
ну что то типа такого...
писал прямо здесь...
dron-s вне форума Ответить с цитированием
Старый 22.04.2008, 12:51   #4
xDjarx
Пользователь
 
Аватар для xDjarx
 
Регистрация: 22.04.2008
Сообщений: 16
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Это же настолько элементарно...
Киньте на форму пару TTable, подключите одну из них к DBF-таблице, а другую - к FRF-таблице.
Добавьте кнопку для начала преобразования и в его событии опишите последовательный проход по исходной таблице с созданием новых записей в таблице назначения.
Добавьте ShowMessage, чтобы знать, когда эта бодяга завершится.
И все.
А можно немного поподробней, я в программировании новичок.
И разве можно к MySQL подключиться просто через компонент TTable или нужно использовать какой-то другой компонент?
xDjarx вне форума Ответить с цитированием
Старый 22.04.2008, 12:54   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

TADOTable используй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.04.2008, 13:23   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
А можно немного поподробней, я в программировании новичок.
Так вам Дрон-с дал практически готовый вариант кода.
FRFTable - это, как совершенно справедливо подсказал Стилет - ADOTable, для подключения к MySQL-таблице,
а DBFTable - это простой TTable, его подключите к DBF-таблице.
Да, и не забудьте им сделать Open, и DBFTable.First добавить в самое начало процедуры ...

Последний раз редактировалось mihali4; 22.04.2008 в 13:25.
mihali4 вне форума Ответить с цитированием
Старый 24.04.2008, 21:09   #7
xDjarx
Пользователь
 
Аватар для xDjarx
 
Регистрация: 22.04.2008
Сообщений: 16
По умолчанию

Подскажите в чём может быть проблема. Сделал всё как написали, подключаюсь к таблицам, переношу данные, для проверки получившуюся таблицу вывожу на экран в компонент TDBGrid, всё отображается нормально, закрываю программу, захожу на сервер MySQL, а там таблица как была так и осталась без изменений.
xDjarx вне форума Ответить с цитированием
Старый 24.04.2008, 23:08   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
захожу на сервер MySQL, а там таблица как была так и осталась без изменений
А если в своей программке подцепить DBGrid к FRFTable для контроля копирования (и после FRFTable.Post добавить Application.ProcessMessages)?
А если ее после завершения копирования закрыть (грамотно закрыв Connection), а потом снова открыть - данные будут отображаться в DBGrid?
У вас ведь наверняка еще на этапе проектирования формы все коннекты открыты и никогда не закрываются (только если Дельфи закрыть). А это - дурной тон...
mihali4 вне форума Ответить с цитированием
Старый 25.04.2008, 00:48   #9
xDjarx
Пользователь
 
Аватар для xDjarx
 
Регистрация: 22.04.2008
Сообщений: 16
По умолчанию

Все соединения на форме позакрывал. После закрытия соединения, и открытия его снова, в DBGrid перенесённые данные исчезают.
Ещё выводит постоянно такое предупреждение:
Unit1.pas(83): For loop control variable must be simple local variable

Вот код программы:

procedure TForm1.Button2Click(Sender: TObject);
begin
//Table1:=TTable.Create(nil);
Table1.Active:=false;
Table1.DatabaseName:='C:\MyDatabase ';
Table1.TableName:='MyTable.dbf';
Table1.TableType:=ttDBase;

Table1.FieldDefs.Clear;
Table1.FieldDefs.Add('ID',ftInteger ,0,True);
Table1.FieldDefs.Add('Nomer_abon',f tInteger,0,False);
Table1.FieldDefs.Add('Name',ftStrin g,40,False);
Table1.FieldDefs.Add('Adress',ftStr ing,40,False);
Table1.FieldDefs.Add('Potr',ftInteg er,0,False) ;
Table1.FieldDefs.Add('Data',ftDate, 0,False);
Table1.CreateTable;

Table1.Active:=true;
Table1.Insert;
Table1.Fields[0].Value := '3';
Table1.Fields[1].Value := '3';
Table1.Fields[2].Value := 'Ivanov';
Table1.Fields[3].Value := 'Moscow';
Table1.Fields[4].Value := '10000';
Table1.Fields[5].Value := '10.02.2007';
Table1.Post
//Table1.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Table1.Active:=true;
ZConnection1.Connected:=true;
ZTable1.Active:=true;
Table1.First;
while not Table1.Eof do
begin
ZTable1.Insert;
for i:=0 to Table1.Fields.Count-1 do
begin
ZTable1.FieldByName(Table1.FieldDef s[i].Name).Value := Table1.Fields[i].Value;
end;
ZTable1.Post;
Application.ProcessMessages;
Table1.Next;
end;
Table1.Active:=false;
ZConnection1.Connected:=false;
ZTable1.Active:=false;
end;
end.
xDjarx вне форума Ответить с цитированием
Старый 25.04.2008, 01:17   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Ещё выводит постоянно такое предупреждение:
Unit1.pas(83): For loop control variable must be simple local variable
Говорит, что переменную цикла следует объявлять локально, то есть внутри процедуры, которая эту переменную использует.
Нужно добавить:
procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin

Не запоминается...
Ну, не знаю. Вроде бы, на первый вгляд, ошибки не вижу. Единственное - на всякий случай поменял бы местами:
ZTable1.Active:=false;
ZConnection1.Connected:=false;
Но это - так, от безысходности...
Да, еще попробуйте ZConnection1.CommitTrans; перед закрытием.

Кстати, вам не лень писать ZTable1.Active:=false; ZTable1.Active:=True; ?
Есть же короткие аналоги - Open и Close...

Последний раз редактировалось mihali4; 25.04.2008 в 01:24.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертор валют... не понятен принцип работы mid Помощь студентам 7 25.02.2011 23:33
конвертор exe в pas engeneer Паскаль, Turbo Pascal, PascalABC.NET 10 28.07.2008 11:21
Конвертор ZORRO2005 Microsoft Office Excel 16 26.05.2008 10:50
Конвертор IB в FB SunKnight БД в Delphi 1 29.03.2008 20:10