Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2012, 20:07   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию Не сохраняются записи после добавления через IBTable

Доброй ночи!
Выполняю добавление записей в базу данных, но не происходит Post и запись в базе не сохраняется. С чем это может быть связано?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.08.2012, 20:59   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Что значит "не происходит Post"?
ApplyUpdates выполняете?
astecenko вне форума Ответить с цитированием
Старый 26.08.2012, 07:03   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Где я его должен применить-то? Не нашел такого свойства или обработчика. И еще вопрос: у меня в базе поле ID автоинкрементное, что означает, что я не должен заносить в него значение, оно должно само увеличиваться при вставке. Но когда я пытаюсь через DBNavigator добавить новую запись, то мне появляется ошибка что "Поле ID должно иметь значение", т.е. я его вручную должен заносить. Что тут не так происходит? В этой таблице все два поля, что означает, что я должен заполнить только то, которое мне нужно, а поле ID должно само заполниться.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.08.2012, 08:18   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

1. ApplyUpdates - это метод, а не свойство или обработчик. В IBTable он есть 100%

2. Для автогенерации нового значения ID нужно создавать триггеры и генераторы для таблиц, например:
Код:
CREATE GENERATOR "JOURNAL_G";

CREATE TRIGGER "JOURNAL_BI" FOR "JOURNAL"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID=0) THEN
    NEW.ID = GEN_ID(JOURNAL_G,1);
END
Таким образом, при присвоении ID новой записи значения 0 триггер автоматически сгенерирует новый ID

3. Для работы с Interbase/Firebird лучше IBExpert использовать, но это сугубо ИМХО. Кому как удобнее.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 26.08.2012, 14:23   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Sciv, все, что начиная со второго пункту - открыли мне америку. Это я итак сделал и знаю, что это надо все делать и это не относится в принципе к моей проблеме. Если бы проблема была в этом, то я бы не создавал этой темы. Вопрос в другом был. Генерация нового ID работает только если я через FIBPlus компоненты добавляю. Я сделал по-другому уже добавление.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.08.2012, 22:51   #6
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

С InterBase работал 9 лет назад и совсем чуть-чуть, так что могу ошибаться, но: при выполнении метода Post Вы заносите данные в локальный кэш, а чтобы передать эти данные транзакцией самой СУБД нужно где-то выполнить метод ApplyUpdates (можно по отдельной кнопке, или при закрытии экранной формы и т.п.). При этом данные передаются СУБД но не фиксируются. Чтобы зафиксировать данные в СУБД нужно выполнить метод Commit у связанного с IBTable объекта IBTransaction.

Включать/выключать локальное кэширование можно с помощью свойства CachedUpdates, то бишь при CachedUpdates=True изменения при вызове Post пишутся в локальный кэш и надо вызывать ApplyUpdates, при CachedUpdates=False изменения не кэшируются а сразу отправляются на сервер. Что лучше кэшировать или нет - зависит от ТЗ, так что думайте. По умолчанию изменения не кэшируются.
astecenko вне форума Ответить с цитированием
Старый 27.08.2012, 14:36   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
у меня в базе поле ID автоинкрементное, что означает, что я не должен заносить в него значение, оно должно само увеличиваться при вставке. Но когда я пытаюсь через DBNavigator добавить новую запись, то мне появляется ошибка что "Поле ID должно иметь значение", т.е. я его вручную должен заносить. Что тут не так происходит?
попробуй в свойствах этого поля убрать галочку с "Не пустое" и в тригер впихнуть то что сказал Sciv ... все будет нормально генерировать и вставлять автоматом
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Триггер , который после добавления записи в одну таблицу редактирует запись другой таблицы Rin БД в Delphi 7 18.12.2010 03:50
Не сохраняются записи в БД Siluet БД в Delphi 14 01.11.2010 21:54
Не сохраняются изменения, внесённые через TZUpdateSQL Greek9000 БД в Delphi 1 22.10.2010 11:50
DBGrid не отображает данные после добавления k0ks67 БД в Delphi 4 10.12.2009 21:17
после добавления ярлыка программа не работает Kos123 Помощь студентам 18 30.09.2009 14:27