Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

Как узнать "автономер" сохраняемой записи?   Найти похожие ветки 

 
КирилЛ   (2009-02-06 15:07) [0]

Сделал ключевым полем в таблице - автономер. Как узнать его после сохранения записи в базе? (ADO + Access)


 
Anatoly Podgoretsky ©   (2009-02-06 15:28) [1]

> КирилЛ  (06.02.2009 15:07:00)  [0]

Иногда надо и документацию читать, а в ней сказано SELECT @@IDENTITY


 
КирилЛ   (2009-02-06 16:12) [2]

> Anatoly Podgoretsky ©   (06.02.09 15:28) [1]

правильно ли я Вас понимаю:
... //создаю новую запись с помощью INSERT
ADOQuery.Close;
ADOQuery.SQL.Text:="SELECT @@IDENTITY FROM TableMain";
ADOQuery.Open;
num:=ADOQuery.Field[0].AsInteger;

так?


 
Palladin ©   (2009-02-06 16:21) [3]


> КирилЛ   (06.02.09 16:12) [2]

почти

http://delphimaster.net/view/3-1216374027/


 
КирилЛ   (2009-02-06 18:20) [4]

> Palladin ©   (06.02.09 16:21) [3]

var
cm: TADOCommand;
ds: TADOQuery;
..

cm := TADOCommand.Create(nil);
cm.Connecton := ..
cm.CommandText := "Insert ...   "+" Select @@indentity";
ds := TADOQuery.Create(nil);
ds.recordset := cm.execute;
NewID :=  ds.recordset.Fields[0].AsInteger;
ds.Free;
cm.Free;

Вы про это? Обязательно нужен TADOCommand?
Или можно решить всё с одним ADOQuery?


 
Anatoly Podgoretsky ©   (2009-02-06 18:37) [5]

> КирилЛ  (06.02.2009 16:12:02)  [2]

А советы на практике проверять умеешь?


 
КирилЛ   (2009-02-07 08:41) [6]

> Anatoly Podgoretsky ©   (06.02.09 18:37) [5]

Проверил: ошибка - "Пропущен символ (;) в конструкции SQL"!
INSERT INTO MainTable (FIO, Nazv) VALUES (:FIO, :Nazv) Select @@indentity
пробовал разные варианты...
В чём ошибка?


 
sniknik ©   (2009-02-07 09:38) [7]

> В чём ошибка?
access (jet) не позволяет пакеты комманд, только по одной.

и кстати, почему из всех ответов выбран такой неудачный? выбор не по содержанию, а по количеству кода в нем?


 
КирилЛ   (2009-02-07 10:07) [8]

> access (jet) не позволяет пакеты комманд, только по одной.
Спасибо!
> и кстати, почему из всех ответов выбран такой неудачный?
Да меня самого запутали! Правильно я думал:
> ... //создаю новую запись с помощью INSERT
> ADOQuery.Close;
> ADOQuery.SQL.Text:="SELECT @@IDENTITY FROM TableMain";
> ADOQuery.Open;
> num:=ADOQuery.Fields[0].AsInteger;


Вопросик на последок:
Почему ADOQuery.RecordCount после @@IDENTITY > 1?
Я так понял, что он должен возвращать только значение поля "автосчётчик"!


 
sniknik ©   (2009-02-07 13:14) [9]

> Да меня самого запутали! Правильно я думал:
миллион записей из таблицы ради одного значения это правильно? ...

> Почему ADOQuery.RecordCount после @@IDENTITY > 1?
вот и я про то же, и Palladin в [3] наверняка это же имел в виду когда ссылку приводил, а ты выбрал оттуда не пойми что.


 
КирилЛ   (2009-02-08 09:44) [10]

> sniknik ©   (07.02.09 13:14) [9]
реально, что я ещё там смог там найти:
Select IsNull(max([id])+1, 1) FROM [SomeTable]
остальное как-то абстрактно:
> написать универсальную функцию и подключить ее
> синхронное выполнение запросов
> RETURNING. Это правда тоже не в Access-е, но какая нахрен разница
подскажите - что я должен был там увидеть?

И вот max([id])+1 мне понятен, а IsNull(max([id])+1, 1) - это что за конструкция?


 
palva ©   (2009-02-08 11:59) [11]


> Select IsNull(max([id])+1, 1) FROM [SomeTable]

У меня такое не работает. Функция IsNull требует один аргумент и возвращает истину, если этот аргумент NULL. Я бы предложил такой вариант:
SELECT IIF(MAX(id) IS NULL, 0, MAX(id)) + 1 FROM Table1


 
sniknik ©   (2009-02-08 12:33) [12]

