![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аналог оракловой функции NVL в BDE
ssk © (2005-10-09 14:46:00)Всем привет!
В оракле я с успехом использовал конструкцию
SELECT NVL(MAX(myID)+1, 1) FROM myTable;
но для BDE она не срабатывает. Существует ли аналог NVL в BDE?
Спасибо за ответы.
ssk (2005-10-10 13:07:00) [1]
> Fay © (10.10.05 12:28) [17]
> >> with TTable.Create(nil) do
> >> begin
> >> TableName := 'artists';
> >> Open;
>
> Простите, а Database (или чё там в BDE) не надо?
точно, есть такая штука. это я упустил.
Fay (2005-10-10 12:28:00) [2]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 ?
Sergey13 (2005-10-10 12:23:00) [3]2[14] ssk © (10.10.05 12:17)
> я не знаю. я ее не выбираю.
Ты предлагаешь мне выбрать? 8-)
Ты просишь конкретного ответа на неконкретный вопрос. Так не бывает.
Курдль (2005-10-10 12:21:00) [4]У всякой СУБД есть свой метод получения нового ID.
Даже у одноклеточных типа Paradox, Dbase, FoxPro и т.п. есть автоинкрементные поля, которые автоматически разруливаются движком.
Получать новые ID каким-либо синтетическим путем - категорически не рекомендуется.
ssk (2005-10-10 12:17:00) [5]Sergey13 © (10.10.05 12:14) [12]
А что? Военная тайна? Или пишем универсальную прогу?
да какая универсальность? я не знаю. я ее не выбираю. лучше расскажи, как правильносделать?
ssk (2005-10-10 12:14:00) [6]Fay © (10.10.05 09:25) [5]
Можно подробнее?
см. исходник в [10]
Sergey13 (2005-10-10 12:14:00) [7]2 [10] ssk © (10.10.05 12:08)
> нет, не оракл одонозначно.
А что? Военная тайна? Или пишем универсальную прогу?
ssk (2005-10-10 12:13:00) [8]Курдль © (10.10.05 11:27) [9]
Попробуй IsNull(FIELD_NAME, 0)
попробовал. выдает ошибку Capability not supported
эта же ошибка появляется и при применении NVL.
ssk (2005-10-10 12:08:00) [9]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
Курдль (2005-10-10 11:27:00) [10]Попробуй IsNull(FIELD_NAME, 0)
Sergey13 (2005-10-10 10:30:00) [11]>но для BDE она не срабатывает.
Это ложь. Срабатывает, если конечно БД по прежнему Оракл.
Danilka (2005-10-10 10:21:00) [12]ssk © (09.10.05 14:46)
Всем привет!
В оракле я с успехом использовал конструкцию
SELECT NVL(MAX(myID)+1, 1) FROM myTable;
В Оракле, за такой способ генерации ид-шника, следует оторвать руки.
Неужели про сиквенсы ничего не слышал?
Desdechado (2005-10-10 10:17:00) [13]вообще-то БДЕ - это посредник к СУБД
СУБД какая?
Fay (2005-10-10 09:25:00) [14]2 ssk © (10.10.05 9:16) [4]
>> решение я нашел
Можно подробнее?
ssk (2005-10-10 09:16:00) [15]
> Fay © (10.10.05 07:59) [3]
> А как вышло, что Вам приходится использовать BDE осенью
> 2005 года?
хотел себе жизнь облегчить. да видать, просчитался немного :-)
З.Ы. что касается темы, то решение я нашел. но оно мне не нравится, хотя и работает.
Fay (2005-10-10 07:59:00) [16]2 ssk © (09.10.05 21:15) [2]
А как вышло, что Вам приходится использовать BDE осенью 2005 года?
ssk (2005-10-09 21:15:00) [17]что ж, плохо. придется изголяться...
Fay (2005-10-09 17:02:00) [18]насколько я знаю, такой штуки нет