powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с вариантом решения задачи
15 сообщений из 15, страница 1 из 1
Помогите с вариантом решения задачи
    #32731548
Alexa12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл такой: есть таблица с тремя полями (дата, показания начальные, показания конечные). Это показания спидометра автомобиля за каждый день для составления плана расхода бензина. Вводится должно только конечное показание, а в начальное показание за этот день должно копироваться конечное показание предыдущего дня автоматически. Как можно эффектно решить эту задачу ? Какие варианты предложите. Сразу оговорюсь, что таблица довольно большая и использование DLoockUp тормозит.
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32731645
SinnerXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заджойнить саму с собой по условию,
данная строока = предыдущая строка [- 1]
( это условия поиска пред. строки )
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32731684
guestt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проиндексировать поля, и в зависимости от задачи и платформы, использовать поиск по индексу из VB (VBA) или запрос для отбора записи с максимальными "показаниями конечными" (или максимальной датой).
ИМХО:
1.) Если у вас в задаче больше одного автомобиля, то желательно добавить в таблицу и идентификатор автомобиля и искать уже с учетом этого идетификатора.
2.) Автомобиль расходует бензин не только во время пробега и норма может меняться в зависимости от загрузки автомобиля
3.) В некоторых случаях счетчик одометра может сбрасываться
4.) и много еще чего,
т.е. "задача (план расхода бензина) в чистом виде одной таблицей решается сложно", есть смысл пересмотреть структуру проекта.
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32731688
Iskander68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то не рекомендуется иметь в одной таблице зависящие друг от друга
данные. Я бы сделал вместо трех полей два: дата и то, что нужно вводить.
Потом сделал бы запрос с нарастающим итогом и на его основе форму. Про
нарастающий итог в форуме можно много нарыть.

--
Regards
Alexander Artamonov


"Alexa12" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:1022211@sql.ru...
Смысл такой: есть таблица с тремя полями (дата, показания начальные,
показания конечные). Это показания спидометра автомобиля за каждый день для
составления плана расхода бензина. Вводится должно только конечное
показание, а в начальное показание за этот день должно копироваться конечное
показание предыдущего дня автоматически. Как можно эффектно решить эту
задачу ? Какие варианты предложите. Сразу оговорюсь, что таблица довольно
большая и использование DLoockUp тормозит.
Тема Ответить

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32731704
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня подобная задача. можно посоветовать в таблице где хранятся данные машин добавить поле с последним показанием одометра и при очередном заполнении основной таблицы брать это данное из относительно небольшой таблицы посредством dlookup
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32731711
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то Iskander68 прав, но с учетом того о чем упомянул GuestT, задача далеко не тривиальная и требует много логики
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32731716
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эффектно решить эту задачу можно так - заводите таблицу "Остатки топлива по автомобилю", где будет жить и обновляться начальный остаток топлива на день. Проверено - так будет работать быстрее чем все время этот остаток вычислять из предыдущих расходов
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732021
Alexa12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заводить таблицу для хранения конечных показаний предыдущего дня не удобно, поскольку не получится изменить скажем показания за более ранний период. К тому же как быть если за один день нет вообще показаний, точнее они не менялись. Вбивать одно и тоже не логично. Какие еще варианты подскажите. Только усложнять задачу типа нормы, нагрузки не надо. Надо просто что-то на подобие екселя с копированием предыдущих значений только на аксесе.
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732039
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм интересно, а если вы в середине таблицы измените показания, последующие значения разве не должны измениться? Такая цепочка предполагает либо запрет изменения всех кроме последнего либо изменение всех последующих при изменении предыдущего?
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732112
Alexa12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совершенно верно, вся цепочка должна измениться при изменение раннего показания.
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732151
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот например Таблица1 Уид,Дата,показания_начала,оказания_окончания

Таблица2(вспомогательная) Уид,показания_текущие


если уж все равно по объектам уид менять показания, то занести одну цифру в поле показания_текущие - ерунда, зато всегда под рукой
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732160
Alexa12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл я просек, только с обновлением последних показаний во вспомогательной таблице возникнут временные проблемы, так как данные, как я понимаю, подразумевается брать запросом по первоначальной таблице со смещением строки на -1. Или как-то по другому ?
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732241
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE [Бензин] (
	[id] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[дата] [datetime] NOT NULL ,
	[показания начальные] [int] NULL , -- лишнее поле. можно убрать.
	[показания конечные] [int] NOT NULL ,
	CONSTRAINT [PK_Бензин] PRIMARY KEY  CLUSTERED 
	(
		[id]
	)  ON [PRIMARY] 
) ON [PRIMARY]

CREATE  UNIQUE  INDEX [IX_Бензин] ON [dbo].[Бензин]([дата]) ON [PRIMARY]

-- ' Это сделает все как надо 
CREATE VIEW dbo.Бензин_
AS
SELECT     B.id, B.дата, B.[показания конечные], BB.[показания конечные] AS [показания начальные]
FROM         dbo.Бензин B LEFT OUTER JOIN
                      dbo.Бензин BB ON BB.дата =
                          (SELECT     MAX(дата)
                            FROM          dbo.Бензин X
                            WHERE      X.дата < B.дата)GO

...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732296
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexa12Совершенно верно, вся цепочка должна измениться при изменение раннего показания.
Эх - вот тут бы и пригодились триггеры :)

Быстренько переходим на MSSQL



По сути:
- Допущения:
1. Есть таблица транспортных средств (ТС)
2. Значение спидометра только возрастает (не сбрасывается)
3. Тоже самое с датой
4. Вводится не более одной записи в день (на одно ТС)
- Таблы:
1. Авто (Код*, Название, Последнее значение спидорметра)
2. Спидометр (Код авто*, Дата*, Начало дня, Конец дня)
* = PK
- Идея:
1. Вводим новое значение спидометра (X) для авто с кодом (N)
2. Добавляем запись в таблу "Спидометр" (Код Авто = N, Дата = Date(), Начало дня= DLookUp("Последнее значение спидорметра", "Авто", "Код = " & N), Конец дня = X)
3. Обновляем таблу "Авто" (Последнее значение спидорметра = X)
- ЗЫ:
1. Не забыть предусмотреть крайние случаи (Первая запись в "Спидометр" для нового ТС)
2. Предусмотреть триггер (или псевдо-триггер) для изменения записи в таблице "Спидометр"
...
Рейтинг: 0 / 0
Помогите с вариантом решения задачи
    #32732348
guestt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть все-таки удобней было бы не хранить начальные и конечные показания, а хранить приращение показаний одометра?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с вариантом решения задачи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]