![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Oracle+DOA [D7]
WellSlava © (2006-04-04 09:29:00)У меня naraz проблемма: есть редактируемый набор данных (так неоходимо, компонент TOracleDataSet). При редактировании записей все нормально, но при встатвке ругается на поле первичного ключа, что оно должно иметь значение. Поле первичного ключа не Sequence, а генерится по другому в триггере before insert.
Вопрос: можно ли сделать так, чтобы добавлять запись можно было бы также в этом наборе данных? Если можно, то как?
ANB (2006-04-04 17:25:00) [1]
> ИД ему пофиг вроде, для этого.
дык rowid тоже не приехал.
ANB (2006-04-04 17:24:00) [2]
> > Вообще, в DOA лучше не делать редактируемые наборы данных
> - замучаешься.
> А мужики то не знают!!! 8-)
доступ к rowid есть не всегда.
Sergey13 (2006-04-04 14:56:00) [3]2[16] ANB © (04.04.06 14:19)
> По всей видимости, твой новый ID не приехал в набор данных.
ИД ему пофиг вроде, для этого. Если мне память не изменяет, он работает напрямую с RowID (для чего он собственно и нужен в "живом" запросе).
> Вообще, в DOA лучше не делать редактируемые наборы данных - замучаешься.
А мужики то не знают!!! 8-)
WellSlava (2006-04-04 14:27:00) [4]
> По всей видимости, твой новый ID не приехал в набор данных.
> Надо зарефрешить НД после вставки. Вообще, в DOA лучше
> не делать редактируемые наборы данных - замучаешься. ODAC
> для этого лучше приспособлен.
вот именно!!! нашел!!
в RefrechOptions надо выставить roAfterInsert и roAfterUpdate в true!!!
всем спасибо.
ANB (2006-04-04 14:19:00) [5]
> WellSlava (04.04.06 14:04) [15]
> Монитора нет... Свойства датасета - все по умолчанию - ничего
> не менял
По всей видимости, твой новый ID не приехал в набор данных. Надо зарефрешить НД после вставки. Вообще, в DOA лучше не делать редактируемые наборы данных - замучаешься. ODAC для этого лучше приспособлен.
WellSlava (2006-04-04 14:04:00) [6]Монитора нет... Свойства датасета - все по умолчанию - ничего не менял
Sergey13 (2006-04-04 13:53:00) [7]2[13] WellSlava (04.04.06 13:39)
У тебя ОраМонитор из ДОА не стоИт случайно? Посмотреть бы что в Оракл уходит. Странно это все. Глянуть бы еще свойства дататасета, аналогично [11].
WellSlava (2006-04-04 13:39:00) [8]да мне только этот датасет и нужно так делать... остальное делаю через Insert into... триггер срабатывает, ID генерится правильно...
после п. 4 (см. выше) все работает как надо, но только один раз дает менять... я пробовал делать CommitUpdates - все равно ошибка
Sergey13 (2006-04-04 13:32:00) [9]2 [11] WellSlava (04.04.06 13:19)
Это только с этим датасетом "глюки", или с любым?
Тригер на ID можно глянуть? Он срабатывает? ИД-шник появляется? Правильный?
WellSlava (2006-04-04 13:19:00) [10]BytePerCharacter = bc1Byte
ConnectAs = caNormal
DesignConnection = False
IsolationLevel = ilUnchanged
MessageTable =
MTSOptions = [moImplicit,moUniqueServer]
NullValue = nvUnAssigned
OptimizerGoal = ogUnchanged
Pool =
Pooling = spNone
Preferences = (TSessionPreferences)
ConvertCLRF = True
NullLOBIsEmpty = False
NullObjectIsEmpty = False
SmallIntPrecision = -1
TemporaryLOB = tlCache
TimeStampAsString = False
TrimStringFields = True
UseOSI7 = False
ZeroDateIsNull = True
RollbackOnDisconnect = False
SQLTrace = stUnchanged
StatementCache = False
StatementCacheSize = 20
ThreadSave = False
Sergey13 (2006-04-04 13:00:00) [11]2[9] WellSlava (04.04.06 12:58)
> свойства TOraclesesion?
Угу.
WellSlava (2006-04-04 12:58:00) [12]запрос Select D.RowId, D.* From Dicts D
а какие именно параметры? свойства TOraclesesion?
Sergey13 (2006-04-04 12:39:00) [13]2[6] WellSlava (04.04.06 12:26)
Параметры ОраСессии и текст запроса опубликуй.
Курдль (2006-04-04 12:32:00) [14]Пункт 4 не раскрыт :(
Что значит "добавляю поля как объекты"?
WellSlava (2006-04-04 12:26:00) [15]блин.... опять что-то не то... пишу все этапы
1. пложил на форму компонент TOracleDataSet
2. пишу Select для редактируемого DataSet-a (Select RowID...)
3. проверяю: редактирование работает как надо - изменил запись, перешел на другую, там изменил вернулся обратно опять что-то изменил (то же поле или разные - не важно) все работает. Но не работает добавление записи!!!
4. добавляю поля как объекты, выставляю где надо и как надо Required - запись добавляет. Но изменить дает только один раз!!! Если перешел на другую запись, возвращаюсь обратно хочу изменить выдает "Record has been changed by another user".
5. удаляю поля-объекты, т.е. убираю то, что делел в п.4. Проверяю - редактировать дает только один раз и запись не добавляет.
Кто-нибудь знает в чем дело?
Sergey13 (2006-04-04 09:58:00) [16]2 [4] WellSlava (04.04.06 09:53)
> но оно должно быть не 1,2,3... а нести должно информацию типа 100230034
В этом и ошибка. Не должно оно ничего нести кроме уникальности. Если нужен альтернативный ключ - сделай его отдельным полем. Иначе, в случае перекодировки (а это случается к сожалению), получишь здоровенный геморой.
WellSlava (2006-04-04 09:53:00) [17]спасибо... получилось..
Я понимаю, что лучше Sequence, но оно должно быть не 1,2,3... а нести должно информацию типа 100230034
Sergey13 (2006-04-04 09:49:00) [18]2[2] WellSlava (04.04.06 09:44)
> у каждого поля Required = true
У ID False поставь.
>Поле первичного ключа не Sequence, а генерится по другому в триггере before insert.
Зря.
WellSlava (2006-04-04 09:44:00) [19]Добавил поля как объекты, у каждого поля Required = true; Все равно выдает ошибку Field 'ID_d' must have a value
Reindeer Moss Eater (2006-04-04 09:30:00) [20]TField.Required