Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
10 / 10 / 0
Регистрация: 17.12.2012
Сообщений: 123

Вычисляемые поля

03.04.2016, 09:18. Показов 683. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
у меня имеется в Postgresql таблица следующей структуры
IDNAMEKOLVOFK
1Sergey45
2Andrey55
3Sergey65
4Alexandr45
5Oleg64

Далее я вывожу данную таблицу в Stringgrid при помощи след кода:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var 
count:integer;
begin
  SQLQuerry1.Close;
  SQLQuerry1.SQL.Clear;
  SQLQuerry1.SQL.Add('Select Count(Name) from MyTable where "FK"=5');
  SQLQuerry1.open;
  SQLQuerry1.open;
  count := SQLQuerry1.FieldByName('Count').asinteger;
 
 
if count > 0 then
  begin
    SQLQuerry1.Close;
    SQLQuerry1.SQL.Clear;
    SQLQuerry1.SQL.Add('Select name,kolvo from MyTable where "FK"=5');
    SQLQuerry1.open;
  end;
 
   stringgrid1.Visible:=True;
   stringgrid1.Width:=0;
 
SQLQuerry1.First; 
for i:=1 to count do //или  (SQLQuerry1. while not eof do)
  begin
     Stringgrid1.ColCount:=Stringgrid1.ColCount+1;
     stringgrid1.Cells[Stringgrid1.ColCount-1,0]:=SQLQuerry1.FieldByName('name');
     stringgrid1.Cells[Stringgrid1.ColCount-1,1]:=SQLQuerry1.FieldByName('kolvo');
     stringgrid1.Width:=stringgrid1.Width+64
     SQLQuerry1.Next;
  end;
end;
Писал не имея доступа к IDE, но в теории я хочу получить следующий результат в Stringgrid
SergeyAndreySergeyAlexandr
4564

Теперь самое интересное:
имея следующий интерфейс, где combobox заполняется полем "name" из предыдущего запроса, в Edit я ввожу число
и нажимаю кнопку выполнить.

В результате я хочу получить следующее:
1. Выбираю я имя Alexandr
2. Ввожу в Edit.Text 2
3. Нажимаю выполнить и в поле "KOlVO" значение для Alexandr в БД увеличивается на 2
4. Значение поля "KOlVO" для Sergey (предыдущая запись) уменьшается на эти же 2
Т.е Если у текущей записи прибавилось кол-во на n, то у предыдущей записи оно должно уменьшится на n. Условие справедливо для всех записей, кроме 1, в 1 должно просто увеличиваться кол-во.
Подскажите, пожалуйста, как это реализовать, у меня пока даже мыслей нет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2016, 09:18
Ответы с готовыми решениями:

Вычисляемые поля
Необходимо в таблице "Отделы" создать поле "Балансовая стоимость" где будет подсчитываться суммарная стоимость всех продуктов по каждому...

Вычисляемые поля
Доброе время суток) У меня есть форма "Сотрудник", на которой находится DataSource1 и Table1. Так как в таблице много данных, решила...

Вычисляемые поля
В БД использую вычисляемое поле. Есть дата поступления, срок службы и дата списания (вычисляемое поле). Подскажите, каким типом в таблице...

8
10 / 10 / 0
Регистрация: 17.12.2012
Сообщений: 123
03.04.2016, 10:22  [ТС]
если встречается две записи с одинаковым "name" и одинаковым FK, то они различаются при помощи еще одного поля, которое я не стал включать, дабы не усложнять суть.
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
03.04.2016, 10:26
Реализация с помощью update запроса.
0
10 / 10 / 0
Регистрация: 17.12.2012
Сообщений: 123
03.04.2016, 10:45  [ТС]
Алекcей, Это я понимаю, но как в запросе указать, чтобы поле "KOLVO" увеличилось на значение в Edit и как мне получить доступ к предыущей записи, ведь выбирая значение в combobox я получаю ("name") только текущей записи?
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
03.04.2016, 10:57
в запросе:
SQL
1
UPDATE имя таблицы SET kolvo=kolvo-2 WHERE условие
для того, чтобы знать какие записи обновлять запихните в combobox, например, ID записи (additem).
1
10 / 10 / 0
Регистрация: 17.12.2012
Сообщений: 123
03.04.2016, 11:26  [ТС]
Алекcей Так я это представляю, если бы в combobox было только одно значение.
Delphi
1
2
3
SQLQuerry1.SQL.Add('UPDATE имя таблицы SET kolvo=:kolvo-2 WHERE "name"=:name, "FK"=FK); //FK это глобальная переменная
SQLQUEry1.ParamByName('kolvo').Value:=IntToStr(Edit1.Text);
SQLQUEry1.ParamByName('name').Value:=Combobox1.Text;
А как тогда в combobox вставить два поля и потом из них достать два значения?
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
03.04.2016, 11:38
Мне кажется что при проектировании структуры базы данных допущена ошибка. Как Вы определите с каким Сергеем из combobox работать? В combobox'е один Сергей, а в бд 2.
ID записи можно занести в combobox так:
Delphi
1
combobox1.additem (строка, tobject (значение ID записи));
0
10 / 10 / 0
Регистрация: 17.12.2012
Сообщений: 123
03.04.2016, 12:11  [ТС]
Алекcей, Уникальность записи обеспечивают два поля name и step
IDNAMEKOL-VOFKSTEP
1Alexandr451
2Sergey552
3Andrey653
4Sergey454
5Oleg645
Я придумал небольшую хитрость, так как в поле step записи идут по порядку от 1 до n, то их значения можно доставать из combobox таким образом
Delphi
1
2
step:=Combobox.ItemIndex;
name:=Combobox.Text
И все таки, как занести в Combobox значения двух полей?
можно ли вот таким образом?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
with SqlQuerry do
  begin
     Close
     SQL.Add('Select name,step,kol-vo from MyTable Where "FK"=:FK')
     open
     DisableControls;
     Combobox1.Clear;   
     while not Eof do
        begin
            Combobox1.Items.AddObject(FieldByName('name').AssString, tobject FieldByName('step').AssString)
            next;
        end;
     EnabledControls;   
  end;
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
03.04.2016, 12:16
У Вас каша в голове, почитайте книжечку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2016, 12:16
Помогаю со студенческими работами здесь

Вычисляемые поля
Добрый день! Подскажите как добавить вычисляемое поле в датасет динамически, как статически знаю, и как в такое поле вывести данные...

Вычисляемые поля
Здравствуйте. Помогите необходимо в DBGridе значения вычисляемых полей двух и более записей вносить в одну строку. Условием является...

Вычисляемые поля
Здравствуйте, не получается подсчитать кол-во спортсменов по каждому виду спорта в определённом поле.. Смысл задания таков: создать...

Вычисляемые поля
Мне необходимо осуществить подсчет баллов студента,смотря на процент его успеваемости,посещаемости и тд. Некоторые поля у меня числовые,а...

Вычисляемые поля в Table
Добрый день. У меня вопрос. Как сделать вычисляемое поле через компонент Table1. В первом столбце числовые данные, надо их перемножить...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru