Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
У меня есть достаточно простой запрос к базе Access который вызывается из приложения написанного на C++ Builder.

Select
sum(M_oper.cena1) as Many,
Tov_Name
From
M_Oper,
Tovar
Where
M_Oper.Nomtov=Tovar.K_Tov and
(Artikul LIKE 1 & "*")

Так что удивительно, если запустить этот запрос непосредственно из Access - все работает на ура и выдается огромный список данных, если же этот запрос вызвать из приложения C++ Builder то в результате выборки я получаю пустой список. Если же убрать конструкцию (Artikul LIKE 1 & "*") то выдается полноценный, длинный список данных.
21 июн 04, 21:01    [755665]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
LIKE 1 & "*"
- это некорректно. Эта конструкция заставляет Аксесс преобразовывать чиловое значение 1 в строковое по неуказанному формату. Он может сделать это разными способами:
"1"
" 1"
"1.0"
"1,0"
и т.д. Поэтому лучше выбрать из этих вариантов тот, который на самом деле нужен, и написать его явным образом.

Кроме того, можно попробовать вместо * написать %.
21 июн 04, 21:05    [755669]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
P.S. И тогда не нужен &, а просто можно написать
LIKE "1*"
LIKE "1.0*"
и т.д.
21 июн 04, 21:07    [755671]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
В данном случае "1" является именно символом, а не числом, тип поля сивольный.
На сколько я понимаю, оператор Like работает именно с текстом.
Попробовал взять 1 в кавычки - не помогло. Так же попробовал вместо цифры использовать букву - картина все та же.
21 июн 04, 21:23    [755683]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
А с символом % картина еще хуже, с ним и в Ассess запрос выдает пустой набор данных.
21 июн 04, 21:24    [755685]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Bezum
В данном случае "1" является именно символом, а не числом, тип поля сивольный.

Почему же тогда в приведенной команде употреблено число 1, а не строка?
21 июн 04, 21:33    [755688]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Я и строку пробовал - результат тот же...
21 июн 04, 21:39    [755698]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Хочу увидеть окончательный вариант селекта и пример данных, которые он должен вернуть.
21 июн 04, 21:54    [755713]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Запрос как есть:
Select
sum(M_oper.cena1) as Many,
Tov_Name
From
M_Oper,
Tovar
Where
M_oper.V_Dock=6 and
M_Oper.Nomtov=Tovar.K_Tov and
(Artikul LIKE "Б" & "*")
Group by
Tov_Name

Builder возвращает пустой набор. Тот же запрос в Access возвращает:

Many Tov_Name
25 662,47р. Браслет (585)
1 399,15р. Заготовки браслетов д/часов (585)
1 600,65р. Каталог
1 587,74р. Кольцо (585)
38 125,77р. Крест (585)
61 197,91р. Крест (925)
3 574,82р. Проволка (585)
2 554,92р. Серьги (585)
1 870,67р. Сусальное золото
2 472,37р. Сусальное золото (585)
2 611,82р. Фут. для браслетов
1 140,00р. Фут. для колец
1 837,92р. Фут. для серег
11 594,16р. Цепь (585)
1 760,26р. Цепь (925)
21 июн 04, 22:08    [755726]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
А поле Artikul?.. Впрочем, и так догадываюсь.

А без like оно хоть как-то работает?
21 июн 04, 22:15    [755728]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Без Like работает - пашет только в путь
21 июн 04, 22:27    [755734]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Тогда могу только предложить заменить * на %. То, что из Аксесса оно не работает, не имеет значения.
21 июн 04, 22:31    [755736]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
Согласен с Владимир Санычем по поводу %, а кроме того как-то смущает конструкция: Artikul LIKE "Б" & "*", зачем нужен амперсанд?
21 июн 04, 22:39    [755741]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Serge Gavrilov
зачем нужен амперсанд?

А я уже предлагал автору убрать его, см. 21:07. :^)
21 июн 04, 22:40    [755743]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
автор
А я уже предлагал автору убрать его, см. 21:07. :^)

Я видел, но Bezum снова его использует.
21 июн 04, 22:44    [755745]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Боюсь, что проблема не в этом. А что еще может быть, кроме %? Я надеюсь, что автор проверял % не только из Аксесса...
21 июн 04, 22:49    [755749]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Какого ляпа там стоит & уж не знаю, так посоветовали https://www.sql.ru/forum/actualthread.aspx?bid=4&tid=101498
А насчет %, разумеется проверял и с него начинал. Но похоже что Access знать не знает такого оператора в этой конструкции.
21 июн 04, 23:17    [755758]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Bezum
Какого ляпа там стоит & уж не знаю, так посоветовали https://www.sql.ru/forum/actualthread.aspx?bid=4&tid=101498

Так советовал я, потому что в вопросе речь шла о соединении переменной (параметра) и строковой константы (звездочки). А сейчас речь о двух константах, и я же говорю, что тогда & не нужен. Не думаю, что мне там можно верить больше, чем мне здесь.
21 июн 04, 23:20    [755760]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Bezum
А насчет %, разумеется проверял и с него начинал.

Только в Аксессе (21:24) или через C++ Builder тоже?
21 июн 04, 23:22    [755762]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Через C++Builder тоже. Базу подключал через компаненты ADO. Исходя из этого весь SQL коректен если написан по правилам Access. И что с этим делать мало понятно. Ибо SQL сам по себе коректен, а работать как надо через Builder отказывается. Странно это все, мистика прям какая-то...
21 июн 04, 23:28    [755766]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Предлагаю еще один вариант селекта.

Select sum(M_oper.cena1) as Many, Tov_Name
From M_Oper inner join Tovar on M_Oper.Nomtov=Tovar.K_Tov
Where M_oper.V_Dock=6 and Artikul LIKE "Б%"
Group by Tov_Name

Если не пойдет, то дальше можно пробовать:

1. Вернуть * (в этом же селекте).
2. Не Б, а цифру (может, проблема с русскими буквами).
3. У названия Artikul дорисовать имя таблицы.
4. Подключиться не через ADO, а через DAO (не знаю, можно ли; если да, то со *, а не %).
5. Упростить селект до крайности, оставив только одну таблицу, одно условие и без группировки.
21 июн 04, 23:34    [755774]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
6. Вместо двойных кавычек поставить одиночные (апострофы).
21 июн 04, 23:39    [755777]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Менять конструкцию запроса особо не получится, ибо данный текст SQL запроса формируется в зависимости от комбинации условий, которые задаются на форме пользователем. Причем условий там достаточно много и в худшем случае запрос без переноса строк выглядит угрожающе и бывает на пол страницы. С DAO я не работал и переделать на раз два все приложение не получится, при условии что положительный эфект сомнителен.
Хотя приписывать к полю имя таблицычерез точку мне не сложно. Но эфекта это никакого не дало, чего и следовало ожидать т.к. наименования полей в этих таблицах не совпадают. Вобщем хрень какая-то. Хоть садись вешайся и пиши свою пользовательскую функцию.
21 июн 04, 23:50    [755788]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Bezum
Менять конструкцию запроса особо не получится, ибо данный текст SQL запроса формируется в зависимости от комбинации условий, которые задаются на форме пользователем.

Я предлагаю это проделать только для проверки, только чтобы понять, в чем дело. После этого можно будет вернуться к самой программе.

Bezum
Вобщем хрень какая-то. Хоть садись вешайся и пиши свою пользовательскую функцию.

Предлагаю все-таки проверить ВСЕ мои пункты, причем в разных сочетаниях друг с другом. Особенно 5 и 6.

Опыт говорит, что если делать хотя бы что-нибудь, то решение обычно находится. Соответственно, если нет, то нет. Впрочем, этот форум не для того, чтобы погонять, а для того, чтобы давать советы. Если следовать им не хочется, то так тому и быть. Просто мне не хочется, чтобы на моей совести было самоубийство.
21 июн 04, 23:57    [755795]     Ответить | Цитировать Сообщить модератору
 Re: C++ Builder, Access и Проблема с SQL  [new]
Bezum
Member

Откуда:
Сообщений: 85
Проверяю я все. Кстати говоря LIKE "Б%" ищет ни что иное как поле со значением Б%.
Вот до пункта 6 добрался.
22 июн 04, 00:04    [755800]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить