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

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

эмуляция поля autoinc [D7]


Страницы:   1 2

mixam ©   (2004-06-01 09:17:00) 

в парадоксе есть тип поля autoInc - вот меня он не устраивает т.к. нарашивает значение после post, а мне надо знать значение во время insert


asp   (2004-06-02 11:23:00) [1]

В DB2 есть такой механизм.
Заводим уникальное поле как CHARACTER(13) FOR BIT DATA
И пользуемся функцией GENERATE_UNIQUE(), которая всегда возвращает уникальное значение.

В приложение кладем qrUnique: TQuery
SELECT NUM.NUM
FROM (VALUES(GENERATE_UNIQUE())) AS NUM(NUM)

Оформляем:
function Tdm.GenerateUnique: Variant;
begin
 Self.qrUnique.Open;
 Result:= Self.qrUniqueNUM.Value;
 Self.qrUnique.Close
end;

И на нужном DataSet'е пишем:
procedure TForm1.Query1NewRecord(DataSet: TDataSet);
begin
 DataSet.FieldByName('ID').AsVariant:= dm.GenerateUnique
end

Минусы только в отсутствии привычного INTEGER и немного большим размером поля.


bn2   (2004-06-02 09:50:00) [2]

Барт Симпсон написал: "I will use Google before asking dumb questions". Например, на torry.ru куча ответов...
Насчёт "всех типов данных" - совершества нет. Всегда есть условия, которые надо учитывать. И всегда есть выбор между н-мегабайт БДЕ и отсуствием "супер-пупер типа данных".

ЗЫ. В MySQL вообще много чего нет (проще перечислить, что есть) - а куча народу использует. В Парадоксе хоть форинг-кей есть....


vlad-mal   (2004-06-01 19:18:00) [3]

Даже сейчас есть большой смысл применять Парадок. Первый из них - переносимость приложения, особенно есть используется не БДЕ, а визуальные компоненты, напрямую работающие с базой.

Назови хотя бы один способ, кроме BDE, в которм поддерживаются все типы данных при чтении и можно не только читать, но и писать.

Нет таких! Если только сам Paradox... (но и он, кажется, BDE юзает?)


bn2   (2004-06-01 18:35:00) [4]

Самый правильный способ - это использовать вспомогательную таблицу, где будут хранится текущие значения счётчиков для разных таблиц. Способ этот применяется в большинстве СУБД, только выглядит он как тригер+секвенс (Оракл, Интербейз). Случаев, когда нужно при добавлении знать будущий ключ записи - больше чем достаточно при более-менее серьёзной задаче.

ЗЫ. Даже сейчас есть большой смысл применять Парадок. Первый из них - переносимость приложения, особенно есть используется не БДЕ, а визуальные компоненты, напрямую работающие с базой.


bushmen   (2004-06-01 11:06:00) [5]

>я про субд

Круг довольно обширен - от Firebird, MSSQL Server, DB2, Sybase до Oracle. Это наиболее распространенные. Есть и другие.


Anatoly Podgoretsky   (2004-06-01 10:47:00) [6]

Спектр используемых баз очень широк.


mixam   (2004-06-01 10:37:00) [7]

вы бы хоть назвали то, на что присели .
я про субд.


Alexandr   (2004-06-01 10:31:00) [8]

не... упаси бог воевать. Ради чего?


app   (2004-06-01 10:29:00) [9]

если есть желание повоевать то заведите тему: что то против чего то.


Alexandr   (2004-06-01 10:28:00) [10]


>
> А у вас, я замечу, тоже не всегда все гладко, так что давайте
> не будем


да, давайте не будем про то, у кого где гладко.
И обсуждать вопрос про выбор СУБД не будем.
пусть учатся на своих ошибках.


DenK_vrtz   (2004-06-01 10:25:00) [11]

>Alexandr   (01.06.04 10:15) [9]
>я еще с ДВК начинал

разговор про СУБД, а не про тип ПК

>Назовите хоть один аргумент в пользу парадокса по сравнению с клиент-серверными СУБД

обсуждать данный вопрос в рамках данного топика не имеет никакого смысла

А у вас, я замечу, тоже не всегда все гладко, так что давайте не будем


Alexandr   (2004-06-01 10:24:00) [12]

А что, другие перенести нельзя?
Или Yaffil Personal или Firebird Embedded сложно переносить?
Да гораздо проще.


-=alive=-   (2004-06-01 10:23:00) [13]

Есть аргумент, переносимость на другие машины.


Alexandr   (2004-06-01 10:15:00) [14]


> DenK_vrtz ©   (01.06.04 09:38) [4]
> >Alexandr   (01.06.04 09:29) [2]
>
> ничего постыдного в этом не вижу! Все с чего-то начинали.


я еще с ДВК начинал. Что это меняет?
Сейчас НЕТ НИКАКОГО СМЫСЛА что-то писать на парадоксе.
Мало того, что это глючно, так еще и очень тяжело. Вон чувак уже с первой проблемой столкнулся.
Эти все проблемы уже давно решены в нормальных СУБД, мало того, с ними  работать проще, ресурсов сравнительно одинакого, если еще не меньше. Назовите хоть один аргумент в пользу парадокса по сравнению с клиент-серверными СУБД.


Sandman25   (2004-06-01 10:07:00) [15]

[7] Anatoly Podgoretsky ©   (01.06.04 10:06)

Естественный ключ может быть изменяемым (фискальный код или номер паспорта, например). Тогда будут проблемы при update связанных таблиц.


Anatoly Podgoretsky   (2004-06-01 10:06:00) [16]

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


Sandman25   (2004-06-01 10:00:00) [17]

Если есть естественный ключ (уникальное поле или совокупность полей), то можно узнавать id вставленной записи сразу после insert с помощью select id from mytable where my_unique_field = 'my_value'


Anatoly Podgoretsky   (2004-06-01 09:51:00) [18]

Если не устраивает авто, то номера присваивай сам, можно получать последний номер как указано  [1] правильно работает только в случае работы одного экземпляра программы.
Нужен ли именно номер? Что он за собой несет?


DenK_vrtz   (2004-06-01 09:38:00) [19]

>Alexandr   (01.06.04 09:29) [2]

ничего постыдного в этом не вижу! Все с чего-то начинали.

>mixam ©   (01.06.04 09:31) [3]

я ж написал запрос :) Но автоинкрементное поле, я считаю, надежнее.


mixam   (2004-06-01 09:31:00) [20]

Да мысль, а пример виртуального (кодом) создания запроса с полем id можешь дать. Буду благодарен.


Страницы:   1 2

Наверх

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