Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как реализовать обработку строк в БД 
:(
    Опции темы
VladBD
Дата 8.1.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: 1
Всего: 5



Есть такая задача:
в БД (dbf, mdb или другого локального плана) с обязательными полями ID, ФИО (или ИОФ, ИО, ФИ) нужно создать несколько служ. полей типа Фамилия, Имя, Отчество, Пол и т.д. - определить фрагменты из поля ФИО и разнести в соответствующие поля. Процесс определения должен происходить с учетом всяких настроек обработки и с использованием общего справочника на FireBird. Может даже нужно будет реализовывать автоматический разбор и ручной (при неудачном автоматическом).
Вопрос как грамотно все это реализовать?
сейчас крутится в таком виде
Код

тбл.начало
цикл по записям
  процедура разбор(ФИО, var Ф, И, О, Пол)
  update tbl set fam=ф, ... where id=xxx
конец цикла

1) Можно попробовать в ХП сделать - но для анализ фрагментов строк трудновато будет работать в ХП.
2) Хочется подойти со стороны ООП. Может класс реализовать, но как он поможет в выполнении обработки полей БД, т.к. конечный рез-тат все равно нужно записывать в исходные таблички
PM MAIL   Вверх
remax
  Дата 8.1.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



VladBD, для начала, определись с проблемой - нужно решить задачу, нужно с выпендросом переписать уже работающий алгоритм, и.т.д... В зависимости от этого  будут разные советы. 

P.S. Если уже есть готовое решение, зачем за уши подтягивать ООП?

Добавлено через 12 минут и 9 секунд
С точки зрения теории баз данных, я думаю, все должно осуществляться в самой базе. т.е. используя триггеры и хранимые процедуры. Как только добавляешь новую запись или меняешь поле  ФИО - запускаешь свой парсер. А чтобы проще было  (локалка у тебя тоже FB) - используй UDF... 


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
VladBD
Дата 8.1.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: 1
Всего: 5



remax, нужно переписать работающий алгоритм. Выпендрос хочу организовать в том, что будет компонент, его свойства будут через RTTI отображаться в настройке обработки (там только пол проставить или по полной прогнать, или обращение в виде дательного падежа сделать типа "Дорогому Ивану Николаевичу") - заодно и разобраться во всем этом надо (переписать для самообучения) ...
UDF - тоже вариант, но мне надо заливать данные и выгружать потом рез-таты обработки. 
Вопрос: Как мне понять когда закончился парсинг при инсерте блока в 50000 строк при включенных триггерах? - хотя они сразу в пределах транзакции отрабатываются... так?

да и FB база сетевая - т.е. основная прога обработки коннектится к ней...

Это сообщение отредактировал(а) VladBD - 8.1.2008, 14:52
PM MAIL   Вверх
remax
Дата 8.1.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Цитата(VladBD @ 8.1.2008,  14:49)
Вопрос: Как мне понять когда закончился парсинг при инсерте блока в 50000 строк при включенных триггерах? - хотя они сразу в пределах транзакции отрабатываются... так?

Да, конечно


Цитата(VladBD @ 8.1.2008,  14:49)

Выпендрос хочу организовать в том, что будет компонент, его свойства будут через RTTI отображаться в настройке обработки (там только пол проставить или по полной прогнать, или обращение в виде дательного падежа сделать типа "Дорогому Ивану Николаевичу")

Честно говоря, мне кажется это лишним. 


P.S. А зачем так сложно - две базы? Типа не хочешь испортить работающую базу? - так скопируй и на копии развлекайся...

Это сообщение отредактировал(а) remax - 8.1.2008, 15:17


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
VladBD
Дата 8.1.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: 1
Всего: 5



Цитата
А зачем так сложно - две базы?

основная БД на FB - там находятся справочники. А остальные таблицы даются на обработку (их может быть нескончаемое кол-во) - вот приходишь ты со своей табличкой в EXCEL и говоришь вот сграбил где-то данные и хочу разнести по полям и каждому написать "Уважаемый г-н Иванов". Моя прога цепляет твою табличку, и забивает нужные тебе поля парсинговыми данными...
но суть такова - что рез-тат я тебе должен выгрузить в исходный формат (в этом случае EXCEL).

PM MAIL   Вверх
remax
  Дата 8.1.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Так как ты описываешь - это совершенно отдельная задача, не требующая дополнительных справочников. Но, предположим, для чего-то справочники на сервере нужны. Тогда бы я, все равно временно импортировал данные в таблицу на сервер. Максимально быстро производил бы преобразования. Затем экспорт в нужный формат и уничтожение временных данных. Сам подумай, если для обработки локальной инфы тебе нужна информация с сервера - ты все нужное тянешь на клиента. А учитывая, что речь идет о десятках тысяч записей - получается довольно накладно. 


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
VladBD
Дата 8.1.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: 1
Всего: 5



Ну вот смотри я выбираю такое решение:
- импорт данных на сервак Id, FIO
- стоит триггер на добавление, редактирование данных - он запускает некоторую UDF
- экспорт результата и уничтожение временных данных

вопрос в том как мне при выполнении UDF раскидать значения по 3 полям?

наверное придется хранимой процедурой делать...


Это сообщение отредактировал(а) VladBD - 8.1.2008, 19:51
PM MAIL   Вверх
remax
Дата 8.1.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



стоп.
В UDF - ты можешь записать дополнительные, пользовательские функции, которых нет в FB. Например, для твоего парсинга. Вызов этой функции делаешь в триггере. В нем же, используешь результат для внесения в нужные поля. все.


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
VladBD
Дата 8.1.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: 1
Всего: 5



буду разбираться. просто функция возвратит одно значение... но мысль обхода уже есть...
попробую - отпишусь...
PM MAIL   Вверх
remax
Дата 8.1.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Остальный значения вернешь через параметры


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.