Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

record's...подкиньте умную мысль...


Shade ©   (2007-11-06 15:06:00) 

Доброго времени суток!
Для начала объясню вкратце что вообще пытаюсь сделать:
Есть несоколько программ которые работает с БД своей структуры (в простом случае - обычный типизированый файл). Необходимо выгрузить данные из этой программы в "текстовый" формат(текст,csv...неважно).

Все просто все понятно: открыли файл, прочитали запись - сформировали текстовую строку - записали в файл.

Вопрос собственно в чем: помогите найти красивое решение! =(
Таблиц много->структур много->каждую структуру надо переделать в строку:

rec = record
r1:array[0..2] of char;
r2:array[0..10] of char;
...
end;

str:=rec.r1+'  '+rec.r2+...

с классами можно с помощью rtti пройтись по всем published свойствам экземпляра и получить названия и значения свойств...

как чтото аналогичное можно сделать с рекордами? а то получается немерянное количество кола для "превращения" стурктуры в строку...

Надеюсь более-менее понятно написал..


Shade   (2007-11-06 16:11:00) [1]

ыыы! Люди! спасибо за помощь! стоило только мысли оформить в тексте и появилась идея(насколько умная пока еще не понял) как это реализовать..! пойду обмозговывать...


Shade   (2007-11-06 15:53:00) [2]


> Ega23 ©   (06.11.07 15:47) [15]
> > вопрос именно как сделать "чтото универсальное " на вход
> > которой подается любая определенная структура - на выходе
> > получаем например обычную текстовую строку которая включает
> > в себя все поля из этой структуры разделенный запятой.
> ..> Никак.


Вот и я ничего не придумал...но посчитал что окончательно отупел и растелял все логическое мышление =)


Сергей М.   (2007-11-06 15:50:00) [3]


> как сделать подобное с рекордом


Никак.


Shade   (2007-11-06 15:49:00) [4]


> Сергей М. ©   (06.11.07 15:37) [13]
> > нужно в конце концов просто переветсти данные из закрытого
> > формата в обычные таблицы реляционной БДНу и переводи)
> Что этому мешает ?Исходный формат ты уже знаешь, значит
> можешь сформировать метаданные соответствующей таблицы в
> целевой БД.А перенос данных в сформированную таблицу - дело
> плевое)


ехх...всеравно не так поняли...
дело плевое - но очень муторное...
Таблица1.Field1:=Структура1.Field1
...
Таблица1.Field123:=Структура1.Field123
...
...
Таблица55.Field1:=Структура55.Field1
...
Таблица55.FieldN:=Структура55.FieldN

я почему и привел пример с классом - можно написать функцию которая примет любой класс и переберет все его свойства и значения свойств и запишет это все в тот же текстовый или xml файл....
вопрос был как сделать подобное с рекордом...


Ega23   (2007-11-06 15:47:00) [5]


> вопрос именно как сделать "чтото универсальное " на вход
> которой подается любая определенная структура - на выходе
> получаем например обычную текстовую строку которая включает
> в себя все поля из этой структуры разделенный запятой...
>


Никак.


Shade   (2007-11-06 15:39:00) [6]


> Джо ©   (06.11.07 15:28) [11]
> > rec = record> r1:array[0..2] of char;> r2:array[0..10]
> of char;> ...> end;Так почему тогда не:rec = record  e:
> array [0..23] of Char;end;?Или это просто для примера?


это именно пример разобранной структуры которая хранится в файле...нужно эту структуру выгрузить в виде нормальной таблицы (в примере - с двумя полями r1 и r2)

вопрос именно как сделать "чтото универсальное " на вход которой подается любая определенная структура - на выходе получаем например обычную текстовую строку которая включает в себя все поля из этой структуры разделенный запятой...


Сергей М.   (2007-11-06 15:37:00) [7]


> нужно в конце концов просто переветсти данные из закрытого
> формата в обычные таблицы реляционной БД


Ну и переводи)
Что этому мешает ?
Исходный формат ты уже знаешь, значит можешь сформировать метаданные соответствующей таблицы в целевой БД.
А перенос данных в сформированную таблицу - дело плевое)


Shade   (2007-11-06 15:32:00) [8]

да йопт...=)

кем?  пользователем, переводчиком с японского, web-программером который эти данные будет прикручивать на сайт...ну нужно в конце концов просто переветсти данные из закрытого формата в обычные таблицы реляционной БД....


Джо   (2007-11-06 15:28:00) [9]

> rec = record
> r1:array[0..2] of char;
> r2:array[0..10] of char;
> ...
> end;

Так почему тогда не:
rec = record
 e: array [0..23] of Char;
end;
?
Или это просто для примера?


Сергей М.   (2007-11-06 15:26:00) [10]


> как к этому прикрутить ClientDataSet ?
>


Зачем ?

Зачем тебе "читаемый вид" ? Кем или чем читаемый ?


Shade   (2007-11-06 15:24:00) [11]


> Сергей М. ©   (06.11.07 15:21) [7]
> > нужно разобрать структуру бд (документации нет, структура
> > бд не описана)Вот этим для начала и займись.


занялся, разобрался... как к этому прикрутить ClientDataSet ?


Shade   (2007-11-06 15:23:00) [12]


> Select * from ...


блин...какой селект? из чего? таблица - "обычный файл of MyRecord" - кто мне к нему sql запрос будет обрабатывать?


Сергей М.   (2007-11-06 15:21:00) [13]


> нужно разобрать структуру бд (документации нет, структура
> бд не описана)


Вот этим для начала и займись.


Shade   (2007-11-06 15:20:00) [14]

ммм... а как мне поможет ClientDataSet? чего то я туплю...


Ega23   (2007-11-06 15:20:00) [15]


> нужно разобрать структуру бд (документации нет, структура
> бд не описана) и выгрузить данные в нормалный читаемый вид.
> ..
>


Select * from ...


Shade   (2007-11-06 15:18:00) [16]

это в принципе неважно...."в текстовый, в csv, загрузить в бд oracle..."...вопрос не в этом...
нужно разобрать структуру бд (документации нет, структура бд не описана) и выгрузить данные в нормалный читаемый вид...


Правильный_Вася   (2007-11-06 15:14:00) [17]

ClientDataSet


Ega23   (2007-11-06 15:13:00) [18]


> с классами можно с помощью rtti пройтись по всем published
> свойствам экземпляра и получить названия и значения свойств.


В классе можно написать метод формирования строки на основании своей информации

type
 TCustomDBRecord = class
 public
   constructor Create (...)
   procedure Init(....)
   function MakeDataString : string; virtual;
 end;  

 TFirstTableClass = class(TCustomDBRecord)
 public
   Field1 : Integer;
   Field2 : string;  
   function MakeDataString : string; override;
 end;


Ход мыли ясен?

P.S. Я бы всё-таки не изобретал велосипед, а TClientDataSet использовал бы.


Сергей М.   (2007-11-06 15:10:00) [19]


> Необходимо выгрузить данные из этой программы в "текстовый"
> формат


Нафига именно в текстовый ? Поясни ..


Наверх

Титульная страница Поиск, карта сайта Написать письмо