Форум: "Начинающим";
Текущий архив: 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.099 c