powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / OpenRecordset и дробные числа
38 сообщений из 38, показаны все 2 страниц
OpenRecordset и дробные числа
    #39435475
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Я в процедуре VBA использую простую конструкцию:

Dim qqq As Database
Dim www As Recordset
Dim slch As Variant

Set qqq = CurrentDb
Set www = qqq.OpenRecordset("SELECT*FROM Таблица1 WHERE [Таблица1]![prob]= " & slch & "")

Переменная slch - всегда число. Если slch - целое число, то всё работает идеально, но если slch - дробное число, то возникает сообщение об ошибке.

Что делать?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435480
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tauri, замени запятую на точку
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435481
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\,
я пробовал. не помогает.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435485
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tauri\\\\,
я пробовал. не помогает.У всех помогает, а у тебя нет. Странно.
И что же пишет когда поменяешь?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435486
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tauri, так?
Код: vbnet
1.
"SELECT * FROM Таблица1 WHERE [prob]= " & Replace(Cstr(Nz(slch,0)), ",",".") 
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435488
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\,

Нет. Так не пробовал. Сейчас проверю.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435491
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\,

Да, этот синтаксис помог. Спасибо большое.

А почему тогда даже при принудительном присваивании

slch = 0.301948

Set qqq = CurrentDb
Set www = qqq.OpenRecordset("SELECT*FROM Таблица1 WHERE [Таблица1]![prob]= " & slch & "")

не работало?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435510
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tauri, так там запятая все равно.

А вот если бы было так, то сработало бы slch = "0.301948"
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435513
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tauri, кстати, не плохо бы в тексте запроса ставить пробелы
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435763
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\,

Да, slch ="0.301948" сработало. Спасибо. Впредь буду знать.

А какой тип данных можно присваивать переменной, если она всегда дробное число от 0 до 1 ? Long можно?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435764
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\,

Пробелы в тексте запроса необходимы для удобства или для корректного выполнения запроса?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435776
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauri\\\\,

Пробелы в тексте запроса необходимы для удобства или для корректного выполнения запроса?Для красоты, поговаривают :)
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435871
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauri\\\\,
...А какой тип данных можно присваивать переменной, если она всегда дробное число от 0 до 1 ? Long можно?
LONG это длинное целое-ответьте себе можно ли его присваивать дробной переменной. (когда уже народ будет читать HELP...)
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39435893
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TauriА какой тип данных можно присваивать переменной, если она всегда дробное число от 0 до 1 ? Long можно?Double
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436243
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauri\\\\,
А почему тогда даже при принудительном присваивании

slch = 0.301948

Set qqq = CurrentDb
Set www = qqq.OpenRecordset("SELECT*FROM Таблица1 WHERE [Таблица1]![prob]= " & slch & "")

не работало?

Потому что нужно писать str(slch). Что происходит: ваше число из-за операции & со строкой превращается в строку, причем используется системный разделитель, т.е. запятая в вашем случае, то же происходит, если использовать CStr. Если использовать str(), то будет использоваться точка, которая и требуется в SQL
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436254
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin Если использовать str(), то будет использоваться точка, которая и требуется в SQL
Код: vbnet
1.
2.
?str(0.33)
 .33
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436282
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\
Код: vbnet
1.
2.
?str(0.33)
 .33


Для компилятора запросов вполне съедобная форма. Он правильно воспримет выражение
Код: sql
1.
where fld=.33
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436300
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_world, ну может и так. Стараюсь не приравнивать к Double, весьма неоднозначные результаты можно получить.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436660
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\,

Снова здравствуйте.
Теперь новая напасть: при выполнении

Set www = qqq.OpenRecordset("SELECT*FROM szayavka WHERE [szayavka]![szayavka_id]= " & Replace(CStr(Nz(slch, 0)), ",", ".") & "")

выскакивает сообщение об ошибке, хотя записи в таблице есть. Что делать?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436669
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
szayavka_id это что?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436855
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha,

это поле в таблице. числовое. не счётчик.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436909
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauri,
Код: vbnet
1.
2.
SELECT*FROM
SELECT * FROM

почувствуйте разницу
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436914
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuпочувствуйте разницу
Это нормально. Звездочка такой же разделитель как и пробел
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436927
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Set www = qqq.OpenRecordset("SELECT*FROM szayavka WHERE [szayavka]![szayavka_id]= " & Replace(CStr(Nz(slch, 0)), ",", ".") & "")

Выделенное-это что?
так все работает
Код: vbnet
1.
Set rs = CurrentDb.OpenRecordset("select * from таблица1 where ctl=" & Replace(slch, ",", "."))

