Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.09.2010, 14:36
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию ИЗ Paradox в MySQL

Возникла необходимость перенести информацию из Paradox BD
в MySQL BD.

Для работы с MySQL пользуюсь ZEOS 7.0.0

Как сделал я:

Базаданных Paradox BD 7 создана была по умолчанию в 'ascii' ANSI кодировке


Код:
Table1.Active:=false;
Table1.TableName:='DB_Main.DB';
Table1.Active:=true;

Table1.First;
Memo1.Lines.ADD('Поле1'+#9+'Поле2'+#9+'Поле3'+#9+'Поле4')
while not Table1.EOF do 
 begin
 Memo1.Lines.ADD(Table1.FieldByName('Поле1').asstring+#9);
 Memo1.Lines.ADD(Table1.FieldByName('Поле2').asstring+#9);
 Memo1.Lines.ADD(Table1.FieldByName('Поле3').asstring+#9);
 Memo1.Lines.ADD(Table1.FieldByName('Поле4').asstring);
 Table1.Next;
 end;

Memo1.Lines.SaveToFile('C:\DB.txt');

дальше в Navicat(MySQl Navigator) выбрал нужную мне БД и Импортировал всроенным мастером информацию в кодировке cp1251.

В свойствах: ZConnection в Properties добавил следующее:

Код:
codepage=cp1251

В результате в двух DBGrid получил идентичные таблицы в разных технологиях УРА!

вопрос остаётся открытым, для переноса информации из БД в БД необходимо использовать прогонку по БД, или всё-таки юзать SQL запросы.

Последний раз редактировалось Uniq!, 30.09.2010 в 16:18.
Ответить с цитированием
  #2  
Старый 30.09.2010, 18:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Если вы подключите и парадокс и мускул например через BDE, то используя гетерогенные запросы это можно делать, а вот если два драйвера разные, то ваш способ более простой.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 30.09.2010, 20:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,107
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, с некоторыми ограничениями, можно сделать и через разные драйвера.

Код:
procedure MoveData(QFrom, QTo : TQuery); // обобщенные параметры
var
  I : Integer;
begin
  QFrom.First;
  While Not QFrom.EOF Do
      Begin
         QTo.Append;
         For I := 0 To QFrom.Fields.Count-1 Do
           QTo.FieldByName(QFrom.Fields[i].FieldName).Value := QFrom.Fields[i].Value;
         QTo.Post;
         QFrom.Next;
      End;
end;
Ответить с цитированием
  #4  
Старый 30.09.2010, 21:51
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну я бы не назвал такой способ
Цитата:
юзать SQL запросы
Он в приниципе не отличается от того, что сделал автор.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 01.10.2010, 02:01
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Ну с точки зрения циклических переборов и драйверов я всё сделал правильно. Во многом разобрался. 6ть баз отправилось в Table'цы ,без потерь.

Еду Дальше. ОТ циклов надо переходить к SQL-запросам. Но логики пока не хватает.

Исходные данные:

Cтруктура:

Первый столбик таблицы - Артикулы(уникальные)
Структура 4буквы+4цифры. (АААА0001)

Пользователь вводит только буквы, а прога просчитывает номер артикула сама.

У меня алгоритм такой:
1)Фильтрую базу по первым 4ём буквам остаётся например
АААА0001
АААА0002
АААА0003
Надо добавить АААА0004

2)Спускаюсь к последнему полю(АААА0003), (маленький алгоритмик по получению строки 'АААА0004': копирую последние 4ре('0003') -> в int -> +1 -> в '0004' -> 'АААА0004');

3) Добавляю запись путём ZQuery1.FieldByName...

Вопрос:
Как используя SQL запрос, добавляли бы вы новую запись?

Последний раз редактировалось Uniq!, 01.10.2010 в 02:09.
Ответить с цитированием
  #6  
Старый 01.10.2010, 02:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,107
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я бы в этом случае разделил бы артикул на 2 поля - буквы отдельно, цифры отдельно. Возможно...
Ответить с цитированием
  #7  
Старый 01.10.2010, 02:54
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

комбинаций букв до 10... Т.е. АААА ББББ ВВВВ (вот такого 10)
Выделять в отдельную колонку: высока честь с точки зрения алгоритмики да... код убдет проще.

Вот запрос который даст мне все АААА, где активным будет последний
А теперь: как бы его быстро просчитать увеличив на 1
Select * FROM bd WHERE Article LIKE 'АААА%' ORDER BY Article DESC

Последний раз редактировалось Uniq!, 01.10.2010 в 03:01.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025