![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проследняя запись в таблице
Муслик © (2008-06-17 10:50:00)Скажите пожалуйста как узнать последнюю запись в таблице (BDE)
Муслик (2008-06-17 12:52:00) [21]Ega23 ©так оно и есть. так оно и сделано! но проблема в том что я не могу вывести сделанную мной последнюю запись в базе
Поросенок Винни-Пух (2008-06-17 12:51:00) [22]Последняя запись эта та запись, которую я в программе ввёл "последней".
Зашибись.
местное время 12:50
вставляем запись.
меняем время на 12:00
вставляем запись.
Какая из них будет "последней"?
Ega23 (2008-06-17 12:49:00) [23]
> Так вот № Визы ввожится вручную но порядковы, но не сделан
> ключевым так как может идти не попорядку тоесть 00120 и
> сразу за ним 00122 вот для каждого Имени из первой таблицы
> присваивается номер Визы вот мне нужно вывести последнюю
> запись из таблицы 2 № Визы, но не отдельного Агента а всей
> таблицы 2 или вывести просто последнюю запись Визы
Так вот, для этого дела существует суррогатный ключ: есть ключевое поле-счётчик и есть поле "номер Визы" с уникальным индексом. Счетчик назначается автоматически самой СУБД и является первичным ключом. И ему пофиг на порядковые номера виз и другие поля. Номер визы вводится вручную, при этом уникальный индекс не даёт возможности ввести 2 одинаковых номера. И, кстати, он вообще строкой может (и ИМХО даже должен) являться.
Читать про проектирование БД.
Муслик (2008-06-17 12:49:00) [24]MsGuns ©при твоей функции она будит показывать сколько записей в таблице Label1.Caption := IntToStr(GetMaxNumber(Table2)-1);
Муслик (2008-06-17 12:45:00) [25]Последняя запись эта та запись, которую я в программе ввёл "последней".
Если кинуть на форму ещё грид отдельно и задать ей номер визы без индекса точнее не связывать её с первой таблицей она мне показывает все полностью запись № Визы я могу просмотреть последнюю запись но это не выход из положения я так думаю
MsGuns (2008-06-17 12:43:00) [26]Связка Мастер-Детал, очевидно, представлена "волшебными" компонентами TTable
Тяжелый случай.
Для того, чтобы в детале найти тот самый "последний номер" есть два способа
1) При наличии индекса у детала на этот самый "последний номер" активировать этот индекс и тогда использовать метод Table2.Last, а затем уже
Label1.Caption := Table2.FieldByName(<Имя поля с номером>).AsString;
2)Если индекса нет, то сканировать весь детал в поисках наибольшего значения пресловутого поля:
function TForm1.GetMaxNumber(DataSet: TDataSet) : integer;
var
bm: TBookMark;
begin
result := -1;
with DataSet do
begin
bm := GetBookMark;
DisableControls;
First;
While Not Eof do
begin
if FieldByName(<Имя поля с номером>).AsInteger>result then
result := FieldByName(<Имя поля с номером>).AsInteger;
Next;
end;
GoToBookMark(bm);
FreeBookMark(bm);
EnableControls;
end;
end;
Обращение:
Label1.Caption := IntToStr(GetMaxNumber(Table2));
Но вообще все это уродливо, начиная от парадокса, продолжная отсутствием ключей и заканчивая TTable
Поросенок Винни-Пух (2008-06-17 12:38:00) [27]и что такое "последняя" запись при таком раскладе?
Anatoly Podgoretsky (2008-06-17 12:38:00) [28]> Муслик (17.06.2008 12:22:33) [33]
Так тут никакими последнеми записями и не пахнет.
ЗЫ: не ищи последнею запись, не зная что это такое, поскольку сказать не можешь. Сумеешь объяснить, что такое последнея запись, то возможно получишь ответ или категорическое НЕ
Муслик (2008-06-17 12:22:00) [29]Существует таблица 1 - [№, Имя, Сумма]
Таблица 2 (привзанная к первой) - [№ Визы, Дата, Сумма]
Так вот № Визы ввожится вручную но порядковы, но не сделан ключевым так как может идти не попорядку тоесть 00120 и сразу за ним 00122 вот для каждого Имени из первой таблицы присваивается номер Визы вот мне нужно вывести последнюю запись из таблицы 2 № Визы, но не отдельного Агента а всей таблицы 2 или вывести просто последнюю запись Визы
Anatoly Podgoretsky (2008-06-17 12:16:00) [30]> Муслик (17.06.2008 12:15:31) [31]
Тогда что такое последняя запись?
Муслик (2008-06-17 12:15:00) [31]СУБД Paradox.
Василий Жогарев (2008-06-17 12:11:00) [32]Сорри за разные ники... куки непотерты...
Anatoly Podgoretsky (2008-06-17 12:09:00) [33]> Игорь Шевченко (17.06.2008 12:06:27) [27]
Ну славо богу, а то я уже испугался за теорию РСУБД
андр. (2008-06-17 12:09:00) [34]
> Anatoly Podgoretsky © (17.06.08 11:59) [25]
Несу ответственность точно также как и автор несет ответственность за свой вопрос, не указав используемую СУБД...
Игорь Шевченко (2008-06-17 12:06:00) [35]Anatoly Podgoretsky © (17.06.08 12:04) [26]
Нет, не вернет. Даже первую не вернет, потому что синтаксис запроса неверный
Anatoly Podgoretsky (2008-06-17 12:04:00) [36]> Игорь Шевченко (17.06.2008 11:55:24) [24]
И что вернет последнею запись в Таблице, а что у у Оракла есть такое понятие и что на это никакак не влияет примененый ORDER BY
Anatoly Podgoretsky (2008-06-17 11:59:00) [37]> Василий Жогарев (17.06.2008 11:54:23) [23]
Ты несешь ответственность за свои слова или как?
Или ты телепат, не зная ни чего о базе такое заявить.
Садись два.
Игорь Шевченко (2008-06-17 11:55:00) [38]
> Может ты хотел сказать: SELECT TOP 1 * FROM [TABLE] ORDER
> BY [FIELD] DESC
Для СУБД Oracle в самый раз
Василий Жогарев (2008-06-17 11:54:00) [39]
> Проследняя запись в таблице
>
> Муслик (17.06.08 10:50)
> Скажите пожалуйста как узнать последнюю запись в таблице
> (BDE)
Ответ1:
> Правильный-Вася (17.06.08 10:52) [2]
> Table.Last
Ответ2:
> affonya (17.06.08 10:52) [3]
> select * from table order by desc;
ЗЫ
Может ты хотел сказать:SELECT TOP 1 * FROM [TABLE] ORDER BY [FIELD] DESC
Ответ 3:
> affonya (17.06.08 10:59) [8]
> то ega
> хе хе , но вариант то верный .. проверьте -) а Table.Last;
> тоже поидее работать будет.
>
> select max(id) from table - последняя запись
Только наверное:
SELECT *
FROM [TABLE] t
WHERE (Kod IN
(SELECT MAX(Kod) AS Kod
FROM [TABLE] AS d
WHERE (t.[Field] = d.[Field])))
или по дате...
SELECT *
FROM [TABLE] t
WHERE ([Date] = (SELECT MAX([Date]) AS [Date] FROM [TABLE] d))
Anatoly Podgoretsky (2008-06-17 11:44:00) [40]
> Ещё раз спрашиваю какая СУБД и есть ли ключевое поле.
Читать [15] и [18]