Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Аналог оракловой функции 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
14-1130705366
Джо
2005-10-30 23:49
2005.11.20
Юным дарованиям посвящается.


6-1123706619
Trojan_nt
2005-08-11 00:43
2005.11.20
Помогите создать статистику DSN Инета


4-1127247140
ArtemESC
2005-09-21 00:12
2005.11.20
Как убрать строку с Caption


3-1128619019
Alex_T
2005-10-06 21:16
2005.11.20
Неужели никто не знает???!!!


2-1130407093
Ольга
2005-10-27 13:58
2005.11.20
Ошибка при создании XMLDoc