powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / преобразование типов
25 сообщений из 25, страница 1 из 1
преобразование типов
    #40102086
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть запрос
Код: sql
1.
2.
3.
4.
5.
SELECT MAIN1_1.codever, MAIN1_1.prod, MAIN1_1.code, 1 AS Выражение1, MAIN1_1.pth, Replace([main1_1].[pth],'-',',') AS qw
FROM MAIN INNER JOIN (main1 INNER JOIN MAIN1 AS MAIN1_1 ON main1.code = MAIN1_1.OWN) ON MAIN.CODE = MAIN1_1.coded
WHERE (((MAIN1_1.prod)=True) AND ((MAIN1_1.pth) Like '*327044-326764-326258-1') AND ((MAIN.MARKA) Not Like '*erp*') 
AND ((Exists (SELECT MAIN1.code FROM MAIN1 where main1.own=main1_1.code;))=True))
ORDER BY MAIN.MARKA;



Код: sql
1.
Replace([main1_1].[pth],'-',',') AS qw

выдает естественно стринг - числа через запятую. , например "337638,327087,327047,327044,326764,326258,1"
Мне надо изменить запрос, чтобы работало условие MAIN1.code in (полученные выше числа).
если пишу напрямую
Код: sql
1.
 MAIN1.code in (Replace([main1_1].[pth],'-',','))

- естественно получаю ошибку несовпадения типов в условии отбора.
можно ли как-нибудь функциями SQL, те в запросе,без vba выполнить преобразование типа, что бы это условие работало?
...
Рейтинг: 0 / 0
преобразование типов
    #40102156
Eugene-LS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311
без vba выполнить преобразование типа, что бы это условие работало?

А у вас , случаем, поле MAIN1.code не текстовое?
Похоже на то ...
Если да, то в оператор IN() следует передавать не числа, а строки, т.е. те же числа, только каждое в кавычках (как текстовое значение)
...
Рейтинг: 0 / 0
преобразование типов
    #40102198
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы гляньте это (может чё сгодится):
...
Рейтинг: 0 / 0
преобразование типов
    #40102207
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Function my(ctl)
Dim ar, i, str
ar = Split(ctl, "-")
For i = 0 To UBound(ar)
str = str & "','" & ar(i)
Next
my = Mid(str, 3) & "'"
End Function

Код: vbnet
1.
2.
?my("327044-326764-326258-1")
'327044','326764','326258','1'
...
Рейтинг: 0 / 0
преобразование типов
    #40102221
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sdku, спасибо.... Но я специально подчеркнул - без vba, приведение типа необходимо выполнить в запросе методами sql...
как через vba я конечно знаю, сейчас так и работает....
...
Рейтинг: 0 / 0
преобразование типов
    #40102262
Eugene-LS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311
Но я специально подчеркнул - без vba

Хм ...
А как насчёт вашего же:
Код: sql
1.
MAIN1.code in (Replace([main1_1].[pth],'-',','))


... противоречите самому себе, Replace() одна из встроенных функций VBA однако.
...
Рейтинг: 0 / 0
преобразование типов
    #40102270
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene-LS

... противоречите самому себе, Replace() одна из встроенных функций VBA однако.

А можно поерничать?
Ладно,не буду. Работает она и в Jet sql, можете проверить
...
Рейтинг: 0 / 0
преобразование типов
    #40102275
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene-LS
Serg197311
без vba выполнить преобразование типа, что бы это условие работало?

А у вас , случаем, поле MAIN1.code не текстовое?
Похоже на то ...

Счетчик, ключевое поле

Eugene-LS
Если да, то в оператор IN() следует передавать не числа, а строки, т.е. те же числа, только каждое в кавычках (как текстовое значение)

это было бы проще.....через тот же replace - без проблем.....sdku вон уже написал как...
...
Рейтинг: 0 / 0
преобразование типов
    #40102278
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
WHERE INSTR(',' & Replace([main1_1].[pth],'-',',') & ',', ',' & MAIN1.code & ',') > 0
...
Рейтинг: 0 / 0
преобразование типов
    #40102285
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311, как размышления. Источник подчинённого запроса.
...
Рейтинг: 0 / 0
преобразование типов
    #40102293
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Код: sql
1.
WHERE INSTR(',' & Replace([main1_1].[pth],'-',',') & ',', ',' & MAIN1.code & ',') > 0


