Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.049 c
2-1130596420
ruslan1
2005-10-29 18:33
2005.11.20
LPT порт


2-1130956076
floxi
2005-11-02 21:27
2005.11.20
Умножение матриц


11-1093729013
Sormy
2004-08-29 01:36
2005.11.20
Delphi 7.0 Вылетает...


14-1130228493
Ega23
2005-10-25 12:21
2005.11.20
С днем рождения! 7 октября


2-1131051559
StasStas
2005-11-03 23:59
2005.11.20
Не знаю как сделать.Функция доканает !





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский