Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Инфа не удаляется в таблицах InterBase, что делаю неправильно? [D5, D6, IB5.x, IB6.x, ]


Страницы:   1 2

Radix ©   (2002-01-09 10:34:00) 

Хелп, мастера! Изучаю Interbase (толком ничего не знаю, больно не бейте:). Создаю Database и таблицу в ней, полей этак с двадцать, где половина integer, а другая varchar win1251, есть индекс, но нет праймари ки. Пишу прогу с IBQuery, IBDatabase, IBTransaction и TIBUpdateSQL, плюс DBEdit(по количеству полей) и навигатор (пока, чтоб не рисовать кнопки). Так вот, в таблицу инфу записать можно, но удалить никак - говорит Updates failed. Установка CashedUpdates=true ничем не помогает - инфа не удаляется :(. Пытался в 5 и 6-ом Дельфях и IB, но всё одно. При спользовании IBTable результат нормальный. Что же лучше использовать - IBQuery, просто Query или ещё что ? Что делаю неправильно ? Думаю сделать двузвенку, если сумею :). Кстати говоря, где что можно почитать про IB, в книжках по Делфям всё как-то мимоходом ? Заранее благодарю.


Desdechado   (2002-01-14 16:34:00) [1]

просто по умолчанию:
- точка с запятой - разделитель команд SQL,
- шляпка - разделитель команд в скриптах

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


Radix   (2002-01-14 10:17:00) [2]

Для сведения - у меня сработал вариант с использованием SET TERM ^

Ни SET TERM !!! (как в хелпе), ни SET TERM ### (по предложению dymka) работать в моём случае не захотели. Хотя так и не понял для чего это нужно?


dymka   (2002-01-11 13:21:00) [3]

Была такая трабла тоже, писал так

SET TERM ### ;

CREATE TRIGGER NEW_GTM FOR D_GTM ACTIVE
BEFORE INSERT AS
BEGIN
NEW.ID = GEN_ID(GEN_NEW_GTM, 1);
END ###

т.е. именно в таком форматировании у меня поняло :)))
пишешь токены по другому - фиг!


Alexandr   (2002-01-11 12:21:00) [4]

2Fay:
кто табы про бред сказал? или ты сам допер?


Fay   (2002-01-11 12:18:00) [5]

SET TERM ^;
CREATE TRIGGER MY_TRG FOR DELA
ACTIVE
BEFORE INSERT
AS
BEGIN
NEW.ID=GEN_ID(MY_GEN,1);
END
^
SET TERM ;^

А более продвинутые инструменты - бред.


Desdechado   (2002-01-11 10:04:00) [6]

поставь перед текстом триггера
set term ^ ;


Radix   (2002-01-11 09:32:00) [7]

Понял. Версию консоли сейчас не скажу, но это всё объясняет. А WISQL в шестой IB случайно работать не станет ? Пойду схожу на ib.demo.ru.

Спасибо


Alexandr   (2002-01-11 09:28:00) [8]

вот оно что.
Не пишиши в консоли!, ИСПОЛЬЗУЙ БОЛЕЕ ПРОДВИНУТЫЕ инструменты.

это скорее всего глюк консоли.
Посмотри версию консоли.

а в Interbase 5 нормальная была WISQL, поэтому там работает.

посмотри на ib.demo.ru


Radix   (2002-01-11 09:01:00) [9]

Видел я SET TERM в хелпе, но не понял для чего он нужен. С ним тоже результат нулевой.
Действительно по идее различий быть не должно. У меня стоит IB Server, поставленный из дистрибутива шестого делфи. Тексты пишу в консоль.


Alexandr   (2002-01-11 07:55:00) [10]

в IB5 и IB6 различий не должно быть.
Какой программой пользуешься?
пользуйся www.ibexpert.com

а begin-end конечно должен быть конечно...

смотри на ib.demo.ru все утилиты с описанием по работе с Interbase


fnatali   (2002-01-11 07:52:00) [11]

А SET TERM? SET TERM у тебя где? Посмотри синтаксис в хэлпе.


Radix   (2002-01-11 07:48:00) [12]

Сделал я праймари ки ID INTEGER NOT NULL и начал делать генератор и триггер для этого столбца. В IB5 всё путём, но в 6-ой версии триггер не получается, хотя делаю всё аналогично. Выдаёт Unexpected end of command. Триггер пишу по учебнику, в хелпе тот же текст:

CREATE TRIGGER MY_TRG FOR DELA
ACTIVE
BEFORE INSERT
AS
BEGIN
NEW.ID=GEN_ID(MY_GEN,1);
END

Если убираю begin и end он говорит что не знает такого индентификатора NEW. Что скажите ?


Alexandr   (2002-01-11 06:56:00) [13]

2evgeg: Это разве деньги...
Да и триал есть, да и старые, работающие версии есть.

2radix: Я не самый умный


Radix   (2002-01-10 14:52:00) [14]

To Alexandr
Легко ехидничать когда Вы самый умный.


evgeg   (2002-01-10 13:40:00) [15]

> dymka
Теперь, FIBPlus денег стоят, однако.


Alexandr   (2002-01-10 09:19:00) [16]

2Radix:
>Следующий вопрос - я делаю правильно или нет ?

-У меня windows не виснет- скажите что я делаю не так?


dymka   (2002-01-10 09:00:00) [17]

Мой совет - используй компоненты FIBPlus - там много хороших фишек. Там DataSet вообще продвинутый с кучей опций - очень удобно. Также прямой директ к базе миную BDE.


Radix   (2002-01-10 08:09:00) [18]

To wipr
К большому сожалению описанный вами код не идёт с используемыми компонетами. Просто нет у компонента IBQuery метода CommitUpdates, а у IBDatabase нет метода StartTransaction (зато есть у IBTransaction). Я сделал нечто подобное, но при прогоне после IBTransaction.StartTransaction у меня теряется коннект - где-то у кого-то Active становится false. Чувствую что всё-таки что-то делаю не так, а что?.. Переходить на TQuery и TDatabase не хочется по идейным соображениям :).
To All
Сделал праймари ки как писал dymka. Но особой разницы не почувствовал. Затем заменил связку IBQuery-IBUdateSQL на IBDataSet. И что ?... заработало. Ну это ладно. Меня волнует, что это работает без всякого кода наподобие описанного wipr"ом, только по нажатию соответствующих кнопок навигатора. Правда заполнить свойства IBDataSet типа DeleteSQL я не забыл :). Должен радоваться, но думаю просто так ничего не бывает, значит где-то когда-то у меня будет прокол...

Следующий вопрос - я делаю правильно или нет ?


dymka   (2002-01-09 14:12:00) [19]

Настоятельно рекомендую использовать PRIMARY KEY если даже у тебя нет поля в качестве которого его можно использовать. Создай его специально (например ID INTEGER NOT NULL PRIMARY KEY). Далее будет меньше головной боли. "Синхронизация" данных на сервере и на клиенте осуществляется по первичному ключу.


Radix   (2002-01-09 12:39:00) [20]

Спасибо за ответы, посмотрю что получится.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо