Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / строка VBA: не работает запрос на обновление / 25 сообщений из 35, страница 1 из 2
10.07.2021, 12:03
    #40083127
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Здравствуйте.
При попытке вызвать запрос на обновление выдаёт сообщение, что запрос повреждён и ругается на строку кода (см. Снимок1).

Подскажите пожалуйста, где ошибка в коде.
Access 2013
...
Рейтинг: 0 / 0
10.07.2021, 12:07
    #40083130
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri,

ходи сюда - https://www.sql.ru/faq/faq_topic.aspx?fid=157
и крути на эту фразу - А теперь очень полезная рекомендация
...
Рейтинг: 0 / 0
10.07.2021, 12:22
    #40083132
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri
ругается на строку кода

возможно в прицепляемых значениях есть запятая или кавычка
по картинке это не видно
код надо формировать наглядно проверять его через debug.print или on error
Код: vbnet
1.
2.
3.
4.
5.
s1="update soplata"
s1=s1 & " set ....."
....
debug.print s1
bbb.execute s1
...
Рейтинг: 0 / 0
10.07.2021, 16:26
    #40083149
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
если поле klient_id числовое,то зачем ф-ция STR, а если текст-где апострофы, а для date_id,если это дата, ф-ция FORMAT(ну а дальше не видно-какие еще поля,закрывающая скобка)
прочтите
court об этом и толкует
...
Рейтинг: 0 / 0
13.07.2021, 18:53
    #40083635
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Я не понимаю, как это сделать

ПЕНСИОНЕРКА
Tauri
ругается на строку кода

возможно в прицепляемых значениях есть запятая или кавычка
по картинке это не видно
код надо формировать наглядно проверять его через debug.print или on error
Код: vbnet
1.
2.
3.
4.
5.
s1="update soplata"
s1=s1 & " set ....."
....
debug.print s1
bbb.execute s1

...
Рейтинг: 0 / 0
13.07.2021, 18:56
    #40083638
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
ПЕНСИОНЕРКА
по картинке это не видно

по крайней мере выложите запрос текстом , а не картинкой
...
Рейтинг: 0 / 0
14.07.2021, 01:13
    #40083687
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
ПЕНСИОНЕРКА
ПЕНСИОНЕРКА
по картинке это не видно

по крайней мере выложите запрос текстом , а не картинкой


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Private Sub Кнопка25_Click()
Dim bbb As Database
If IsNull(Me![ПолеСоСписком15]) = True Then
MsgBox "Укажите дату", vbCritical, "Отсутствует значение!"
DoCmd.GoToControl "ПолеСоСписком15"
ElseIf IsNull(Me![ПолеСоСписком17]) = True Then
MsgBox "Укажите клиента", vbCritical, "Отсутствует значение!"
DoCmd.GoToControl "ПолеСоСписком17"
ElseIf IsNull(Me![Поле19]) = True Then
MsgBox "Введите сумму оплаты", vbCritical, "Отсутствует значение!"
DoCmd.GoToControl "Поле19"
ElseIf IsNull(Me![ПолеСоСписком21]) = True Then
MsgBox "Укажите форму оплаты", vbCritical, "Отсутствует значение!"
DoCmd.GoToControl "ПолеСоСписком21"
Else
Set bbb = CurrentDb
bbb.Execute "UPDATE soplata SET soplata.data_id = " & Str(Me![ПолеСоСписком15]) & ", soplata.klient_id =" & Str(Me![ПолеСоСписком17]) & ", soplata.summa = " & Str(Me![Поле19]) & ", soplata.fopl_id = " & Str(Me![ПолеСоСписком21]) & ", soplata.prim = '" & Me![Поле23] & "' WHERE (oplata_id)= " & Str(Me![oplata_id]) & ";"
bbb.Close
Forms![fwork].Requery
If DLookup("[dolg]", "zdolg", "[klient_id]=" & Me![ПолеСоСписком17]) > 0 Then
Forms![fwork]![Поле37] = "долг " & DLookup("[dolg]", "zdolg", "[klient_id]=" & Me![ПолеСоСписком17]) & " руб."
ElseIf DLookup("[dolg]", "zdolg", "[klient_id]=" & Me![ПолеСоСписком17]) < 0 Then
Forms![fwork]![Поле37] = "переплата " & -(DLookup("[dolg]", "zdolg", "[klient_id]=" & Me![ПолеСоСписком17])) & " руб."
ElseIf DLookup("[dolg]", "zdolg", "[klient_id]=" & Me![ПолеСоСписком17]) = 0 Then
Forms![fwork]![Поле37] = Null
End If
DoCmd.Close
End If
End Sub




