Расширенные процедуры и работа с данными
От: _spin_ Россия  
Дата: 02.11.05 15:29
Оценка:
Всем доброго времени суток!

Пишу xp_ которая должна побайтно разобрать файл и нужные данные поместить в таблицу БД.

С соданием, подключением к СУБД и работой с файлами всё понятно.

Вопрос следующий: как из расширенной процедуры внести данные в таблицу (или вообще работать с таблицами БД)?
... <<QUADRO 2 — Дорожка 05>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re: Расширенные процедуры и работа с данными
От: Danchik Украина  
Дата: 02.11.05 16:14
Оценка:
Здравствуйте, _spin_, Вы писали:

__>Всем доброго времени суток!


__>Пишу xp_ которая должна побайтно разобрать файл и нужные данные поместить в таблицу БД.


__>С соданием, подключением к СУБД и работой с файлами всё понятно.


__>Вопрос следующий: как из расширенной процедуры внести данные в таблицу (или вообще работать с таблицами БД)?


Что то вспоминается овставке из сторед процедуры:
INSERT INTO MyTable (Field1, Field2)
EXEC XP_MyProc param1, param2

Остальное в хелпах как и почему вызывать srv_rpcparams, srv_setcollen, srv_setcoldata, srv_sendrow, srv_senddone, давно это было
Тем более в инете есть много врапперов облегчающих жизнь дельфиста. Гуглите...
Re[2]: Расширенные процедуры и работа с данными
От: _spin_ Россия  
Дата: 02.11.05 17:02
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Что то вспоминается овставке из сторед процедуры:

D>
D>INSERT INTO MyTable (Field1, Field2)
D>EXEC XP_MyProc param1, param2
D>

D><skipped, sorry>

Это я знаю, но это не подходит.

Возможно, я неправильно выразился. Хочется работать с данными непосредственно из кода процедуры, т.е. из Delphi, а не обрабатывать результаты работы процедуры на T-SQL.

Просто там больше семидесяти полей надо заполнить для каждого файла, их все описывать для передачи в MSSQL — муторно. Хочется более красивого решения.
... <<#1 — 04 Vivid 10 000 (Jazzy lounge mix)>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re[3]: Расширенные процедуры и работа с данными
От: Danchik Украина  
Дата: 02.11.05 17:35
Оценка:
Здравствуйте, _spin_, Вы писали:

[Skip]

__>Это я знаю, но это не подходит.


__>Возможно, я неправильно выразился. Хочется работать с данными непосредственно из кода процедуры, т.е. из Delphi, а не обрабатывать результаты работы процедуры на T-SQL.


Вы имеете в виду Debug в Delphi, а не смотреть результат запроса? Могу посоветовать как провести такой Debug.

__>Просто там больше семидесяти полей надо заполнить для каждого файла, их все описывать для передачи в MSSQL — муторно. Хочется более красивого решения.


Тоесть у Вас красивым решением является привязать XP к определенной таблице намертво...
70 полей описать один раз, помоему малая из зол которую необходимо будет решить при написании процедуры, которая вставляет в реальную таблицу.

Кстати что процедура должна делать то? И абстрагируемся от функциональности "вставка данных" до понятия "вернуть набор данных", который необходимо вставить в определенную таблицу.
Re[4]: Расширенные процедуры и работа с данными
От: _spin_ Россия  
Дата: 02.11.05 17:56
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Вы имеете в виду Debug в Delphi, а не смотреть результат запроса? Могу посоветовать как провести такой Debug.

Нет, как юзать Debug для XP я знаю.

D>Тоесть у Вас красивым решением является привязать XP к определенной таблице намертво...

Вариант с INSERT — тоже "мёртвая" привязка, в общем-то. Не в этом суть. Просто не хочу распылять логику работы между Delphi и T-SQL.

D>70 полей описать один раз, помоему малая из зол которую необходимо будет решить при написании процедуры, которая вставляет в реальную таблицу.

Согласен. Но таблица есть и с ней надо работать.

D>Кстати что процедура должна делать то?

Процедура выполняет разбор сообщения электронной почты. Каждое сообщение кроме стандарнтых полей заголовка RFC-822 имеет ещё ряд полей, используемых для внутренних нужд компании. Дополнительные поля закриптованы и закрыты Base64. Процедура снимает Base64, снимает криптор, разбирает файл по полям, анализирует содержание. В результате работы процедуры формируется некий кортеж значений, однозначно идентифицирующий данное сообщение и его содержание в системе документооборота компании.


D>И абстрагируемся от функциональности "вставка данных" до понятия "вернуть набор данных", который необходимо вставить в определенную таблицу.


Кортеж (см. выше) и будет возвращаемым набором данных. Только вот этот набор я хочу вставить в определённую таблицу средствами Delphi, а не T-SQL.
... <<#2 — 03 Duble inc. Tango forte>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re[5]: Расширенные процедуры и работа с данными
От: Danchik Украина  
Дата: 02.11.05 19:22
Оценка:
Здравствуйте, _spin_, Вы писали:

[Skip]

D>>И абстрагируемся от функциональности "вставка данных" до понятия "вернуть набор данных", который необходимо вставить в определенную таблицу.


__>Кортеж (см. выше) и будет возвращаемым набором данных. Только вот этот набор я хочу вставить в определённую таблицу средствами Delphi, а не T-SQL.


Хм, я че то не понимаю в понятиях красоты реализации... ну да ладно.
Если вас всетаки тянет вставлять данные именно сторед процедурой. То сценарий приблизительно такой:
var
  aToken : array [0..255] of Char;
  ADOCommand : TADOCommand;
begin

  ZeroMemory (@aToken, SizeOf (aToken));
  srv_getbindtoken (proc, @aToken) - получаем токен текущей сесси  

  ADOCommand := TADOCommand.Create (nil);
  try
    ADOCommand.ConnectionString := {придется передавать};
    ADOCommand.Connected := True;
    ADOCommand.Execute (Format ('exec sp_bindsession ''%s''', [string (aToken)]));
    { Ну и вставляем через ADO все что нам влезет.}
  finally
    ADOCommand.Free;
  end;

Думаю красоты тут не прибавилось, а вот скорость упала. What do you think?
Другого способа я незнаю Srv.h (Open Data Services header file) более низкоуровневых процедур не имеет.
Re[6]: Расширенные процедуры и работа с данными
От: _spin_ Россия  
Дата: 02.11.05 19:37
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Хм, я че то не понимаю в понятиях красоты реализации... ну да ладно.

Проехали.

D>Если вас всетаки тянет вставлять данные именно сторед процедурой. То сценарий приблизительно такой:

D><code skipped>
D>Думаю красоты тут не прибавилось, а вот скорость упала. What do you think?
Да уж, не самое быстрое решение. Я так делал, почти -10% от скорости. Получается уродливая смесь ODS API и ADO-классов.

D>Другого способа я незнаю Srv.h (Open Data Services header file) более низкоуровневых процедур не имеет.

Очень жаль, я тоже пока не нашел. Значит буду делать обёртку на T-SQL и описывать все параметры. Хоть и муторно, но немного более гибко.

Спасибо за ответы!

Удачи нам...
... <<#3 — 08 Grant Nelson Free>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re: Расширенные процедуры и работа с данными
От: Lepsik Гондурас https://www.kirdyk.club/
Дата: 03.11.05 18:09
Оценка:
__>Вопрос следующий: как из расширенной процедуры внести данные в таблицу (или вообще работать с таблицами БД)?


точно также как вы делаете это в обычной программе. через ADO — открыли файл, зачитали, положили в таблицу.
Re: Расширенные процедуры и работа с данными
От: svd71 http://visualdesigner.fatal.ru/
Дата: 03.11.05 21:27
Оценка:
Здравствуйте, _spin_, Вы писали:

__>Всем доброго времени суток!


__>Пишу xp_ которая должна побайтно разобрать файл и нужные данные поместить в таблицу БД.


__>С соданием, подключением к СУБД и работой с файлами всё понятно.


__>Вопрос следующий: как из расширенной процедуры внести данные в таблицу (или вообще работать с таблицами БД)?


Со строками помоему никак. можно вернуть результат в переменную любого типа. я такую проблему решал так:
загонял данные в блоб или строковую переменную в виде XML-структуры, далее в хранимой разбирал эту структуру и рассовывал по нужным полям.
Правда база у меня была для Interbase. Но думаю в умелых руках принцып можно переложить и на МСсиквел.
можешь в этой структуре хранить как значения, так и имена полей, куда это нужно вписать.
подробнее можно почитать здесь.
Re[2]: Расширенные процедуры и работа с данными
От: _spin_ Россия  
Дата: 04.11.05 07:26
Оценка:
Здравствуйте, svd71, Вы писали:

S>загонял данные в блоб или строковую переменную в виде XML-структуры, далее в хранимой разбирал эту структуру и рассовывал по нужным полям.


Вариант, но не подходит — сильно падает быстродействие.
... <<#2 — 10 Majbour Cheops>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re[3]: Расширенные процедуры и работа с данными
От: svd71 http://visualdesigner.fatal.ru/
Дата: 04.11.05 09:54
Оценка:
Здравствуйте, _spin_, Вы писали:

__>Вариант, но не подходит — сильно падает быстродействие.


Смотря каким парсером пользоваться. Если встроенным мелкомягковским, то падает на много.
Re[4]: Расширенные процедуры и работа с данными
От: _spin_ Россия  
Дата: 04.11.05 10:06
Оценка:
Здравствуйте, svd71, Вы писали:

S>Смотря каким парсером пользоваться. Если встроенным мелкомягковским, то падает на много.


П поподробнее про сторонние парсеры? Что-то я ещё не слышал об использовании в T-SQL сторонних парсеров для разбора текстов.

ЗЫ: Код должен выполняться на стороне сервера в адресном пространстве СУБД.
... <<Звери — О любви>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.