Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Невозможность использовать Update, если в View есть поле типа Blob 


Malder   (2002-03-10 12:58) [0]

То есть, если для таблицы в которой есть Blob поле, сделать Обзор (View) в котором включить это Blob поле из таблицы, то для данного обзора нельзя будет сделать SQL комманду UPDATE. Почему ?
Я не хочу использовать большой Varchar. Неужели, никто не сталкивался с этой проблемой ? Ведь навернякак у вас в Обзоре была необходимость включать Blob поле.



roottim   (2002-03-11 09:06) [1]

непонятно!.. если вид создается из нескольких таблиц... то как это вообще возможно... вроде никак!
а если на основе одной таблицы... то какой смысл делать апдейт вида.. если такое можно сотворить с таблицей!



Malder   (2002-03-11 09:54) [2]

Обзор составляется из одной таблицы. А смысл в том, что в обзор можно включить не все записи. И раздавать гранты на обзор.
С оригинальной таблицей такого не проделаешь...



roottim   (2002-03-11 10:00) [3]

возможно просто нельзя!....
это дб написано в гуиде по иб!... то что там существуют ограничения по использованию видов... это однозначно... возможно работа с блоб оно и есть!...
посмотри хелп!... по View.... наерняка что-то сказано по этому поводу!



Malder   (2002-03-11 17:18) [4]

A view is updatable if:

It is a subset of a single table or another updatable view.
All base table columns excluded from the view definition allow NULL values.
The view"s SELECT statement does not contain subqueries, a DISTINCT predicate, a HAVING clause, aggregate functions, joined tables, user-defined functions, or stored procedures.

If the view definition does not meet these conditions, it is considered read-only.

Note Read-only views can be updated by using a combination of user-defined referential constraints, triggers, and unique indexes.


вроде здесь нет противоречий с использованием Blob...



panov   (2002-03-11 18:41) [5]

А каким образом ты UPDATE выполняешь?
Приведи код SQL.
Скорее всего, тебе нужно использовать параметризованный запрос с соответствующим типом параметра(TBlobField).



Malder   (2002-03-11 21:16) [6]

Нет, параметры не работают.

Дело в том, что невозможно выполнить даже простейший SQL оператор, типа:

UPDATE Clients SET Telefon="12345" Where Fax="6789"

То есть, в запросе даже не обновляется BLOB ! Просто принципиально программа не работает, если в обзоре есть Blob поле. Я ВООБЩЕ не понимаю, зачем это... такое ограничение сводит на ноль возможность использования Blob - это поле в более менее серьезной базе не может быть использовано....... ОЧЕНЬ СТРАННО

P.S. Народ, если у вас Blob поля в обзорах (view) работают - скажите, может дело в чем-то другом...



Malder   (2002-03-12 15:11) [7]

ну ответьте кто-нибудь... Я НЕ ВЕРЮ ЧТО НИКТО НЕ ИСПОЛЬЗУЕТ BLOB В ОБЗОРАХ



Scalia   (2002-03-12 15:33) [8]

А почему надо делать UPDATE обзора, а не таблицы ?
Какой в этом глубокий смысл ?



ОлегЕ   (2002-03-12 15:52) [9]

Сделал view с полем Blob, как у тебя описано.
Все обновляется, никаких ошибок. Может ты что-то не договариваешь?



Malder   (2002-03-12 17:19) [10]

Scalia</b<, блин. Смысл во многом:

Create View manager_view as
Select Manager, telefon, fax, Nazvanie, Mestop, Dateperezvon, Primech from Pers
Where Manager = User
With Check Option - именно из-за этого я использую обзор, так как текущий пользователь имеет доступ не ко всем полям ! А с оригинальной таблицей так сделать не могу...

ОлегЕ, ты пытался делать UPDATE таблицы исходной или обзора ? Может ошибся ? Апдейт самой таблицы и у меня действует. Попробуй, пожалуйста, обновить обзор, причем надо чтобы под условие апдейта попадала хоть одна запись. То есть, если сделать:

UPDATE Clients SET telefon="123" Where Fax="789"

и нету клиентов с факсом 789 то все Ок. Надо чтобы UPDATE попытался изменить хоть одну запись...



ОлегЕ   (2002-03-12 17:27) [11]

Я делал
update vw_table1 set id=11 where id = 1
где:
1. vw_table1 -
CREATE VIEW VW_TABLE1(
ID,
FD)
AS
select
ID,
FD
from TABLE1;
2. TABLE1 -
CREATE TABLE TABLE1 (
ID "DInteger" NOT NULL,
FD "DBlob");

3. DBlob -
CREATE DOMAIN "DBlob" AS
BLOB SUB_TYPE 0 SEGMENT SIZE 100 CHARACTER SET NONE

Никаких ошибок и проблем, все работает нормально.



Scalia   (2002-03-12 17:28) [12]

А что есть Clients - вроде бы не имя таблицы и не имя view...???



Malder   (2002-03-12 17:35) [13]

Scalia, ну Pers - это и есть Clients

ОлегЕ, в общем все верно. Только вот я не создавал Domain Dblob.
Я использовал просто FD типа blob.

Правда не думаю, что в этом дело. А в твоем случае SIZE 100 сводит на ноль усилия. Я не знаю размер поля, даже приблизительно, поэтому и использую Блоб. А так можно и varchar использовать...



ОлегЕ   (2002-03-12 17:52) [14]

Длина сегмента - это не размер поля. Здесь ты заблуждаешься, если думаешь, что только 100 байт можно хранить. На ib.demo.ru есть неплохая статья о CHAR, VARCHR и BLOB, почитай, не помешает.
Пришли на sep@ukrsib.kharkov.com свой адрес, завтра вышлю пример базы, сам попробуй.



Scalia   (2002-03-12 17:54) [15]

>Malder © : А Pers - это таблица ! То есть UPDATE все-таки таблицы !?



Malder   (2002-03-12 19:57) [16]

Scalia, не. Clients - это Обзор. А Pers - сама база =)



Malder   (2002-03-13 00:11) [17]

народ... плиз... я последний раз поднимаю топик...ну неужели вы не используете Блоб в обзорах ? не верится.. кто нибудь писал рабочие базы ? неужели вы не встречались с этой ошибкой ? ну хоть скажите, что так оно и есть, что Interbase - такая лажа.. пеерйду на MSQL я....с горя...
а-а-а.....



drpass   (2002-03-13 00:52) [18]

Не надо, парень, не надо...
Завтра я утром на работе сяду и посмотрю, чего там у тебя может не работать. Только не становись еще одним пользователем СУБД от Microsoft



Malder   (2002-03-13 18:51) [19]

ты в меня вселил надежду =)



Malder   (2002-03-14 20:53) [20]

просто так пишу =)



Slava   (2002-03-15 06:46) [21]

Создал тестовую табличку и обзор с блобом.

Сначала понаделал insert"ов в обзор, потом
update"ов (тоже в обзор) - все работает без вопросов



Александр С..   (2002-03-15 11:57) [22]

В принципе любой View можно сделать обновляемым, если создать для него триггеры.
Пробовал делать View принципиально не обновляемый (из нескольких таблиц) с триггерами, и все работало прекрасно.
Может такой вариант поможет.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.76 MB
Время: 0.028 c
3-22591           Velocity              2002-03-16 15:58  2002.04.08  
Как создать таблицу без использования BDE?


1-22653           Chistyakov Victor     2002-03-28 10:42  2002.04.08  
Delphi&Word


1-22633           Corte ™               2002-03-26 10:07  2002.04.08  
Вопрос


7-22847           Херувим               2001-12-29 13:29  2002.04.08  
Как определить номер железа


1-22663           snoup                 2002-03-28 10:50  2002.04.08  
А как сделать так что бы например когда я запускаю таймер сек. ме