07.06.2020, 08:46 [+3 UTC]
в нашей команде: 4 600 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
05.06.2020, 04:11

Последний вопрос:
06.06.2020, 21:42
Всего: 152584

Последний ответ:
07.06.2020, 07:20
Всего: 260260

Последняя рассылка:
07.06.2020, 05:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
31.12.2011, 14:07 »
Посетитель - 385948
СПАСИБО ОГРОМНОЕ !!!! С НОВЫМ ГОДОМ И РОЖДЕСТВОМ ВАС !!!!!! [вопрос № 185003, ответ № 269404]
15.02.2010, 16:51 »
Кузнецов Валентин Олегович
Боооольшое спасибо за подсказки!!!!!!!!!!!!! И как всегда выручают профессионалы своего дела и конечноже палочка - выручалочка RFpro.ru [вопрос № 176676, ответ № 259452]
27.05.2010, 15:29 »
Konstantin Shvetski
Спасибо за скорый и квалифицированный ответ [вопрос № 178693, ответ № 261713]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 430
Delph
Статус: 3-й класс
Рейтинг: 316
puporev
Статус: Профессор
Рейтинг: 148

Перейти к консультации №:
 

Консультация онлайн # 145942
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Maksim Trofimov
Отправлена: 04.10.2008, 11:40
Поступило ответов: 1

hi...

Не могу понять почему частенько вылетает ошибка при использовании DBLookupComboBox:

© Цитата:
EOleExxeption with message 'Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнег чтения.'


Посмотрите на примере (исходник delphi 7): тут (13Кб):
1. Создайте новую запись с помощью dbgrid и сохраните
2. Щелкните на DBLookupComboBox и выбирите одно из значений
3. Получите ошибку...

Спасибо.

Состояние: Консультация закрыта

Ответ # 231245 от Шичко Игорь

Здравствуйте, Maksim Trofimov!
В принципе все логично, так как у Вас используется связанная таблица.
Т.е. вы не можете изменить связь при её полном отсутствии.
Для устранения этого предлагаю добавить процедурку для ADOTable1 для обновления связей ADOTable1AfterPost(DataSet: TDataSet);
Т.е. при добавлении новой записи у Вас будет обновляться поле SPECIALIZATION_ID и приравниваться к нулю.
И Вы сразу сможете изменить эту связь на 1 или на 2.

Приложение:


Консультировал: Шичко Игорь
Дата отправки: 05.10.2008, 16:55

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 145942

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 1

= общий = | 04.10.2008, 16:13 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Maksim Trofimov
Вы, наверное, когда создаёте новую запись в DBGrid забываете занести значение в поле SPECIALIZATION_ID, оттого и ошибка. Ведь Ваш DBLookupCombo выводит связанное поле именно с этим столбцом.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Maksim Trofimov

# 2

= общий = | 05.10.2008, 03:58

Черт возьми smile ....

© Цитата:
Ведь Ваш DBLookupCombo выводит связанное поле именно с этим столбцом

А я думал что, если этого значения не будет, DBLookupCombo, его запишет в соответствии с выбором пользователя...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 3

= общий = | 05.10.2008, 04:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Когда-то я тоже так думал. smile Но поэкспериментировав понял, что в фирме Борланд думали по другому. smile
Американцы, что с них взять, не соображают... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 4

= общий = | 05.10.2008, 06:09 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Я думаю, для столбца SPECIALIZATION_ID нужно ввести значение по умолчанию, например 0. А в справочнике для этого значения ввести что-то вроде "Значение не присвоено". Тогда в главной таблице Вы будете вводить данные вручную при создании новой записи только в нужный столбец, при этом 0 вставится автоматически. А уж после того как новая запись создана и зафиксирована, с помощью DBLookupCombo ввести новое значение.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Maksim Trofimov

# 5

= общий = | 05.10.2008, 06:23

© Цитата:
Американцы, что с них взять, не соображают...

Мандалаи...о чем разговор ))

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Maksim Trofimov

# 6

= общий = | 05.10.2008, 07:18

© Цитата:
Я думаю, для столбца SPECIALIZATION_ID нужно ввести значение по умолчанию, например 0. А в справочнике для этого значения ввести что-то вроде "Значение не присвоено". Тогда в главной таблице Вы будете вводить данные вручную при создании новой записи только в нужный столбец, при этом 0 вставится автоматически. А уж после того как новая запись создана и зафиксирована, с помощью DBLookupCombo ввести новое значение.

Я об этом уже думал и пробовал сделать ) Но из этого ничего не вышло: почему то значение по умолчанию присваивается, но после перезагрузки таблицы )
Ничего проще, кроме как установки значения программой
FieldByName('SPECIALIZATION_ID').AsInteger:=0
, а не БД, придумать не могу. Да и таблицу открывать/закрывать лишний раз мне бы не хотелось...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Maksim Trofimov

# 7

= общий = | 05.10.2008, 15:56

Беру свои слова обратно smile

Все же проще перезагрузить таблицу ))

Requery();

Учиться и учиться однако...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 8

= общий = | 05.10.2008, 16:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Проще воспользоваться TADOQuery с запрсом к двум таблицам:

ADOQuery.SQL.Text:='SELECT spec.name, spez.name FROM spec INNER JOIN spez ON spec.specialization_id=spez.id';

тогда можно вообще обойтись одним DBGrid'ом. Ведь в DBGrid'е, посмотрите сами, две колонки лишние, т.к. не несут какой либо эстетической информации. А нужны Вам для любования всего две колонки, которые я написал в запросе. smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Maksim Trofimov

# 9

= общий = | 05.10.2008, 17:18

sir Henry

© Цитата:
Проще воспользоваться TADOQuery с запрсом к двум таблицам

Это удобно очень для визуализации, но тогда нужно будет создавать еще одну форму(или еще что-то) для изменения значений полей специализации, так как DBLookupComboBox уже не подойдет. Потому что для его использования нужны поля spec.id и spec.specialization_id, которые мы убрали ))
Однако, их можно не убирать, а просто скрыть )

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

 

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

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.18212 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39