Управление БД из формы через элементы управления.

Автор Ириминаге, 22 марта 2022, 13:02

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

Ириминаге

Цитата: mikekaganski от 24 марта 2022, 08:27
Цитата: Ириминаге от 24 марта 2022, 08:21что возвращает нас к вопросу, что это за объектная переменная

Ответ на этот вопрос получается отладкой: установкой точки останова на проблемной строке и инспекцией всех задействованных переменных.
Так там подсвечивает нужную строку. Тут как в одном путешествии Ийона Тихого, когда он добрался до машины, способной ответить на любой ПРАВИЛЬНЫЙ вопрос. А правильный вопрос можно задать, если знаешь большую часть ответа, чем, я похвастать, увы, не могу. Поэтому в перерыве между курением интернета вообще и этого форума, в частности, задаю тут вопросы людям, которым не сложно подсказать.
А в данном конкретном случае, есть какая-то проблема с синтаксисом и до возможности получить хоть какие-то результаты пока не удалось.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

mikekaganski

Цитата: Ириминаге от 24 марта 2022, 08:41Так там подсвечивает нужную строку.

"Подсвечивает нужную строку" - это не то же самое, что "установка точки останова". Ваше подсвечивание происходит после возникновения ошибки, когда ничего уже просмотреть нельзя. А я написал про отладку, когда остановка происходит перед выполнением проблемной строки, и в момент остановки можно всё проинспектировать.
С уважением,
Михаил Каганский

Ириминаге

Цитата: mikekaganski от 24 марта 2022, 08:37
Лучше всего приложите сам файл ODB.

Прилагаю файл
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

economist

См. вложенный пример, в вашем коде куча опечаток.

В движке HSQLDB нужно все кавычить (я с SQLite уже отвык от этой кавыческой дичи). Вообще готовьтесь к тому что HSQL будет вас удивлять на ровном месте ежедневно. Рабочий код макроса такой:

Sub Main
dbContext=CreateUnoService("com.sun.star.sdb.DatabaseContext") '< get  the database context
oDataSource=dbContext.getByName("test") '<- change database name
ConnectToDataBase=oDataSource.getConnection("","") '<- username & password pair - HSQL default blank
Statement = ConnectToDataBase.createStatement()
SQL= "UPDATE ""test1"" SET ""Num2""=5 WHERE ""Num1""=2"
Statement.executeUpdate(SQL)
ConnectToDataBase.close()
ConnectToDataBase.dispose()
End Sub
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

Цитата: economist от 24 марта 2022, 08:45В движке HSQLDB нужно все кавычить
Как я понимаю, до самого запроса дело не доходит.
С уважением,
Михаил Каганский

mikekaganski

#20
Цитата: Ириминаге от 24 марта 2022, 08:45Прилагаю файл

Хм, конкретно вот это у меня на Вашем файле прекрасно отрабатывает.

sub testDB
 DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
 DataSource = DatabaseContext.getByName("file:///D:/Downloads/test.odb")
 Connection = DataSource.GetConnection("", "")
 Statement = Connection.createStatement()
 SQL= "SELECT * FROM test1"
 Statement.execute(SQL)
 Connection.close
 Connection.dispose()
end sub


Что-то с инсталляцией? Я проверял на Version: 7.3.2.1 (x64) / LibreOffice Community
Build ID: 0b2e59a88b7e225b655db87910f97dca7aef27aa
CPU threads: 12; OS: Windows 10.0 Build 19044; UI render: default; VCL: win
Locale: en-US (ru_RU); UI: en-US
Calc:
С уважением,
Михаил Каганский

economist

Цитата: mikekaganski от 24 марта 2022, 08:53Как я понимаю, до самого запроса дело не доходит.
В коде ТС #8 из 8-ми строк - 4 содержат опечатки, поэтому я сразу наперед говорю где будет ошибка.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

#22
Цитата: economist от 24 марта 2022, 09:02
В коде ТС #8 из 8-ми строк - 4 содержат опечатки, поэтому я сразу наперед говорю где будет ошибка.

Абсолютно!
Вот это вот:

Цитата: Ириминаге от 23 марта 2022, 16:32
ConnectToDataBase=oDataSource.GetConnection("","")
Statement = Connection.createStatement()


Как можно так скопировать код из ответа #3???

Но если последовать совету об отладке, можно посмотреть, что "Connection" - не то же самое, что "ConnectToDataBase".
С уважением,
Михаил Каганский

rami

Цитата: Ириминаге от 24 марта 2022, 08:45Прилагаю файл
Из самой базы данных можно выполнить:
Sub Main
Dim oSQL, oCon, oStatement

oSQL = "UPDATE ""test1"" SET ""Num2"" = 5 WHERE ""Num1"" = 2"

oCon = ThisComponent.DataSource.getConnection("", "")

oStatement = oCon.createStatement()
oStatement.executeUpdate(oSQL)
oStatement.close()
oStatement.dispose()
End Sub

Ириминаге

Всем огромное спасибо за помощь и участие!!!
Вроде начало что-то вырисовываться и даже получаться. Решил разбить тело программы на процедуры. Возможно, где-то наделал ляпов, но получилось у меня следующее:

REM  *****  BASIC  *****
Const dbName="test"
DIM ConnectToDataBase AS Object, Statement  AS Object

Sub Main
opnBase()
SQL= "UPDATE ""test1"" SET ""Num2""=5 WHERE ""Num1""= 2"
Statement.executeUpdate(SQL)
clsBase()
End Sub

Sub opnBase()
dbContext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName(dbName)
ConnectToDataBase=oDataSource.getConnection("","")
Statement = ConnectToDataBase.createStatement()
End Sub

Sub clsBase()
db=ConnectToDataBase(dbName)
db.close()
db.dispose()
End Sub
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

Ириминаге

Цитата: mikekaganski от 24 марта 2022, 09:11

Абсолютно!
Вот это вот:

Как можно так скопировать код из ответа #3???

Но если последовать совету об отладке, можно посмотреть, что "Connection" - не то же самое, что "ConnectToDataBase".

Согласен, Франкенштейн получился топорно. Но теперь начал кое-что понимать. Не скажу, что настигло озарение, однако, уже не как у Высоцкого: "Наугад, как ночью по тайге..."
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...


Ириминаге

Следующий затык:

Не хочет принимать строку
SQL= "UPDATE ""test1"" SET ""Num2""=5 WHERE ""Num1""= 2"" AND ""N""= 0 "

Пишет:

ЦитироватьОшибка времени выполнения Basic.
Вызвано исключение
Type: com.sun.star.sdbc.SQLException
Message: Unexpected token:  AND  in statement [" AND "].
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

mikekaganski

Цитата: Ириминаге от 24 марта 2022, 14:37
SQL= "UPDATE ""test1"" SET ""Num2""=5 WHERE ""Num1""= 2"" AND ""N""= 0 "

Правильно пишет.

Вы проверьте, что получается, когда строка обрабатывается и двойные кавычки преобразуются в одинарные. Выполните
MsgBox SQL
С уважением,
Михаил Каганский

Ириминаге

Цитата: mikekaganski от 24 марта 2022, 14:49
Правильно пишет.
Вы проверьте, что получается, когда строка обрабатывается и двойные кавычки преобразуются в одинарные. Выполните
MsgBox SQL

Вот именно этой информации мне и не хватало для понимания про использование кавычек.. мерси боку!
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...