АААААААА!!!! вот что значит опыт!!! я не смог додуматься! Спасибо, еще не успел попробовать но уверен заработатет!!!
...
Рейтинг: 0 / 0
преобразование типов
    #40102300
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene-LS
следует передавать не числа, а строки, т.е. те же числа, только каждое в кавычках (как текстовое значение)


а что мешает в реплейсе менять [-] не на [,] а на [','] и потом добавить ['] спереди и сзади ?
тогда и IN... подойдет
...
Рейтинг: 0 / 0
преобразование типов
    #40102317
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stu314
а что мешает в реплейсе менять [-] не на [,] а на [','] и потом добавить ['] спереди и сзади ?
тогда и IN... подойдет

Добавить ничего не мешает. А вот IN всё равно не будет работать. Ибо получится не
Код: sql
1.
WHERE '123' IN ('123','456')

, а
Код: sql
1.
WHERE '123' IN ('\'123\',\'456\'')
...
Рейтинг: 0 / 0
преобразование типов
    #40102325
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
stu314
а что мешает в реплейсе менять [-] не на [,] а на [','] и потом добавить ['] спереди и сзади ?
тогда и IN... подойдет

Добавить ничего не мешает. А вот IN всё равно не будет работать. Ибо получится не
Код: sql
1.
WHERE '123' IN ('123','456')

, а
Код: sql
1.
WHERE '123' IN ('\'123\',\'456\'')



у меня по другому получается :)

?"'" & replace("327044-326764-326258-1","-","','") & "'"

'327044','326764','326258','1'

кавычки на апострофы и наоборот при необходимости можно и через Chr 34 и 39 сделать
...
Рейтинг: 0 / 0
преобразование типов
    #40102352
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stu314


кавычки на апострофы и наоборот при необходимости можно и через Chr 34 и 39 сделать


Чего там в replace не вытворяй - все равно в итоге будет string
а в
Код: sql
1.
WHERE MAIN1.CODE IN()

нужны числа
...
Рейтинг: 0 / 0
преобразование типов
    #40102354
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для полного понимания.... я пытаюсь ускорить выполнение запроса

Вот с применением Дао(не в смысле - DAO, а в смысле тайного знания:)) Акины
Код: sql
1.
2.
3.
4.
5.
6.
'CurrentDb.Execute "INSERT INTO tempvygr ( codever, prod, code, tp, pth, qt ) " _
'                & " SELECT MAIN1_1.codever, MAIN1_1.prod, MAIN1_1.code, 1 AS Âûðàæåíèå1, MAIN1_1.pth, (SELECT exp(Sum(log( [MAIN1]![qt] ))) FROM main1 " _
'                & " WHERE INSTR(',' & Replace([main1_1].[pth],'-',',') & ',', ',' & MAIN1.code & ',') > 0) AS qz " _
'                & " FROM MAIN INNER JOIN (main1 INNER JOIN MAIN1 AS MAIN1_1 ON main1.code = MAIN1_1.OWN) ON MAIN.CODE = MAIN1_1.coded " _
'                & " WHERE (((MAIN1_1.prod)=True) AND ((MAIN1_1.pth) Like '*" & ptcodm1 & "') AND ((MAIN.MARKA) Not Like '*erp*') AND " _
'                & "((Exists (SELECT MAIN1.code FROM MAIN1 where main1.own=main1_1.code;))=True)) ORDER BY MAIN.MARKA;"



он работает.... но проигрывает в скорости тому что было раньше...

Код: sql
1.
2.
3.
4.
5.
"INSERT INTO tempvygr ( codever, prod, qt, codm1, tp, pth )" _
                & " SELECT MAIN1_1.codever, MAIN1_1.prod, getqbp(MAIN1_1.pth), MAIN1_1.code, 1 AS Âûðàæåíèå1, MAIN1_1.pth " _
                & " FROM MAIN INNER JOIN (main1 INNER JOIN MAIN1 AS MAIN1_1 ON main1.code = MAIN1_1.OWN) ON MAIN.CODE = MAIN1_1.coded " _
                & " WHERE (((MAIN1_1.prod)=True) AND ((MAIN.MARKA) Not Like '*erp*') AND ((Exists (SELECT MAIN1.code FROM MAIN1 where main1.own=main1_1.code;))=True) AND ((MAIN1_1.pth) Like '*" & ptcodm1 & "')) " _
                & " ORDER BY MAIN.MARKA; "



+
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Function Getqbp(pth As String) As Long

Dim rst As DAO.Recordset
Dim qq As Long
qq = 1
20 Set rst = CurrentDb.OpenRecordset("SELECT main1.qt  from MAIN1 where MAIn1!code in (" & Replace(pth, "-", ",") & ");", dbOpenForwardOnly) ', dbOpenForwardOnly
   If rst.EOF = False Then
      Do Until rst.EOF
               qq = qq * rst.Collect("qt")
               rst.MoveNext
      Loop
   End If
   Getqbp = qq
End Function



Дао Панурга пока ниасилел.... получаю несовпадение типов....
...
Рейтинг: 0 / 0
преобразование типов
    #40102371
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311

Чего там в replace не вытворяй - все равно в итоге будет string
а в
Код: sql
1.
WHERE MAIN1.CODE IN()

нужны числа




можно и строки - добавить CStr, только строка должна уже быть готова для IN - в самом запросе преобразование не срабатывает т.е.
'327044','326764','326258','1'

пардон, до сих пор не умею картинки правильно вставлять...
...
Рейтинг: 0 / 0
преобразование типов
    #40102393
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stu314
кавычки на апострофы и наоборот при необходимости можно и через Chr 34 и 39 сделать
А ты проделай это не в Immediate (VBA), а в SQL-окне конструктора запросов. Тогда поймёшь.
...
Рейтинг: 0 / 0
преобразование типов
    #40102402
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stu314

....
?"'" & replace("327044-326764-326258-1","-","','") & "'"
'327044','326764','326258','1'
...
в редакторе это так, а вот в конструкторе запросов,в строке условий работать не будет
...
Рейтинг: 0 / 0
преобразование типов
    #40102406
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу пардон.
Апаздал-ходил покурить а потом, не глядя в топик, отправил
так что без VBA....
...
Рейтинг: 0 / 0
преобразование типов
    #40102407
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
А ты проделай это не в Immediate (VBA), а в SQL-окне конструктора запросов. Тогда поймёшь.


попробовал, не понял :(

такая картинка пойдет или я что то не там сделал ?
...
Рейтинг: 0 / 0
преобразование типов
    #40102420
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311

можно ли как-нибудь функциями SQL, те в запросе,без vba выполнить преобразование типа, что бы это условие работало?
А в Вашем запросе строка отображается иначе, оставаясь строкой,которая не прокатит в качестве условия отбора по числовому полю
тип поля и отображение его содержимого таки разные весчи
Строку типа STR вида 327044-326764-326258-1 можно отобразить '327044','326764','326258','1' но это будет та же строка
Стесняюсь спросить-а откуда берется такая строка и разве хранить в БД данные в таком виде не есть грубейшее нарушение правил "нормальных форм"
Без VBA здесь не обойтись. Я так думаю!(Мимино)
...
Рейтинг: 0 / 0
преобразование типов
    #40102429
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
оставаясь строкой,которая не прокатит в качестве условия отбора по числовому полю
тип поля и отображение его содержимого таки разные весчи

можно не строку к числу приводить, а число к строке :)
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1339220&msg=22380105

я не утверждаю что так правильно делать, чисто теоретические изыскания...
...
Рейтинг: 0 / 0
преобразование типов
    #40102447
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stu314
такая картинка пойдет или я что то не там сделал ?
Не-е-е... ты этот плод своего творчества во WHERE попробуй запихать...
...
Рейтинг: 0 / 0
преобразование типов
    #40102457
stu314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Не-е-е... ты этот плод своего творчества во WHERE попробуй запихать...

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


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