Как создать запрос на обновление с Open Office Base?

Я хочу создать в основном запрос на обновление в Open Office Base (так же, как и с Ms ACCESS).

1 ответ

База обычно не использует запросы на обновление (но см. Ниже). Вместо этого самый простой способ выполнить команду обновления - перейти в Сервис -> SQL. Введите что-то похожее на следующее, затем нажмите Execute:

UPDATE "Table1" SET "Value" = 'BBB' WHERE ID = 0

Другой способ - запустить команду с помощью макроса. Вот пример использования Basic:

Sub UpdateSQL
    REM Run an SQL command on a table in LibreOffice Base
    Context = CreateUnoService("com.sun.star.sdb.DatabaseContext")
    databaseURLOrRegisteredName = "file:///C:/Users/JimStandard/Desktop/New Database.odb"
    Db = Context.getByName(databaseURLOrRegisteredName )
    Conn = Db.getConnection("","") 'username & password pair - HSQL default blank

    Stmt = Conn.createStatement()
    'strSQL = "INSERT INTO ""Table1"" (ID,""Value"") VALUES (3,'DDD')"
    strSQL = "UPDATE ""Table1"" SET ""Value"" = 'CCC' WHERE ID = 0"
    Stmt.executeUpdate(strSQL)

    Conn.close()
End Sub

Обратите внимание, что данные также могут быть изменены с помощью формы или путем непосредственного редактирования таблицы.

При некоторых обстоятельствах возможно создать запрос на обновление. Я не мог заставить его работать со встроенным движком HSQLDB 1.8 по умолчанию, но он работал с MYSQL.

  1. В разделе "Запросы" Create Query in SQL View
  2. Нажмите кнопку на панели инструментов, чтобы Run SQL Command directly,
  3. Введите команду, подобную следующей:
    update mytable set mycolumn = 'This is some text.' where ID = 59;
  1. Нажмите F5, чтобы выполнить запрос.

Выдает ошибку The data content could not be loaded, но он все еще выполняет обновление и изменяет данные. Чтобы избавиться от ошибки, команда должна вернуть значение. Например, я создал эту хранимую процедуру в MYSQL:

DELIMITER $$
CREATE PROCEDURE update_val
(
   IN id_in INT,
   IN newval_in VARCHAR(100)
)
BEGIN
    UPDATE test_table SET value = newval_in WHERE id = id_in;
    SELECT id, value FROM test_table WHERE id = id_in;
END
$$
DELIMITER ;

Затем этот запрос в LibreOffice Base изменяет данные без каких-либо ошибок:

CALL update_val(2,'HHH')

Смотрите также:

Другие вопросы по тегам