Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 07.11.2008, 13:16   #1
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.09.2008
Сообщений: 31
Репутация: 0
По умолчанию insert через FIB в firebird

Подскажите как сделать полноценный insert из delphi через FIB в firebird в blob-поле.
insert нужно делать через DataSet.
Сколько находил статей так везде рассматривается или отдельно загрузка данных в blob-поле через loadfromfile или рассматривают только insert, а таких чтоб данные в таблицу грузились комплексно (вся строка сразу) - нет.
желательно конечно примерчик.
ilya198292 вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


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


Старый 08.11.2008, 10:48   #2
LuceferAB
Пользователь
 
Пол:Мужской
Регистрация: 11.03.2008
Сообщений: 158
Репутация: 33
По умолчанию Re: insert через FIB в firebird

А чем стандартный (у фибов) пример не устраивает:
http://devrace.com/ru/fibplus/articles/2261.php

CREATE TABLE BIOLIFE (
ID INTEGER NOT NULL,
CATEGORY VARCHAR (15) character set WIN1251 collate WIN1251,
COMMON_NAME VARCHAR (30) character set WIN1251 collate WIN1251,
SPECIES_NAME VARCHAR (40) character set WIN1251 collate WIN1251,
LENGTH__CM_ DOUBLE PRECISION,
LENGTH_IN DOUBLE PRECISION,
NOTES BLOB sub_type 1 segment size 80,
GRAPHIC BLOB sub_type 0 segment size 80);

SelectSQL:
SELECT * FROM BIOLIFE

UpdateSQL:
UPDATE BIOLIFE Set
ID=?NEW_ID,
CATEGORY=?NEW_CATEGORY,
COMMON_NAME=?NEW_COMMON_NAME,
SPECIES_NAME=?NEW_SPECIES_NAME,
LENGTH__CM_=?NEW_LENGTH__CM_,
LENGTH_IN=?NEW_LENGTH_IN,
NOTES=?NEW_NOTES,
GRAPHIC=?NEW_GRAPHIC
WHERE ID=?OLD_ID

InsertSQL:
INSERT INTO BIOLIFE(
ID,
CATEGORY,
COMMON_NAME,
SPECIES_NAME,
LENGTH__CM_,
LENGTH_IN,
NOTES,
GRAPHIC
)
VALUES (
?NEW_ID,
?NEW_CATEGORY,
?NEW_COMMON_NAME,
?NEW_SPECIES_NAME,
?NEW_LENGTH__CM_,
?NEW_LENGTH_IN,
?NEW_NOTES,
?NEW_GRAPHIC
)

DeleteSQL:
DELETE FROM BIOLIFE
WHERE ID=?OLD_ID

RefreshSQL:
SELECT * FROM BIOLIFE
WHERE
ID=?OLD_ID


Соотвественно обращение идет через TBlobField
pFIBDataSet1.Edit;
TBlobField(pFIBDataSet1.FieldByName('GRAPHIC')).Lo adFromFile(OpenD.FileName);
pFIBDataSet1.Post;

соответственно смотрим TBlobField и видим:
ms-help://borland.bds5/delphivclwin32/!!MEMBERTYPE_Methods_DB_TBlobField.html
Есть методы (кроме чтения/записи в файл) чтения и записи в поток:
procedure LoadFromStream(Stream: TStream);
procedure SaveToStream(Stream: TStream);

Добавлено через 3 минуты
>таких чтоб данные в таблицу грузились комплексно (вся строка сразу) - нет.
------
Как ты себе это представляешь? В одной текстовой SQL строке? Такое вроде как невозможно.
Делаешь инсерт как на примере, в местах где у тебя болбы - ставишь параметры. А затем в эти поля записываешь содержимое блобов (если не из файла, то из потока)

Последний раз редактировалось LuceferAB; 08.11.2008 в 10:52.. Причина: Добавлено сообщение
LuceferAB вне форума
 
Ответить с цитированием Вверх
Старый 08.11.2008, 16:24   #3
ilya198292
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.09.2008
Сообщений: 31
Репутация: 0
По умолчанию Re: insert через FIB в firebird

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

pFIBDataSet1.Edit;
TBlobField(pFIBDataSet1.FieldByName('GRAPHIC')).Lo adFromFile(OpenD.FileName);
pFIBDataSet1.Post;

затолкать
вот сюда
?NEW_GRAPHIC
при этом где находится сам инсерт?
может есть у кого примерчик готовый, чтоб можно было проверить и поэксперементировать
ilya198292 вне форума
 
Ответить с цитированием Вверх
Старый 08.11.2008, 18:22   #4
LuceferAB
Пользователь
 
Пол:Мужской
Регистрация: 11.03.2008
Сообщений: 158
Репутация: 33
По умолчанию Re: insert через FIB в firebird

С инсертом тоже самое. Ты для таблиц, не содержащих блоб поля куда инсерт в датасете запихиваешь? Вот туда же и пихай. Для блоб соответственно поля можешь не указывать. Файрберд по умолчанию должен их налами сделать. А в тексте соответственно будет что-то типа
pFIBDataSet1.Insert;
TBlobField(pFIBDataSet1.FieldByName('GRAPHIC')).Lo adFromStream(mySrcStream);
... и т.д.
Т.е. вставляешь строку, а потом отдельно записываешь туда содержимое блобов.

Создай тестовый пример, и запость тот кусок кода где у тебя что-то не получается.
LuceferAB вне форума
 
Ответить с цитированием Вверх
Старый 08.11.2008, 19:23   #5
ilya198292
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.09.2008
Сообщений: 31
Репутация: 0
По умолчанию Re: insert через FIB в firebird

я с Dataset ещё не работал
с fibplus связался буквально несколько недель назад.
а инсерт делал через database.экзекут('insert...............') - если не ошибаюсь.
через датасет пока не получилось сделать ни одного инсерта, потому что примеры какие-то все однобокие.
ilya198292 вне форума
 
Ответить с цитированием Вверх
Старый 10.11.2008, 13:28   #6
ilya198292
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.09.2008
Сообщений: 31
Репутация: 0
По умолчанию Re: insert через FIB в firebird

спасибо, наконец дошло
ilya198292 вне форума
 
Ответить с цитированием Вверх
Старый 11.11.2008, 01:01   #7
LuceferAB
Пользователь
 
Пол:Мужской
Регистрация: 11.03.2008
Сообщений: 158
Репутация: 33
По умолчанию Re: insert через FIB в firebird

Так бы и написал, что новичок, я бы тогда проще написал.

Добавлено через 4 минуты
У датасета есть свойства SQL - в одном случае для отображения данных, и ещё набор SQL команд для модификации данных - инсерт, апдейт, делит. В этом особой разницы нет, что ты используешь фибы, хоть уибы (есть такие бесплатные компоненты для ФБ), хоть стандартные компоненты. Поищи где-нибудь готовые примеры - хоть те что идут в комплекте с фибами. Или где-нибудь на SQL.ru или в каком-нибудь королевстве дельфи.

Последний раз редактировалось LuceferAB; 11.11.2008 в 01:06.. Причина: Добавлено сообщение
LuceferAB вне форума
 
Ответить с цитированием Вверх
Старый 11.11.2008, 08:46   #8
ilya198292
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.09.2008
Сообщений: 31
Репутация: 0
По умолчанию Re: insert через FIB в firebird

insert получилось сделать всё нормально. спасибо.
но вопрос такой.
если мне нужно в insert сделать подзапрос:
insert into table (cel1, cel2, cel3) values (знач1, знач2, (select cel1 from table2 where....));
а условия в where сделать переменными
попробовал так и вписать в инсерт. говорит что полей учавсвующих в where нет.
в этой таблице нет, в другой есть и она указана.
в лоб такой запров выполняется.
как вписать его в dataset
ilya198292 вне форума
 
Ответить с цитированием Вверх
Старый 17.11.2008, 14:17   #9
LuceferAB
Пользователь
 
Пол:Мужской
Регистрация: 11.03.2008
Сообщений: 158
Репутация: 33
По умолчанию Re: insert через FIB в firebird