(наличие пробелов возле звездочки не обязательно-привычка,не знаю хорошая или плохая)
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436947
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauriвыскакивает сообщение об ошибке, хотя записи в таблице есть. Что делать?
Нажимаем Debug, копируем все, что внутри скобок OpenRecordset, Открываем окно Immediate, там после знака вороса вставляем скопированное и после нажатия Enter вы увидите то SQL выражение, которое пытается выполнить акцесс. Копируем его и вставляем в конструктор запросов, который точно скажет, что в нем неправильно. Практически уверен, что ошиблись в написании szayavka_id. Ну в качестве совета: сначала сконструируйте нужный рабочий запрос в конструкторе, а потом копируйте его в код, заменяя константы переменными.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39436996
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Всё равно не работает. Опять выскакивает ошибка, что мало параметров и требуется1.
А задача-то простая:генерируем случайное число и проверяем есть оно в таблице или нет. Вот процедура:

Dim qqq As Database
Dim www As Recordset
Dim slch As Double

slch = Rnd(1)
Set qqq = CurrentDb
Set www = qqq.OpenRecordset("SELECT*FROM szayavka WHERE [szayavka]![szayavka_id]= " & Replace(CStr(Nz(slch, 0)), ",", "."))
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437037
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TauriВсё равно не работает. Опять выскакивает ошибка, что мало параметров и требуется1.
Эта ошибка означает, что названия колонок или таблиц в запросе неверные. Постройте выражение в конструкторе и не мучайтесь.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437045
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauri,
а так:
Код: vbnet
1.
2.
3.
4.
Dim rs As Recordset, slch
slch = Replace(Rnd(1), ",", ".")
Set rs = CurrentDb.OpenRecordset("select * from таблица1 where ctl=" & slch)
.......
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437066
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогонку:
и не будет работать пока slch as Double (string или integer или ничего не пишите)
(присваивать значение отдельной строчкой не обязательно)
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437076
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще: почитайте про Randomize
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437130
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура! Заработало!

Надо было заменить WHERE [szayavka]![zayavka_id] на WHERE (szayavka.zayavka_id)


sdku, MrShin ОГРОМНОЕ СПАСИБО.
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437210
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tauri,
не в этом причина (так тоже будет работать),а в типе данных (переменной slch вообще нет ):
Код: vbnet
1.
Set rs = CurrentDb.OpenRecordset("select*from таблица1 where [таблица1]![ctl]=" & Replace(Rnd(1), ",", "."))
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437247
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuTauri,
не в этом причина (так тоже будет работать),а в типе данных (переменной slch вообще нет ):
Код: vbnet
1.
Set rs = CurrentDb.OpenRecordset("select*from таблица1 where [таблица1]![ctl]=" & Replace(Rnd(1), ",", "."))



Есть: Dim slch As Double
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437256
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuTauri,
не в этом причина (так тоже будет работать),а в типе данных (переменной slch вообще нет ):
Код: vbnet
1.
Set rs = CurrentDb.OpenRecordset("select*from таблица1 where [таблица1]![ctl]=" & Replace(Rnd(1), ",", "."))



Что такое ctl ? Это поле в таблица1 ?
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437290
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И никто не сказал про параметры...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim db As DAO.Database, r As DAO.Recordset
Dim q As DAO.QueryDef, p As DAO.Parameter

Private Sub Form_Load()
    Set db = CurrentDb
    Set q = db.QueryDefs("Запрос1")
    Set p = q.Parameters!p
End Sub

Private Sub tx_AfterUpdate()
    p.Value = tx
    Set r = q.OpenRecordset
    MsgBox IIf(r.EOF, "Нет записи", "Есть запись"), vbInformation
End Sub



Базка с примером приложена
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437337
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TauriЕсть: Dim slch As Doubleа должно быть 20392720
ctl-поле таблицы
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437364
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

а мне ранее сказали что можно 20385334
...
Рейтинг: 0 / 0
OpenRecordset и дробные числа
    #39437374
Tauri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Но, во всяком случае синтаксис

Dim qqq As Database
Dim www As Recordset
Dim slch As Double

If DCount("*", "szayavka") = 0 Then
slch = Rnd(1)
Else
Do
slch = Rnd(1)
Set www = qqq.OpenRecordset("SELECT*FROM szayavka WHERE (szayavka.zayavka_id)= " & Replace(CStr(Nz(slch, 0)), ",", "."))
Loop Until www.RecordCount = 0
End If

наконец-то работает.

Так, что ещё раз спасибо всем, кто мне помог разобраться.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / OpenRecordset и дробные числа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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