Добавить данные из запроса в таблицу!

Автор Rodjer, 31 августа 2011, 23:12

0 Пользователи и 1 гость просматривают эту тему.

Rodjer

Доброго времени суток, уже потратил несколько дней пытаясь сделать казалось бы простую вещь, имея в таблице поле Сумма и Аванс заставить ее саму высчитывать Остаток. Понял что в форме этого реализовать нельзя а только в запросах.
Долго читая разные форумы составил  SQL запрос
SELECT "Цена", "Аванс", "Цена" - "Аванс" AS "Остаток" FROM "база данных таблица"
И о чудо, он начал показывать в запросе разницу между полем А и полем Б
А как мне теперь эту разницу заставить появляться в самой таблице.
Пытался командами UPDAte и Insert, но сильно напутал в синтаксе. Пожалуйста помогите разобраться !

RFJ

Вот тут правильно написано, что так делать не следует:
http://forumooo.ru/index.php/topic,1213.msg9440.html#msg9440

хотя вполне возможно, например так:
http://community.i-rs.ru/index.php/topic,19013.msg111222.html#msg111222

Rodjer

Сам начинаю уже подумывать о макросе, но синтекс моя беда...
никак не получается...

RFJ

#3
UPDATE


PS. Поле названо "summa", но вычисляется разность summa=pole1-pole2.
      Лень было менять название.

[вложение удалено Администратором]

Rodjer

да что за напасть ((((

[вложение удалено Администратором]

Rodjer

Вернее все работает пока это только как команда SQL то есть каждый раз надо будет вручную нажимать  SQL...
Надо что-то мне все таки наверное думать с формой и макросом... 

RFJ

UPDATE - это не запрос SQL (т.е. SELECT), а инструкция SQL.
И выполнять ее нужно из меню: Сервис - SQL.

Или, конечно, помещать в макрос и там выполнять RunSQL.

Rodjer

А можно чуть подробнее как сделать что бы это в макросе работало ??

RFJ

Базу 12g.odb нужно зарегистрировать (а то вывалится ошибка) и выполнить макрос:

Sub upd
' Подключаемся к базе данных
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("12g")
' С пустым именем и паролем
Connection = DataSource.GetConnection("", "")
Statement = Connection.createStatement()
' Обновляем с "вычитанием"
Statement.executeUpdate("UPDATE ""Tab12"" SET ""summa"" = ""pole1"" - ""pole2"" ")
End Sub

Rodjer

Спасибо огромное за макрос и за объяснения, все работает...но есть один косяк, макрос выполняет действия для всех полей кроме последнего. А нужно именно для последнего, я его повесил пока на изменения текста в разделе цена, а хорошо бы чтобы он на закрытие формы выполнялся, или куда его понадежнее повесить чтобы точно и последнее поле высчитывало разницу.

RFJ

#10
Цитата: Rodjer от  1 сентября 2011, 11:28есть один косяк, макрос выполняет действия для всех полей кроме последнего
Вы, вероятно, пытаетесь обновить таблицу UPDATE'ом, находясь при этом на вводе данных в последнюю запись таблицы. Эта редактируемая в данный момент запись в таблицу еще не внесена, она запишется только после перехода к следующей записи или после закрытия окна редактирования таблицы.
Тот макрос с UPDATE, который я привел, обновляет сразу все записи, уже записанные (сохраненные) в таблице.

Если же Вам нужно "вычитать" в "режиме реального времени" (при редактировании записи сразу видеть результат вычитания в поле "summa"), то этому посвящен как раз пример mathnew из второй ранее приведенной ссылки http://community.i-rs.ru/index.php/topic,19013.msg111222.html#msg111222.

njuton89

Цитата: RFJ от  1 сентября 2011, 11:13Если же Вам нужно "вычитать" в "режиме реального времени" (при редактировании записи сразу видеть результат вычитания в поле "summa"), то этому посвящен как раз пример mathnew из второй ранее приведенной ссылки http://community.i-rs.ru/index.php/topic,19013.msg111222.html#msg111222.

Помогите пожалуйста, может кто нибуть показать этот пример?
Ссылка не рабочая. А поучиться хотелось бы)

rami

Цитата: njuton89 от  2 февраля 2016, 16:02Помогите пожалуйста, может кто нибуть показать этот пример?
Кто Нибудь всегда всё может.

Вот пример от mathnew:

njuton89

Цитата: rami от  2 февраля 2016, 19:43Кто Нибудь всегда всё может.

Большое спасибо за помощь. Буду разбираться.