Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как узнать последнюю добавленную запись в бд?


Автор: ahito1 14.8.2009, 11:27
Нужно узнать какая запись была добавлена последней, т.е. свежее всех. И вывести данные из этой записи в edit-ы. То есть например есть таблица где есть поля машина и номер, и нужно узнать какая машина была добавлена последней, вывести её имя и номер в Edit. 

Автор: vovk 14.8.2009, 11:36
а какие в таблице поля есть?

Автор: ahito1 14.8.2009, 11:50
vovk, поле(столбец) машина и номер, нужно узнать последнюю добавленную машину и её номер. smile 

Автор: ahito1 14.8.2009, 14:40
неужели никто не знает??? smile  smile  smile 

Автор: Frees 14.8.2009, 14:59
выполнить запрос

Код

select first 1
 *
from car
order by id desc


Автор: vovk 14.8.2009, 15:29
 Frees,
Мне вот чтото не понятно откуда ты id взял ? Он же сказал что только номер и машина есть больше полей нет smile

Автор: ahito1 14.8.2009, 15:44
Frees, а можно подробнее, что такое "desc" и "id"?

Автор: vovk 14.8.2009, 16:07
Думаеш я зря у тебя про поля в таблице спросил smile "desc" это обратная сортировка, ну вроде 
"Z->a" если как текст.А "id" это имелось в виду в таблице поле первичныйк ключ идентификатор какбы smile может он и не ид у тебя в таблице... ты же ничего не сказалsmile

Автор: Данкинг 15.8.2009, 00:03
Добавляй в таблицу дату и время, и потом уже по ним ориентируйся.

Автор: ahito1 16.8.2009, 19:03
Данкинг, с этими датами в парадоксе уже замучался, приходится делать DateTostr, в таблицах хранить даты в виде текста, иначе никак, paradox выдает ошибку несовместимости даты:(

Автор: Данкинг 16.8.2009, 19:15
ahito1, откажись от парадокса. smile 
Да, ну а преобразование "на лету" из текста в дату, ведь, наверное, и там делать можно.

Автор: ahito1 16.8.2009, 19:24
можно, но потом нужно будет перебирать всю таблицу чтоб узнать одну дату, а это долго, sql запросом намного быстрее.
Что использовать вместо парадокса на локальной машине, аксесс не хочу.

Автор: Данкинг 16.8.2009, 20:15
Цитата(ahito1 @  16.8.2009,  20:24 Найти цитируемый пост)
можно, но потом нужно будет перебирать всю таблицу чтоб узнать одну дату, а это долго, sql запросом намного быстрее.

Зачем? smile Я парадокса ни разу не видел, но вообще-то обычно в СУБД функции преобразования типов можно использовать и в SQL-запросе. В том же Access (выбор значения поля как CHAR):
Код

select cstr(pole) from base


А Чем Access плох? Не хочешь его - юзай FireBird.


Автор: ahito1 16.8.2009, 21:27
Данкинг, спасибо, для Char -  cstr, а для даты или текста? 

Автор: offline 16.8.2009, 21:32
так последняя запись добавляется вроде в конец таблицы. Встань на нее методом Last  и прочитай данные

Автор: Данкинг 16.8.2009, 22:01
Цитата(ahito1 @  16.8.2009,  22:27 Найти цитируемый пост)
а для даты или текста?  

А что - в парадоксе то же самое? smile Если не ошибаюсь, то cdate и cint соответственно.

Цитата(offline @  16.8.2009,  22:32 Найти цитируемый пост)
так последняя запись добавляется вроде в конец таблицы.

Не знаю, как в парадоксе, но для всяких СУБД вроде тех же Access или Firebird данное утверждение будет неверным. smile 

Автор: offline 16.8.2009, 22:29
я думаю что метод Last переходит на последнюю добавленную запись если в таблице присутствует автоинкремент и сортировка идет по нему ;)

Но если метод Last не нравится то можно сделать совсем просто, после каждого добавления записи забирать ID этой записи и хранить ее в таблице настроек или в любом текстовом файле. Тогда соответственно последнее ID и есть свежая запись. А встать на запись по известному ID это пару секунд.

Автор: ahito1 17.8.2009, 10:03
Данкинг, не знаю, как в парадоксе, поищу, спасибо!
offline, спасибо, наверно придется дописывать id.

Автор: pseud 17.8.2009, 17:17
Цитата(ahito1 @  17.8.2009,  10:03 Найти цитируемый пост)
offline, спасибо, наверно придется дописывать id.

Добавить колонку id ("+" = тип автоинкремент) - обязательно. 
К ней и будешь вязаться. 
В других СУБД, напрмер Oracle, когда БД распределена на n-серверов с таким полем могут возникнуть проблемы и необходимо вязаться на поле дата/время.

Определять последнюю запись так:
Код

SELECT
  max(t.id)
FROM
  table t


Добавлено через 1 минуту и 19 секунд
Уточнение:
Код

SELECT
  max(t.id) as last_id
FROM
  table t

Автор: ahito1 21.8.2009, 23:42
спасибо

Автор: Akella 22.8.2009, 00:30
Цитата(ahito1 @  16.8.2009,  19:03 Найти цитируемый пост)
Данкинг, с этими датами в парадоксе уже замучался, приходится делать DateTostr, в таблицах хранить даты в виде текста, иначе никак, paradox выдает ошибку несовместимости даты:( 

парадокс прекрасно работает с датами

Добавлено через 53 секунды
Цитата(ahito1 @  16.8.2009,  19:24 Найти цитируемый пост)
Что использовать вместо парадокса на локальной машине

firebird

Добавлено через 1 минуту и 44 секунды
Цитата(offline @  16.8.2009,  21:32 Найти цитируемый пост)
так последняя запись добавляется вроде в конец таблицы. Встань на нее методом Last  и прочитай данные

Не угадал.
А если выполнить не Dataset.append, а Dataset.insert?

Добавлено через 2 минуты и 58 секунд
Цитата(offline @  16.8.2009,  22:29 Найти цитируемый пост)
я думаю что метод Last переходит на последнюю добавленную запись

Правильнее будет сказать - на последнюю запись.
А последняя и последняя добавленная - это разные вещи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)