2017-01-28 11 views
1

У меня есть форма в Libreoffice Base, которая связана с таблицей «Песни» (базовая база музыки), и каждый раз, когда я проверяю/снимаю флажок CheckBox на этом form Я хочу, чтобы поле «Играло» в каждой записи с тем же именем и автором, как и у меня в настоящее время на форме, которую нужно проверить и снять. Я читал, что единственный способ сделать это - с макросами (поскольку я не хочу использовать отношения, потому что у меня есть много записей на данный момент). Я написал такой макрос:Обновление таблицы базы данных с помощью макроса с использованием данных из формы

Sub UpdatePlayed() 
     Context = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
     databaseURLOrRegisteredName = "file:///C:/Users/grzes/Desktop/Muzyka.odb" 
     Db = Context.getByName(databaseURLOrRegisteredName) 
     Conn = Db.getConnection("","") 'username & password pair - HSQL default blank 

     dCheckBox = Forms("Formularz").Controls("CheckBox").Value 
     dAuthorBox = Forms("Formularz").Controls("AuthorBox").Value 
     dTitleBox = Forms("Formularz").Controls("TitleBox").Value 

     Stmt = Conn.createStatement()  
     strSQL = "UPDATE ""Songs"" SET ""Played"" = " + dCheckBox + " WHERE ""Title"" = '" + dTitle + "' AND ""Author"" = '" + dAuthor + "'" 

     Stmt.executeUpdate(strSQL) 

     Conn.close() 

    End Sub 

(AuthorBox и TitleBox являются текстовыми полями и CheckBox является CheckBox с установленным флажком устанавливается в 1 и бесконтрольно до 0), но ничего не происходит, когда макрос выполняется (связанно в нажатии кнопки мыши событие к флажку)
Я уверен, что способ выполнения SQL-запроса прав, как и в другом макросе, я также использую его без каких-либо проблем, поэтому проблема должна быть либо с установкой переменных dcheckbox, dauthorbox и dtitlebox, либо с помощью strSQL. (Сам макрос работает, как при изменении имени элемента управления, я получаю сообщение об ошибке). поэтому вопрос: что в этом плохого? ..

Заранее за вашу помощь.

+0

Что такое механизм базы данных - встроенный HSQL 1.8? –

+0

Я не уверен, что такое версия, но точно HSQL. Версия для офиса Libre - 5.2.2 –

+0

Хорошо, еще один вопрос: что такое полевой тип 'Played' в таблице? –

ответ

0

Причина, по которой ничего не происходит, состоит в том, что переменные и dAuthor пустые. Обратите внимание, что имена переменных не совпадают. Так что обновление, где заголовок и автор пустые, влияет на 0 строк.

Вот рабочий код:

Sub UpdatePlayed(oEvent As Object) 
    Context = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
    databaseURLOrRegisteredName = "file:///C:/Users/grzes/Desktop/Muzyka.odb" 
    Db = Context.getByName(databaseURLOrRegisteredName) 
    Conn = Db.getConnection("","") 'username & password pair - HSQL default blank 

    oForm = oEvent.Source.Model.Parent 
    dCheckBox = oForm.getByName("CheckBox").getCurrentValue() 
    sAuthor = oForm.getByName("AuthorBox").getCurrentValue() 
    sTitle = oForm.getByName("TitleBox").getCurrentValue() 

    Stmt = Conn.createStatement()  
    strSQL = "UPDATE ""Songs"" SET ""Played"" = " + dCheckBox + " WHERE ""Title"" = '" _ 
     + sTitle + "' AND ""Author"" = '" + sAuthor + "'" 
    Stmt.executeUpdate(strSQL) 
    Conn.close() 
End Sub 

Одно больше предложений: Хотя это работает, чтобы читать из элементов управления, предпочтительный способом является прямым доступом формы Базовой row set вместо этого. Например:

lAuthorCol = oForm.findColumn('Author') 
sAuthor = oForm.getString(lAuthorCol) 
+0

Хорошо, теперь это работает, спасибо большое. –

 Смежные вопросы

  • Нет связанных вопросов^_^