Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизАналог оракловой функции NVL в BDE Найти похожие ветки
← →
ssk © (2005-10-09 14:46) [0]Всем привет!
В оракле я с успехом использовал конструкцию
SELECT NVL(MAX(myID)+1, 1) FROM myTable;
но для BDE она не срабатывает. Существует ли аналог NVL в BDE?
Спасибо за ответы.
← →
Fay © (2005-10-09 17:02) [1]насколько я знаю, такой штуки нет
← →
ssk © (2005-10-09 21:15) [2]что ж, плохо. придется изголяться...
← →
Fay © (2005-10-10 07:59) [3]2 ssk © (09.10.05 21:15) [2]
А как вышло, что Вам приходится использовать BDE осенью 2005 года?
← →
ssk © (2005-10-10 09:16) [4]
> Fay © (10.10.05 07:59) [3]
> А как вышло, что Вам приходится использовать BDE осенью
> 2005 года?
хотел себе жизнь облегчить. да видать, просчитался немного :-)
З.Ы. что касается темы, то решение я нашел. но оно мне не нравится, хотя и работает.
← →
Fay © (2005-10-10 09:25) [5]2 ssk © (10.10.05 9:16) [4]
>> решение я нашел
Можно подробнее?
← →
Desdechado © (2005-10-10 10:17) [6]вообще-то БДЕ - это посредник к СУБД
СУБД какая?
← →
Danilka © (2005-10-10 10:21) [7]ssk © (09.10.05 14:46)
Всем привет!
В оракле я с успехом использовал конструкцию
SELECT NVL(MAX(myID)+1, 1) FROM myTable;
В Оракле, за такой способ генерации ид-шника, следует оторвать руки.
Неужели про сиквенсы ничего не слышал?
← →
Sergey13 © (2005-10-10 10:30) [8]>но для BDE она не срабатывает.
Это ложь. Срабатывает, если конечно БД по прежнему Оракл.
← →
Курдль © (2005-10-10 11:27) [9]Попробуй IsNull(FIELD_NAME, 0)
← →
ssk © (2005-10-10 12:08) [10]Danilka © (10.10.05 10:21) [7]
В Оракле, за такой способ генерации ид-шника, следует оторвать руки.
Неужели про сиквенсы ничего не слышал?
нет, не слышал. просто использовал, как написал выше и все.
учитывая, что базы это не мой профиль, можно отрывать все, что угодно. собственно я и пришел спросиь совета.
Sergey13 © (10.10.05 10:30) [8]
>но для BDE она не срабатывает.
Это ложь. Срабатывает, если конечно БД по прежнему Оракл.
нет, не оракл одонозначно.
расскажу, что я делаю:
беру Query, DataSource и DBGrid.
все соединяю. потом в Query пишу:CREATE TABLE myTable (aID INTEGER, aMyField VARCHAR(20);
создается таблица.
теперь при добавлении записи мне нужно присвоить ID номер. кроме проверки на NULL и присваивания 1 (а потом MAX(ID)+1) ничего в голову не пришло.
посоветуйте, как правильно надо сделать.
вот ссылка на исходничек 3к
http://www.ucad.pisem.net/delphi_demos/test.zip
← →
ssk © (2005-10-10 12:13) [11]Курдль © (10.10.05 11:27) [9]
Попробуй IsNull(FIELD_NAME, 0)
попробовал. выдает ошибку Capability not supported
эта же ошибка появляется и при применении NVL.
← →
Sergey13 © (2005-10-10 12:14) [12]2 [10] ssk © (10.10.05 12:08)
> нет, не оракл одонозначно.
А что? Военная тайна? Или пишем универсальную прогу?
← →
ssk © (2005-10-10 12:14) [13]Fay © (10.10.05 09:25) [5]
Можно подробнее?
см. исходник в [10]
← →
ssk © (2005-10-10 12:17) [14]Sergey13 © (10.10.05 12:14) [12]
А что? Военная тайна? Или пишем универсальную прогу?
да какая универсальность? я не знаю. я ее не выбираю. лучше расскажи, как правильно сделать?
← →
Курдль © (2005-10-10 12:21) [15]У всякой СУБД есть свой метод получения нового ID.
Даже у одноклеточных типа Paradox, Dbase, FoxPro и т.п. есть автоинкрементные поля, которые автоматически разруливаются движком.
Получать новые ID каким-либо синтетическим путем - категорически не рекомендуется.
← →
Sergey13 © (2005-10-10 12:23) [16]2[14] ssk © (10.10.05 12:17)
> я не знаю. я ее не выбираю.
Ты предлагаешь мне выбрать? 8-)
Ты просишь конкретного ответа на неконкретный вопрос. Так не бывает.
← →
Fay © (2005-10-10 12:28) [17]2 ssk © (10.10.05 12:14) [13]
По сырцу (смотрел только main.pas)...
Какая СУБД?
>> // создаем таблицу
>> EXEC_QUERY("CREATE TABLE artists (aID INTEGER, art VARCHAR(20))", False);
Где первичный ключ? Или это всё-таки Oracle и Вы надеетесь на rowid?
>> if RecordCount = 0 then // проверка на пустоту таблицы
IsEmpty ?
>> with TTable.Create(nil) do
>> begin
>> TableName := "artists";
>> Open;
Простите, а Database (или чё там в BDE) не надо?
>> // добавляем новый ID
>> EXEC_QUERY("INSERT INTO artists (aID) SELECT MAX(aID)+1 FROM artists;", False);
>> // записываем новому ID значение
>> EXEC_QUERY("UPDATE artists SET art="" + Edit1.Text + "" WHERE aID = (SELECT MAX(aID) FROM artists);", False);
>> end;
Зачем Update ?
← →
ssk © (2005-10-10 13:07) [18]
> Fay © (10.10.05 12:28) [17]
> >> with TTable.Create(nil) do
> >> begin
> >> TableName := "artists";
> >> Open;
>
> Простите, а Database (или чё там в BDE) не надо?
точно, есть такая штука. это я упустил.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c