Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access + ado + редактирование + вычисление, как реализовать лучше 
:(
    Опции темы
Spirit_FTZI2
Дата 10.8.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Помогите с логикой. Есть база с users.mdb с таблицей log. В таблице имя, время обращения к системе, дата. Нужно открыть базу, пощитать отработаное время (разница между временем первого и последнего отмечания за отпределенную дату), произвести прочие вычисления. 
Мои мысли: как вычислять то и куда заносить данные? Я через ADO подключился к базе, все записи отобразил в dbgrid. Можно было бы по ходу добавить пару столбцов в DBgrid и произвести вычисление и вписать значения в грид. Но туда мне сложно чтото вписать и как обратиться к ячейке не знаю. Потом возникла мысль если создать еще временную таблицу в Access и записать туда вычисления? 

Что посоветуете? как лучше реализовать?
PM MAIL   Вверх
ALeXandrK
  Дата 10.8.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Не нужно никаких временных таблиц. Для вычислений прекрасно подходит SQL.
Просто открывай таблицы через TADOQuery. В нем и можно создать вычисляемые поля.

Пример SQL запроса:
Код

SELECT *, (МестВсего-МестЗанято) AS СвободноМест
FROM ПассажирскиеМестаВСамолете;

Этот запрос вернет тебе все поля твоей таблицы + добавит поле СвободноМест, кот.
является результатом разницы двух других существующих полей.

И что самое удобное - тебе не нужно будет программно добавлять поля в компоненты,
они будут доступны как-будто они есть в базе smile 

Так что обращайся к SQL и компонентам, поддерживающие его.
SQL язык очень простой, так что дерзай. 

P.s.: Запросы можно составлять в Access с помощью SQL конструктора. Он позволяет делать это
даже не зная SQL.


Это сообщение отредактировал(а) ALeXandrK - 10.8.2007, 16:33


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Spirit_FTZI2
  Дата 10.8.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Ух ты... smile Класс, не знал smile  smile 
А если поля - тип времени, время так же можно отнимать? (нужно именно разница времени) Тогда буду лопатить SQL, сенкс!!!   smile 
PM MAIL   Вверх
ALeXandrK
Дата 10.8.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Время - это тоже число, поэтому с ним можно делать то же, 
что и с обычными числами smile 


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Spirit_FTZI2
Дата 14.8.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



name               timein                             timeout                        vremya

Sergey - 30.12.1899 9:15:00 - 30.12.1899 17:47:00 - 0,355555555555556


SQL: select name, timein, timeout, (timeout - timein) AS vremya from test

Как быть с числом 0,35555... Нужно получить разницу времени...   smile 
PM MAIL   Вверх
volvo877
Дата 14.8.2007, 19:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 4
Всего: 116



Цитата(Spirit_FTZI2 @  14.8.2007,  18:48 Найти цитируемый пост)
Нужно получить разницу времени

Код

select name, timein, timeout, CDate(timeout - timein) AS vremya from test
?
PM MAIL   Вверх
Spirit_FTZI2
Дата 15.8.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Отлично  smile 
Спасибо!!!
Только остался еще один маааленький вопросик: в базе поле timein, например, имеет тип Дата/Время (короткий тип времени), в базе красиво и показывается время 9:15:00, а вот в dbgrid'е показывается полный формат 30.12.1899 9:15:00. Можно ли как то показать только время в формате 9:15:00???

Сори, кому уже надоел глупыми вопросами...
PM MAIL   Вверх
ALeXandrK
  Дата 15.8.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



У TADOTable | TADOQuery | TQuery | TTable открой список полей, выбери  поле timein и 
в свойстве DisplayFormat напиши hh:nn:ss (если написать h:n:s, то будет вместо 09:08:07 отображаться 9:8:7).


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.