Почему-то на моём компе дома (Access 2016) этот код работает, а в офисе (Access 2013) - нет.
...
Рейтинг: 0 / 0
14.07.2021, 01:58
    #40083688
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri

Код: vbnet
1.
2.
3.
bbb.Execute "UPDATE soplata SET soplata.data_id = " & Str(Me![ПолеСоСписком15]) & ", soplata.klient_id =" & 
Str(Me![ПолеСоСписком17]) & ", soplata.summa = " & Str(Me![Поле19]) & ", soplata.fopl_id = " & 
Str(Me![ПолеСоСписком21]) & ", soplata.prim = '" & Me![Поле23] & "' WHERE (oplata_id)= " & Str(Me![oplata_id]) & ";"


Вопрос:какой тип у выделенных цветом полей (что они все текстовые)?
Верно ли это: 5 литров = 5 километров
...
Рейтинг: 0 / 0
14.07.2021, 06:26
    #40083695
Geizer1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri

Почему-то на моём компе дома (Access 2016) этот код работает, а в офисе (Access 2013) - нет.


Если вы создали или сохранили файл в 2016 офисе, а потом открываете его в 2013, то проблемы обязательно появятся.
Надо пользоваться одной версией (одного года).
Но если создали в 2013, а потом только проверяли в 2016, то без комментариев.
...
Рейтинг: 0 / 0
14.07.2021, 06:34
    #40083699
Geizer1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Geizer1,
По пробуйте перекомпилировать в 2013 офисе.
...
Рейтинг: 0 / 0
14.07.2021, 08:31
    #40083704
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri,

самая проблемная строка soplata.summa = " & Str(Me![Поле19])
Str(Me![Поле19]) может вернуть как 12,5 так и 12.5 в зависимости от настроек системы
вариант 12,5 дает ошибку выполнения запроса

вторая проблема - строка Dim bbb As Database
надо явно указать библиотеку, т.к. со ссылкой на dao есть неопределенность
Код: vbnet
1.
Dim bbb As dao.Database
...
Рейтинг: 0 / 0
14.07.2021, 09:59
    #40083717
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
хотя поле суммы обычно числовое - зачем вообще нужно STR
...
Рейтинг: 0 / 0
14.07.2021, 11:49
    #40083731
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
ПЕНСИОНЕРКА
хотя поле суммы обычно числовое - зачем вообще нужно STR

STR всегда преобразует число (строку которая "выглядит" "как число") в строку с десятичным разделителем "точка"
Вне зависимости от локализации
Код: vbnet
1.
2.
?Str("5,9")
 5.9
...
Рейтинг: 0 / 0
14.07.2021, 11:59
    #40083736
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
1)рекомендую Вам оформлять код SQL запрос в VBA вот так
2) str - VBA сам сделает это из любово другого типа данных, но если будет NULL или Empty будет ошибка

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
 
    sql = ""
    sql = sql & Chr(10) & "UPDATE soplata"
    sql = sql & Chr(10) & "Set soplata.data_id      = " & IIf(IsNull(Me![ПолеСоСписком15]), "null", Me![ПолеСоСписком15])
    sql = sql & Chr(10) & "   ,soplata.klient_id    = " & IIf(IsNull(Me![ПолеСоСписком17]), "null", Me![ПолеСоСписком17])
    sql = sql & Chr(10) & "   ,soplata.summa        = " & IIf(IsNull(Me![Поле19]), "null", Me![Поле19])
    sql = sql & Chr(10) & "   ,soplata.fopl_id      = " & IIf(IsNull(Me![ПолеСоСписком21]), "null", Me![ПолеСоСписком21])
    sql = sql & Chr(10) & "   ,soplata.prim         = '" & Me![Поле23] & "'"
    sql = sql & Chr(10) & "WHERE (oplata_id)        = " & Me![oplata_id]
...
Рейтинг: 0 / 0
14.07.2021, 14:31
    #40083786
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
sdku
Tauri

Код: vbnet
1.
2.
3.
bbb.Execute "UPDATE soplata SET soplata.data_id = " & Str(Me![ПолеСоСписком15]) & ", soplata.klient_id =" & 
Str(Me![ПолеСоСписком17]) & ", soplata.summa = " & Str(Me![Поле19]) & ", soplata.fopl_id = " & 
Str(Me![ПолеСоСписком21]) & ", soplata.prim = '" & Me![Поле23] & "' WHERE (oplata_id)= " & Str(Me![oplata_id]) & ";"


Вопрос:какой тип у выделенных цветом полей (что они все текстовые)?
Верно ли это: 5 литров = 5 километров


числовые: soplata.data_id, soplata.klient_id, soplata.summa, soplata.fopl_id
текст: soplata.prim
...
Рейтинг: 0 / 0
14.07.2021, 14:43
    #40083791
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri,
ну и занахрена в числовое поле пытаться записать текст(функция STR)-здесь всегда возникнет ошибка
Об этом и говорит ПЕНСИОНЕРКА
soplata.data_id-если это дата,то и делайте его дата/время
и не храните в таблицах вычисляемые поля-если поле summa таковым является
...
Рейтинг: 0 / 0
14.07.2021, 15:50
    #40083808
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
sdku
Tauri,
ну и занахрена в числовое поле пытаться записать текст(функция STR)-здесь всегда возникнет ошибка
Об этом и говорит ПЕНСИОНЕРКА
soplata.data_id-если это дата,то и делайте его дата/время
и не храните в таблицах вычисляемые поля-если поле summa таковым является


Тут (и в форме и в таблице) все поля либо числовые либо текст.
Вычисляемых полей нет.
Т.е. в запросе в числовых полях убрать функцию Str ?
А почему тогда на моём компе дома работает?
...
Рейтинг: 0 / 0
14.07.2021, 16:01
    #40083813
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
ПЕНСИОНЕРКА
Код: vbnet
1.
Dim bbb As dao.Database


на некоторых версиях аксесс это идет по умолчанию, пройдут обе версии
Dim bbb As dao.Database
Dim bbb As Database

но в некоторых версиях это не проходит, надо строго Dim bbb As dao.Database и установить явно ссылку в REFERENCES на MICROSOFT DAO object library ( dao360.DLL )
...
Рейтинг: 0 / 0
14.07.2021, 16:54
    #40083833
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
ПЕНСИОНЕРКА
ПЕНСИОНЕРКА
Код: vbnet
1.
Dim bbb As dao.Database


на некоторых версиях аксесс это идет по умолчанию, пройдут обе версии
Dim bbb As dao.Database
Dim bbb As Database

но в некоторых версиях это не проходит, надо строго Dim bbb As dao.Database и установить явно ссылку в REFERENCES на MICROSOFT DAO object library ( dao360.DLL )



Спасибо.
А функцию Str(числовое_поле) убирать из запроса?
...
Рейтинг: 0 / 0
14.07.2021, 16:59
    #40083837
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Focha
1)рекомендую Вам оформлять код SQL запрос в VBA вот так
2) str - VBA сам сделает это из любово другого типа данных, но если будет NULL или Empty будет ошибка

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
 
    sql = ""
    sql = sql & Chr(10) & "UPDATE soplata"
    sql = sql & Chr(10) & "Set soplata.data_id      = " & IIf(IsNull(Me![ПолеСоСписком15]), "null", Me![ПолеСоСписком15])
    sql = sql & Chr(10) & "   ,soplata.klient_id    = " & IIf(IsNull(Me![ПолеСоСписком17]), "null", Me![ПолеСоСписком17])
    sql = sql & Chr(10) & "   ,soplata.summa        = " & IIf(IsNull(Me![Поле19]), "null", Me![Поле19])
    sql = sql & Chr(10) & "   ,soplata.fopl_id      = " & IIf(IsNull(Me![ПолеСоСписком21]), "null", Me![ПолеСоСписком21])
    sql = sql & Chr(10) & "   ,soplata.prim         = '" & Me![Поле23] & "'"
    sql = sql & Chr(10) & "WHERE (oplata_id)        = " & Me![oplata_id]



К сожалению, я не понимаю, как разместить этот код в тексте VBA. В какое место VBA его вставлять - можете написать?

Я знаю только конструкцию типа:
bbb.Execute "UPDATE...
bbb.Close
...
Рейтинг: 0 / 0
14.07.2021, 17:31
    #40083854
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri,
эта конструкция ничем не отличается от вашей - только разбита по подстрокам для наглядности
Код: vbnet
1.
2.
3.
4.
5.
s1="update soplata"
s1=s1 & " set ....."
....
debug.print s1
bbb.execute s1



для более конкретного ответа надо смотреть вашу базу, структуру таблиц, форму ввода
непонятно зачем нужна update или у вас форма на свободных полях основана
...
Рейтинг: 0 / 0
14.07.2021, 18:01
    #40083861
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri,
STR() убирать,однозначно(интонация Жириновского)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
'поле rs(2) числовое\денежное
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("цены")
rs.AddNew
'rs(2) = Str(1.5) 'А-2010-ошибка
'не утверждаю-предполагаю что в А-2016 если текст число, возможно, автоматическое преобразование
rs(2) = 1.5     'А-2010 нет ошибки
rs.Update

Добавить записи можно и рекордсетом
...
Рейтинг: 0 / 0
14.07.2021, 18:30
    #40083866
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
sdku
Tauri,
STR() убирать,однозначно(интонация Жириновского)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
'поле rs(2) числовое\денежное
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("цены")
rs.AddNew
'rs(2) = Str(1.5) 'А-2010-ошибка
'не утверждаю-предполагаю что в А-2016 если текст число, возможно, автоматическое преобразование
rs(2) = 1.5     'А-2010 нет ошибки
rs.Update

Добавить записи можно и рекордсетом


Тогда надо писать так?:
bbb.Execute "UPDATE soplata SET soplata.data_id = " & Me![ПолеСоСписком15] & ", soplata.klient_id =" & Me![ПолеСоСписком17] & ",...

где Me![ПолеСоСписком15] и Me![ПолеСоСписком17] и... - числовые
...
Рейтинг: 0 / 0
14.07.2021, 20:06
    #40083891
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
Tauri
Тогда надо писать так?:

Вам же практически написали готовый пример
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 sql = ""
    sql = sql & Chr(10) & "UPDATE soplata"
    sql = sql & Chr(10) & "Set soplata.data_id      = " & IIf(IsNull(Me![ПолеСоСписком15]), "null", Me![ПолеСоСписком15])
    sql = sql & Chr(10) & "   ,soplata.klient_id    = " & IIf(IsNull(Me![ПолеСоСписком17]), "null", Me![ПолеСоСписком17])
    sql = sql & Chr(10) & "   ,soplata.summa        = " & IIf(IsNull(Me![Поле19]), "null", Me![Поле19])
    sql = sql & Chr(10) & "   ,soplata.fopl_id      = " & IIf(IsNull(Me![ПолеСоСписком21]), "null", Me![ПолеСоСписком21])
    sql = sql & Chr(10) & "   ,soplata.prim         = '" & Me![Поле23] & "'"
    sql = sql & Chr(10) & "WHERE (oplata_id)        = " & Me![oplata_id]

bbb.Execute sql


Преимущество в том , что при пошаговой отладке , Вы можете видеть истинное значение пеменной sql , и легче найти ошибку в каком месте спотыкается .
...
Рейтинг: 0 / 0
14.07.2021, 20:51
    #40083903
Tauri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка VBA: не работает запрос на обновление
DarkMan
Tauri
Тогда надо писать так?:

Вам же практически написали готовый пример
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 sql = ""
    sql = sql & Chr(10) & "UPDATE soplata"
    sql = sql & Chr(10) & "Set soplata.data_id      = " & IIf(IsNull(Me![ПолеСоСписком15]), "null", Me![ПолеСоСписком15])
    sql = sql & Chr(10) & "   ,soplata.klient_id    = " & IIf(IsNull(Me![ПолеСоСписком17]), "null", Me![ПолеСоСписком17])
    sql = sql & Chr(10) & "   ,soplata.summa        = " & IIf(IsNull(Me![Поле19]), "null", Me![Поле19])
    sql = sql & Chr(10) & "   ,soplata.fopl_id      = " & IIf(IsNull(Me![ПолеСоСписком21]), "null", Me![ПолеСоСписком21])
    sql = sql & Chr(10) & "   ,soplata.prim         = '" & Me![Поле23] & "'"
    sql = sql & Chr(10) & "WHERE (oplata_id)        = " & Me![oplata_id]

bbb.Execute sql


Преимущество в том , что при пошаговой отладке , Вы можете видеть истинное значение пеменной sql , и легче найти ошибку в каком месте спотыкается .


Спасибо. Но я его не понимаю. Я не программист. Мне нужен (иногда) готовый код, который я копирую и вставляю.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / строка VBA: не работает запрос на обновление / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]