Vb6 вычисляет обновление

#sql #vb6

#sql #vb6

Вопрос:

Как мне вычислить и обновить refundamt?

У меня изначально есть эти три строки в базе данных:

 NO  |  TRANAMT  |  REFUNDAMT
1   |  100      |  0 
2   |  200      |  0
3   |  300      |  0
  

Если возврат равен 350, refundamt будет обновлен следующим образом, refundamt не может быть больше, чем tranamt:

 NO  |  TRANAMT  |  REFUNDAMT
1   |  100      |  100 
2   |  200      |  200
3   |  300      |  50
  

При повторном возврате с 50 будет обновлена только последняя запись, refundamt будет обновлен следующим образом:

 NO  |  TRANAMT  |  REFUNDAMT
1   |  100      |  100 
2   |  200      |  200
3   |  300      |  100
  

Комментарии:

1. Я думаю, вам нужно предоставить нам больше информации. Какой код у вас уже есть?

2. Что у меня есть, так это выбрать три строки.

3. Соглашение о переполнении стека заключается в редактировании вопроса, чтобы сделать его лучше в ответ на запрос дополнительной информации. Кроме того, если вы вставите имеющийся у вас код (в идеале только соответствующий контекст), тогда люди смогут дать более конкретный совет.

Ответ №1:

Вот простой алгоритм (без учета многопоточности и блокировок):

  1. Пусть RF будет общим возвратом
  2. Найдите первую строку, где REFUNDAMT < TRANAMT и назовите ее ROW
  3. Вычислите разницу DIFF для СТРОКИ: DIFF = TRANAMT — REFUNDAMT
    • Если DIFF >= RF, обновите REFUNDAMT в строке на REFUNDAMT RF, и все готово.
    • Если DIFF < RF, обновите REFUNDAMT в строке на TRANAMT, пусть RF = RF-DIFF и перейдите к шагу 2.