Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478

Обновление данных в Access

28.11.2011, 09:29. Показов 2675. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется база(Access) в которой присутствуют поля:
Kod(число), UnsdBasicVac(число), ChrgdBasicVac(логич).

В делфи подключена эта база через ADO в соответсвующие поля:
DBEdit1 - Kod
DBEdit2 - UnsdBasicVac
DBCheckBox - ChrgdBasicVac

При нажатии на кнопку "Записать" происходит отправка следующего SQL-запроса:
SQL
1
2
UPDATE TABLE SET 
UnsdBasicVac = UnsdBasicVac + IIF([ChrgdBasicVac]=TRUE,2,0)
Теперь про порядок работы:
Пользователь вводит определенные данные в поле UnsdBasicVac и нажимает "Записать"
Если в ChrgdBasicVac галка стоит, тогда к введенному пользователем числу прибавляется 2, иначе 0.
Проблема в том, что если пользователь нажмет кнопку более 1 раза, запрос запишет значение ChrgdBasicVac столько раз, сколько будет нажата кнопка.

Как избежать такой ситуации?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2011, 09:29
Ответы с готовыми решениями:

Access - обновление данных в таблице
Добрый день уважаемые программисты. Среда разработки: Embarcadero Delphi XE3. Технология доступа: ADO. Имеется: Таблица admins ...

Обновление данных в access
Помогите с такой условием в таблице "организации" есть поле "email" - значение (a,b,c) и поле "признак" - значение (A,B,C) в...

Обновление данных в Access
Привет всем! Есть небольшая проблема: на форме есть DGV и два Textbox. В DGV находится таблица (наименование, количество). При добавление...

18
 Аватар для Елена
2454 / 797 / 24
Регистрация: 18.08.2009
Сообщений: 1,697
28.11.2011, 10:25
если бы писалось в акцессе, то можно задать свойство кнопки после выполнения обновления , например невидимая. Пусть становится видимой только после какого-либо действия на форме
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
28.11.2011, 10:41
Сделай inputbox.
0
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
28.11.2011, 10:43  [ТС]
Цитата Сообщение от Елена Посмотреть сообщение
если бы писалось в акцессе, то можно задать свойство кнопки после выполнения обновления , например невидимая. Пусть становится видимой только после какого-либо действия на форме
Да даже если так. Процессом можно управлять только пока программа работает. А если пользователь обновил данные и закрыл программу? В следующий раз он открыл ее, снова нажал записать и при выставленной галке у него снова записалось число "2". И так каждый раз. Нужно же чтобы к введенному пользователем числу либо прибавлялось 2, если галка стоит, либо прибавлялся 0, если галка не стоит.
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
28.11.2011, 10:55
Ну тогда разве что добавить поле в котором хранить статус записи. Отработана/не отработана.
Если необходимые действия с записью выполнены там 1 если нет 0.
И проверку на состояние записи.
1
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
28.11.2011, 10:59  [ТС]
Цитата Сообщение от rdama Посмотреть сообщение
Ну тогда разве что добавить поле в котором хранить статус записи. Отработана/не отработана.
Если необходимые действия с записью выполнены там 1 если нет 0.
И проверку на состояние записи.
Хорошо, рассмотрю такой вариант. Если у кого есть еще идеи, то отписывайтесь.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
28.11.2011, 11:11
Delphi
1
Хорошо, рассмотрю такой вариант.
Не надо рассматривать ибо глупость предлагают.
У Вас очевидно отсутствует нормальная постановка задачи. Например ввести понятие "документа" (или что-там у Вас, куда оператор "вводит"), на основании которого значение UnsdBasicVac модифицируется. Когда документ "отрабатывается" (чтобы не было конфликтов в многопольз.базе читайте про транзакции), то на нем (документе) ставится "галочка" и второй раз уже ничего по этому документу в "базу" добавляться не будет.
Схема типичная, применяемая в серьезных проектах.
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
28.11.2011, 11:24
MsGuns, ну дак говоришь же о статусе документа.
За это в бд отвечает определенное поле. На которое при проектировании возложили функцию слежения так сказать.
Я предложил тоже самое. Ну а так как у человека вопрос оторван от реализуемой системы.
Ясень перец и ответ абстрактен.
А про многопользовательский режим. У человека Access.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
28.11.2011, 11:33
Delphi
1
MsGuns, ну дак говоришь же о статусе документа.
Конечно, о нем родимом.
Пример:
- Есть остаток на счету
- Есть операция (платежка например)
Если система просто при вводе операции изменяет остаток (как у ТС), то каюк такой системе ибо нет НАДЕЖНОЙ защиты от повторения операции или не выполнения ее ни разу (плюшки с флажками "изменен-не изменен" делают смертушку только более мучительной и долгой, но не менее неотвратимой)

А вот если ввести сущность "ОПЕРАЦИЯ" и ей дать свойство - флаг "проведена", то это в корне решает проблему ибо дважды провести одну и ту же операцию не позволит в принципе.

Delphi
1
А про многопользовательский режим. У человека Access.
И что ? Акцес прекрасно позволяет проектировать многопользовательские приложения (по крайней мере 5 человек работают вполне комфортно).
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
28.11.2011, 11:51
Ну для меня как-то Access и многопользовательский режим это слишком гиморно.
А я не люблю мучиться. Можно взять нормальную СУБД и не городить огород.
Я предлагаю подождать полноценного описание от ТС. А не абстрактной задачи.
Чтоб и ответ был более конкретным и более подходящим.
Может задача и проблема в ином. Нежели мы думаем.
0
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
28.11.2011, 14:48  [ТС]
Программа по подсчету дней неиспользованного отпуска.
Пользователь вводит данные в поле "Количество неиспользованных дней", затем ставит галку(или не ставит, в зависимости, нужно ли начислить 2 дня в этом месяце), затем нажимает записать и если галка стоит, то к введенным пользователем дням прибавляются эти 2 дня, если галка не ставится, то введенные пользователем данные записываются в поле "Количество неиспользованных дней на конец месяца".
В базе данных несколько таблиц, я опишу те, которые необходимы для решения этой задачи:

Таблица "Таблица" содержит поля:
TNumb - Табельный Номер(числовой),
UnsdBasicVac - Неиспользованные дни основного отпуска на начало месяца(числовой),
UnsdAdditVac - Неиспользованные дни дополнительного отпуска на начало месяца(числовой),
ChrgdBasicVac - Начисленные дни основного отпуска(логическое)
ChrgdAdditVac - Начисленные дни дополнительного отпуска(логическое),
ResidueUnsd - Итого(числовой).

Формула для подсчета:
UnsdBasicVac = UnsdBasicVac + ChrgdBasicVac(тут либо 0, либо 2, в зависимости от галки)
UnsdAdditVac = UnsdAdditVac + ChrgdAdditVac(тут либо 0, либо 0.5, в зависимости от галки)
ResidueUnsd = UnsdBasicVac + UnsdAdditVac

Таблица "ФИО" содержит поля:
TNumb(числовой) - связь с "Таблица" по полю Таб номер.
Fio(строка)

Например:
TNumb = 1
UnsdBasicVac = 16
UnsdAdditVac = 3.5
ChrgdBasicVac = True
ChrgdAdditVac = True
ResidueUnsd = UnsdBasicVac + UnsdAdditVac = 19.5

Или:
TNumb = 3
UnsdBasicVac = 28
UnsdAdditVac = 0
ChrgdBasicVac = True
ChrgdAdditVac = False
ResidueUnsd = UnsdBasicVac + UnsdAdditVac = 28

У меня проблема состоит в том, что при каждом нажатии если стоит галка, он плюсует те же 2 дня к введенным основным дням.
То есть:
1 нажатие - UnsdBasicVac = 16 + 2 = 18
2 нажатие - UnsdBasicVac = 18 + 2 = 20
3 нажатие - UnsdBasicVac = 20 + 2 = 22
...
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
28.11.2011, 14:57
Посмотрите как все сделано в 1С
А то, что написали... выбросите

Просто дружеский совет
0
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
28.11.2011, 15:01  [ТС]
Да раньше нормально все работало, пока не потребовалось разграничить основные и дополнительные дни отпуска. Я через неделю уезжаю на сессию до НГ. Вообще хотел переписать программу на C#, но руки никак не доходят.
С 1С пока не сталкивался, а на него надо просто кучу свободного времени, которое у меня возможно появится только после сессии
Спасибо за советы, ушел дальше думать.
0
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
29.11.2011, 08:05  [ТС]
Во вложении накидал конкретно эту задачу.
Вложения
Тип файла: zip 111.zip (680.7 Кб, 18 просмотров)
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
29.11.2011, 11:46
Хорошо накидали.
А теперь выкиньте !
И посмотрите 1С хотя бы
0
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
29.11.2011, 15:25  [ТС]
Решил задачу. А на 1С надо время, ибо этот конструктор наверное сами разработчики еще не до конца изучили.
Спасибо за советы, 1С займусь в новогодние праздники.
0
 Аватар для Gulik
6 / 6 / 0
Регистрация: 06.11.2011
Сообщений: 36
30.11.2011, 10:57
Цитата Сообщение от BigOblom Посмотреть сообщение
Теперь про порядок работы:
Пользователь вводит определенные данные в поле UnsdBasicVac и нажимает "Записать"
Если в ChrgdBasicVac галка стоит, тогда к введенному пользователем числу прибавляется 2, иначе 0.
Проблема в том, что если пользователь нажмет кнопку более 1 раза, запрос запишет значение ChrgdBasicVac столько раз, сколько будет нажата кнопка.
Как избежать такой ситуации?
Создай вычисляемое поля и делай в нем расчет относительно этой галочки.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
30.11.2011, 11:33
Delphi
1
А на 1С надо время, ибо этот конструктор
Нет, не надо конструктор. Посмотрите на интерфейс 1С, ее функционал, объекты и действия, которыми программа "оперирует", побеседуйте с бухгалтерами, с нею работающими - много времени это у Вас никак не займет
0
 Аватар для BigOblom
124 / 124 / 17
Регистрация: 30.06.2010
Сообщений: 478
30.11.2011, 16:33  [ТС]
Да программа то не для бухгалтеров, а для отдела кадров И 1С у нас еще не внедрено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2011, 16:33
Помогаю со студенческими работами здесь

Обновление Данных в Access из Combobox
Доброго времени суток. Столкнулся со следующей проблемой. На форме есть несколько текстбоксов и несколько комбобоксов. Когда добавляю все...

Обновление данных по запросу Access
Есть Access'овская база данных, в ней одна таблица и один запрос на выборку. Запрос выводит все данные таблицы и + считает два поля на...

автоматическое обновление данных Access
.У меня есть запрос "на следующ дату", он увеличивает введеную дату на 6 месяцев.Нужно чтоб тоже самое происходило в таблице ТО..допустим я...

Нелогичное обновление данных в MS Access
Приветствую. Есть файл card.mdb, нужно работать с таблицей NumberDisk. Подключаюсь: Dim Con As New...

Обновление (замещение) данных в БД Access...
Ребятки помогите. Есть запись в БД состоящая из 5 столбов, как организовать запрос, чтоб изменить данные в 4 (к примеру) столбце. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru