![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать номер новой записи добавленой через... [D5, Win95/98, Win2k]
Knight © (2004-05-15 21:05:00)Query.SQL... ;
ExecSQL?
База Paradox.
sniknik (2004-05-17 08:27:00) [1]нравится так используй, но кто мешает совмешать и то и то? это в случае с SQL сервером таблицы - зло, а в варианте локальном/файл сервером нормально, даже наоборот лутше.
вот, если к примеру многопользовательский доступ, то в случае с SQL делаеш insert и следующей командой select max(id) ... (узнать) и никаких гарантий что между этими командами не вклинился второй юзер со своим инсертом...
а с табличным доступом ты останешся на той же записи, сколько бы соседи записей не добавили (или будет блокировка). в любом случае прочитаеш правильное значение.
Knight (2004-05-17 01:46:00) [2]
> sniknik © (17.05.04 01:35)
> смысла от SQL большого
> нет раз на серверной стороне нет sql-ного движка.
SQL мне нравится, удобством создания таблиц, сортировки, выборки, соединения данных из разных таблиц и т.п.
sniknik (2004-05-17 01:35:00) [3]> Было бы поле не автоинкрементным не было бы и вопроса.
так оно у тебя автоинкремент, и ты его читать пытаешся?, тогда recno ни в коем случае использовать нельзя, наверняка будут несовпадения.
после записи читай это поле и все, по другому опасно. и кстати для парадокса (т.к. локальный или файл сервер) таблицами работать лутше. (имхо) во всяком случае смысла от SQL большого нет раз на серверной стороне нет sql-ного движка.
Knight (2004-05-17 01:28:00) [4]
> [9] sniknik © (17.05.04 01:13)
Было бы поле не автоинкрементным не было бы и вопроса.
Переделаю вставку записей через Insert, используя либо TQuery в режиме TTable, либо просто TTable... хотелось - как лучше, а приходится - как всегда :)
Всем спасибо.
sniknik (2004-05-17 01:14:00) [5]сорри, имел в виду [0] а не [1]
sniknik (2004-05-17 01:13:00) [6]> Иногда ведь надо поместить какие-то данные в таблицу и взять номер новой записи, например из поля ID для размещения ещё где-то.
гораздо лутше (понятнее чем в [1]).
для ID можно использовать автоинкрементное (его же и ключом можно назначить)
если же нужно именно номер записи то у парадокса в таблицах(без фильтра и без включенного индекса) вполне TTable.RecNo работает. правда сразу после TTable.Append/TTable.Insert его не прочтеш неопределено еще (записи нет) читать надо после Post или до.
на самом деле и индекс с фильтром не помеха если помнить что выдается реальный номер записи а не отображаемый (перепутанный индексом)
а вот в SQL команды доступа к номеру нет.
Knight (2004-05-16 23:47:00) [7]>> SergP © (15.05.04 23:40)
> А вообще какой смысл узнавания номера записи? Для чего может пригодиться
> такая инфа?
Иногда ведь надо поместить какие-то данные в таблицу и взять номер новой записи, например из поля ID для размещения ещё где-то.
> Может лучше изменить алгоритм так чтобы не использовать эту инфу?
Например?
>> [6] SpartakVC (16.05.04 02:54)
Это если в TQuery включить RequestLive...
to All
Неужели нет подобия mysql_insert_id()?
Плохиш (2004-05-16 03:34:00) [8]2Knight
Наводящий вопрос: Что такое, в Вашем понимании, "номер новой записи добавленой через..."?
SpartakVC (2004-05-16 02:54:00) [9]Не факт, что номер добавленной записи будет равен количеству записей, так как в упорядоченной по ключу таблице она встанет на своё место по порядку, тем более применение INSERT приведёт к вставке записи в позицию курсора набора данных. Что бы узнать её номер лучше после вставки найти её, например,
TTable.Locate(['Имя Поля'], 'Значение поля вставленной записи', []);
TTable.RowNumber - ето есть номер нашей записи.
jack128 (2004-05-15 23:59:00) [10]с парадоксом не работал, но реляционная теория такого понятия как номер записи не знает ;-) Номер записи имеет какой то смысл в DataSet'e, но не в таблице..
SergP (2004-05-15 23:40:00) [11]
> А без открытия никак? Свойства там какие или ещё что?
Х/З . Не пробовал...
А вообще какой смысл узнавания номера записи? Для чего может пригодиться такая инфа?
Может лучше изменить алгоритм так чтобы не использовать эту инфу?
PS Что-то мастеров сегодня не видно.... Пьянствуют наверное... Базы - всегда была одной из лучших конференций в плане ответоспособности мастеров...
Knight (2004-05-15 22:29:00) [12]Так может проще через Insert?
Knight (2004-05-15 22:04:00) [13]
> SergP © (15.05.04 21:48)
А без открытия никак? Свойства там какие или ещё что?
SergP (2004-05-15 21:48:00) [14]По идее номер добавленной записи должен быть равен общему числу записей в таблице:
with Query do
begin
SQL.Text:='select count(*) as cnt from Mytable';
Open;
First;
NumRecord:=FieldByName('cnt').AsInteger;
Close;
end;