Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Есть два TADOQuery с запросами к одной таблице. У обоих стоит BatchOptimistic. При добавлении стоки в одном квери, хочется что бы эта строка добавилась к другому квери. Рефрешить - глупо, мне нужна только одна строка, и она на клиенте уже есть. Если просто копировать эту строку, то возникает проблема с identity полем, его редактировать нельзя. Пытался в адо создавать вместо TAutoIncField поле TIntegerField, редактировать получалось, но после Post(), возвращалось старое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 09:31 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Почему рефрешить глупо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 10:10 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
в этом случае рефрешить - это ненужная нагрузка на сеть и сервер. Ради одной строки, которая уже есть на клиенте, надо подтаскивать сотни и тысячи. Совсем не оптимальное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 11:14 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Неоптимально иметь на клиенте сотни и тысячи записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 11:48 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
ну и чего неоптимального иметь на клиенте справочник организаций из пары сотен записей? А вообще, лучше подсказали бы как мне проблему решить, может что подправить в исходниках адо, или где есть компонент подходящий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 11:53 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
ну, наверняка ведь кто-нибудь в исходники адо лазил, разбирался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 14:07 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Так Вы пытаетесь записать в поле identity просто какое-то свое значение или надо просто добавить во вторую таблицу строку, чтобы сервер сам сгенерировал identity ? А если записывать значение самому, то зачем там на сервере вообще identity во второй таблице ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2003, 16:59 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
В целом схема выглядит так. Один рекордсет предоставляется юзеру для модификаций (вставить удалить изменить), а второй рекордсет используется только для лукапов. В первом рекордсете, много столбцов, а во втором только ID, name. Допустим у нас есть - справочник контрагентов. - счет фактура. Добавляем новую счет-фактуру, из лукапа выбираем контрагента. Если нужного контрагента нет, то открываем первый рекордсет и добавляем контрагента. И вот у нас ситуация - в лукапе этого контрагента и его айдишника нет. Таких пар датасетов, для модификации и лукапа, в проге много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2003, 07:56 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
После продолжительного исследования адошных исходников выяснилось следующее. 1. Всякие дельфийские TDataSet, TADOQuery и прочее, это надстройка над recordset. 2. В MSDN, в спецификации recordset'а сказано, что можно задать любые поля и открыть его с пустым connection. Получим полноценный пустой рекордсет с нужными полями. 3. Теоретически я мог бы открыть свой лукап recordset, потом создать новый рекодсет, создать в нем такие же поля как и в лукапе, заменив автоинкрементное поле на простой интежер, открыть его с пустым connection и скопировать в него данные из лукапа. Получаю полноценный рекордсет с возможностью редактировать любое поле. 4. В Дельфи нельзя открыть рекордсет с пустым connection. В visual basic можно, а в Дельфи нельзя. У меня остаются сомнения, может быть как-то можно открыть в дельфи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 08:58 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
А зачем disconnected dataset нужен ? У Вас - надо добавить запись для lookup, так ведь это означает, что надо ввести записи в соотвествующие таблицы ? Ну так открывайте их, добавляйте записи, новые значения ID записывайте в счет-фактуру. Однако тут какие-то непонятки в архитектуре. То ли Вы вообще собрались всегда двумя рекорсетами обходиться, то ли как... Зачем все же Identity вставлять непосредственно, непонятно. Поля Identity пользователь что ли, вводит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 09:05 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
В архитектуре приложения есть один принцип - редактируют поля таблицы в одном датасете, а для лукапов используется другой датасет. Приложение многооконное, допустим используется один датасет для лукапа и редактирования. Я открываю окно справочника контрагентов, накладываю фильтр, потом отрываю окно счет-фактрур и - О, ужас! - у половины счет-фактур нет контрагента. Поэтому, решено, что лукап - это одно, а редактирование - это другое. Но возникает проблема, если я добавил нового контрагента, то в лукап он не попадет. Единственный выход - рефрешить, но это нерационально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 09:37 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Помнится мне, что у Recordset-а есть метод, что-то типа CloneRecordset. Может, стоит им воспользоваться? Клонировать датасет справочника после редактирования и присвоить лукапу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 09:50 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Да, есть такой метод, но набор полей разный. В лукапе их обычно два - три, а в основном датасете значительно больше. К тому же один лукап может использоваться для разных датасетов. Например. Лукап Код: plaintext Dataset1 Код: plaintext 1. Dataset2 Код: plaintext 1. что будет если я в лукап склонирую любой из этих датасетов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 10:01 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Эта проблема концептуальна. Мы для себя решили, что проще - рефрешить. Иначе - надо делать общий datamodule и использовать один общий dataset для lookup и редактирования. Но это сложно в разработке. Просто так перетаскивать строки из одного датасета в другой - не выйдет, насколько я знаю. Попробуйте делать для для lookup TADOQuery.Recordset.Resync + TADOQuery.Resync и поиграть с 'Resync Command' ADO property, указывая там, например, "SELECT * FROM ... WHERE PK > ?". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 10:06 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Не, в таком случае, конечно, не получится. Клон - это же полная копия, я проверял. Проблема эта у меня тоже стояла, но я ее так и не решил стандартными средствами. Единственно, что могу посоветовать - максимально оттягивать момент рефреша лукапа, но это ты и сам понимаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 10:06 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Resync Command, насколько я помню, должен возвращать одну строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 10:08 |
|
||
|
Редактирование identity полей в TADOQuery
|
|||
|---|---|---|---|
|
#18+
Угу. Артем1 прав, Resync Command не поможет. Или Requery или использовать один датасет для lookup и редактирования или действительно работать с disconnected dataset. Но последнее я не пробовал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 11:33 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32287331&tid=2116505]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 353ms |

| 0 / 0 |