зачем так сложно? Ты что хочешь сделать в итоге?
Может проще написать хранимую процедуру, которой будешь передавать параметры,
она будет читать селект в переменные, а потом эти переменные, с учетом переданных параметров запихивать инстером куда тебе нужно. Или на триггерах это сделать?
LuceferAB вне форума
 
Ответить с цитированием Вверх
Старый 18.11.2008, 08:49   #10
ilya198292
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.09.2008
Сообщений: 31
Репутация: 0
По умолчанию Re: insert через FIB в firebird

хранимые процедуры не держал в руках ни разу
тригер один и то на форуме скинули
хотя впоследствии отказался от тригера и выполнил попроще всё - опять же алгоритмы с форума

а нужно мне следующее:
есть данные, которые нужно занести в таблицу. в колонках присутствуют данные, которые меняются в зависимости от человеческого фактора, по-этому сделал ещё одну таблицу в которой храню настройки "человеческого фактора", т.е. один чел забил данные по своему, а потом через мнемоники настроенные под него все данные распакуются правильно, а потом от другого пользователя используя другие мнемоники распаковывается опять всё правильно. и вот этот подзапрос как раз используя имя группы мнемоник и данных настроенных под человека преобразует значение в универсальное и заносит в таблицу. другой пользователь со своими настройками зайдёт и увидит данные со своими настройками.
ilya198292 вне форума
 
Ответить с цитированием Вверх
Старый 19.11.2008, 15:27   #11
LuceferAB
Пользователь
 
Пол:Мужской
Регистрация: 11.03.2008
Сообщений: 158
Репутация: 33
По умолчанию Re: insert через FIB в firebird

Поищи в интернете о хранимых процедурах. (вот например: http://www.delphikingdom.ru/asp/view...?catalogid=409 )
Вот мой последний пример. (создается в SQL при создании базы)

SET TERM ^ ;

CREATE PROCEDURE CALCULATEZP (in_order_id integer)
as
declare variable curmult double precision;
declare variable curworkerid integer;
declare variable totpart double precision;
declare variable jobcost double precision;
begin
select sum(cost) from jobs where order_id=:in_order_id into :jobcost;
select sum(mult) from teams where order_id=:in_order_id into :totpart;
for
select worker_id, mult
from teams
where order_id=:in_order_id
into :CURWORKERID, :curmult
do begin
update teams
set make= :curmult * :jobcost / :totpart
where (worker_id = :CURWORKERID)
and (order_id = :in_order_id);
end
suspend;
end^

SET TERM ; ^


Тут значит in_order_id - параметр, который передается на вход процедуры.
Все переменные внутри процедуры записываются через двоеточие, например:

select worker_id, mult
from teams
where order_id=:in_order_id
into :CURWORKERID, :curmult

по указанному наряду у меня выбираются рабочие и коэф-ты их зарплаты.
(далее я в цикле перебираю всех рабочих и расчитываю их зарплтау по этому заказу с учетом коэф-та)
Саму такую процедуру можно использовать как в других SQL выражениях (в селекте, в инсерте), так и индивидуально. У фибов есть такая возможность - сейчас название компонента не скажу, поищи. У него должно быть свойство execute, и возможность задавать параметры...
LuceferAB вне форума
 
Ответить с цитированием Вверх
Старый 22.12.2008, 22:26   #12
radiocab
Новичок
 
Пол:Мужской
Регистрация: 09.12.2008
Сообщений: 7
Репутация: -1
По умолчанию Re: insert через FIB в firebird

Кто работал с BatchInput/BatchOutput ?
radiocab вне форума
 
Ответить с цитированием Вверх
Ответ

Опции темы
Опции просмотра

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна информация по работе с Firebird в Delphi 7 (желательно через IBX) Krabik Delphi 6 24.02.2010 15:09
помогите снять Insert correct SIM card с SE w200 monstr77 Прошивки и прошивальщики 1 21.02.2010 01:41
Винда не грузится — disk boot failure insert... tematika Скорая помощь 5 13.01.2010 16:17
PHP и MySql insert into для чайника vovapetr PHP 5 14.02.2008 06:35

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 17:56. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.17620 секунды с 11 запросами