> подскажите - что я должен был там увидеть?
Palladin ©   (18.07.08 13:56) [2]
sniknik ©   (18.07.08 14:09) [4]
sniknik ©   (18.07.08 16:30) [10]

ну и вообще все обсуждение, чтобы понять  access <> mssql <> oracle и т.д. (верно и обратное), и начать относится с осторожностью к постам где написано "это не аксесс(/...) но ..." такие требуют проверок и доработок по месту (возможно требуют конечно...)

> - это что за конструкция?
еще одна конструкция никакого отношения к аксессу не имеющая.

> Я бы предложил такой вариант:
> SELECT IIF(MAX(id) IS NULL, 0, MAX(id)) + 1 FROM Table1
на форуме извращенцев он бы занял призовое место... и к тому же это тоже нерабочая для ассесс конструкция.


 
sniknik ©   (2009-02-08 12:55) [13]

и кстати до ссылки можно бы и не доходить...
смотрю Anatoly Podgoretsky ©   (06.02.09 15:28) [1] и тут дал правильный совет, особенно что касается документации... т.к. именно из за нее ты похоже все понимаешь через кривую призму своих представлений... читал бы доку, понял бы сразу.


 
palva ©   (2009-02-08 14:22) [14]


> это тоже нерабочая для ассесс конструкция

В Access это работает. А другой работающей конструкции для этой цели я не смог придумать, да и в ветке никто не предложил.


 
sniknik ©   (2009-02-08 15:05) [15]

> В Access это работает.
компилируется? - да. выдает результат? - а как же. но это не рабочая конструкция. т.к. результат непредсказуем.

сделай 2 коннекта (ADOConnect) к одной базе, подцепи туда все что полагается (ADOCommand с инсертом, ADODataSet с твоим запросом) и попробуй погонять в разных вариантах, типа
инсерт1  
инсерт2
получитьID1
получитьID2
ну и показать ID1/2
будешь удивлен результатами, особенно если попытаеш предсказать что там должно получится.

> да и в ветке никто не предложил.
???
сколько раз повторялось
SELECT @@IDENTITY

и все одно "никто"?


 
palva ©   (2009-02-08 15:42) [16]


> это не рабочая конструкция. т.к. результат непредсказуем.

Еще одно определение не рабочей конструкции? Конструкция рабочая, так как работает и выдает ровно то, что попросил программист.

> SELECT @@IDENTITY
> и все одно "никто"?

Никто, значит никто. Могу еще раз написать, если до вас плохо доходит. А то что вы написали, это не ответ на вопрос, заданный в конце [10].


 
sniknik ©   (2009-02-08 16:26) [17]

> так как работает и выдает ровно то, что попросил программист.
т.е. если оно будет выдавать одну и ту же цифру там где ожидаются разные (коннекты то разные) и эта цифра даже не будет равна той, что ожидается по сути запроса (max+1, т.е. от последнего инсерта) то это именно то что попросил программист?
может лучше тогда сразу все программирование на генератор случайных чисел перевести?

> А то что вы написали, это не ответ на вопрос, заданный в конце [10].
а, так ты оказывается отвечал на чисто частный вопрос о конструкции, а пример запроса выбрал в соответствии с ответом на основной, и ничего не сказал об этом, это чисто так, чтобы побольше запутать...
> если до вас плохо доходит.
теперь дошло. больше путаницы у начинающих = меньше конкуренции в будущем.
молодец. все правильно сделал. (© из какой то глупой рекламы)


 
palva ©   (2009-02-08 16:43) [18]


> а, так ты оказывается отвечал на чисто частный вопрос о конструкции...

Вообще-то да. С основным вопросом автор, как я понял уже, разобрался. Он задал дополнительный вопрос о некоей конструкции, которая меня самого привела в недоумение. Я и написал, что у меня это не работает. Я написал свой вариант. Может быть, можно было бы написать лучше, раз этот вариант является извращением. Мне было бы интересно об этом узнать. Вариант с COALESCE у меня тоже не заработал.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.052 c
6-1201359995
Nucer
2008-01-26 18:06
2009.03.29
SOMAXCONN


2-1233786340
Dmitry87
2009-02-05 01:25
2009.03.29
Обработка большого кол-ва строк


15-1232364173
Добежал
2009-01-19 14:22
2009.03.29
Сокрытие курсора с экрана


2-1233732829
проходил мимо решил зайти
2009-02-04 10:33
2009.03.29
Сортировка данных таблице


15-1232335816
Slider007
2009-01-19 06:30
2009.03.29
С днем рождения ! 19 января 2009 понедельник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский