|
|
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
У меня есть достаточно простой запрос к базе 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.06.2004, 21:01:38 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
LIKE 1 & "*" - это некорректно. Эта конструкция заставляет Аксесс преобразовывать чиловое значение 1 в строковое по неуказанному формату. Он может сделать это разными способами: "1" " 1" "1.0" "1,0" и т.д. Поэтому лучше выбрать из этих вариантов тот, который на самом деле нужен, и написать его явным образом. Кроме того, можно попробовать вместо * написать %. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:05:25 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
P.S. И тогда не нужен &, а просто можно написать LIKE "1*" LIKE "1.0*" и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:07:07 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
В данном случае "1" является именно символом, а не числом, тип поля сивольный. На сколько я понимаю, оператор Like работает именно с текстом. Попробовал взять 1 в кавычки - не помогло. Так же попробовал вместо цифры использовать букву - картина все та же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:23:09 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
А с символом % картина еще хуже, с ним и в Ассess запрос выдает пустой набор данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:24:30 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
BezumВ данном случае "1" является именно символом, а не числом, тип поля сивольный. Почему же тогда в приведенной команде употреблено число 1, а не строка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:33:25 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Я и строку пробовал - результат тот же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:39:49 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Хочу увидеть окончательный вариант селекта и пример данных, которые он должен вернуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 21:54:12 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Запрос как есть: 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.06.2004, 22:08:52 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
А поле Artikul?.. Впрочем, и так догадываюсь. А без like оно хоть как-то работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:15:00 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Без Like работает - пашет только в путь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:27:26 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Тогда могу только предложить заменить * на %. То, что из Аксесса оно не работает, не имеет значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:31:56 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Согласен с Владимир Санычем по поводу %, а кроме того как-то смущает конструкция: Artikul LIKE "Б" & "*", зачем нужен амперсанд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:39:09 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Serge Gavrilovзачем нужен амперсанд? А я уже предлагал автору убрать его, см. 21:07. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:40:31 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
авторА я уже предлагал автору убрать его, см. 21:07. :^) Я видел, но Bezum снова его использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:44:56 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Боюсь, что проблема не в этом. А что еще может быть, кроме %? Я надеюсь, что автор проверял % не только из Аксесса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 22:49:29 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Какого ляпа там стоит & уж не знаю, так посоветовали /topic/101498 А насчет %, разумеется проверял и с него начинал. Но похоже что Access знать не знает такого оператора в этой конструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:17:25 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
BezumКакого ляпа там стоит & уж не знаю, так посоветовали /topic/101498 Так советовал я, потому что в вопросе речь шла о соединении переменной (параметра) и строковой константы (звездочки). А сейчас речь о двух константах, и я же говорю, что тогда & не нужен. Не думаю, что мне там можно верить больше, чем мне здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:20:55 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
BezumА насчет %, разумеется проверял и с него начинал. Только в Аксессе (21:24) или через C++ Builder тоже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:22:25 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Через C++Builder тоже. Базу подключал через компаненты ADO. Исходя из этого весь SQL коректен если написан по правилам Access. И что с этим делать мало понятно. Ибо SQL сам по себе коректен, а работать как надо через Builder отказывается. Странно это все, мистика прям какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:28:00 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Предлагаю еще один вариант селекта. 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.06.2004, 23:34:30 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
6. Вместо двойных кавычек поставить одиночные (апострофы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:39:32 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
Менять конструкцию запроса особо не получится, ибо данный текст SQL запроса формируется в зависимости от комбинации условий, которые задаются на форме пользователем. Причем условий там достаточно много и в худшем случае запрос без переноса строк выглядит угрожающе и бывает на пол страницы. С DAO я не работал и переделать на раз два все приложение не получится, при условии что положительный эфект сомнителен. Хотя приписывать к полю имя таблицычерез точку мне не сложно. Но эфекта это никакого не дало, чего и следовало ожидать т.к. наименования полей в этих таблицах не совпадают. Вобщем хрень какая-то. Хоть садись вешайся и пиши свою пользовательскую функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:50:06 |
|
||
|
C++ Builder, Access и Проблема с SQL
|
|||
|---|---|---|---|
|
#18+
BezumМенять конструкцию запроса особо не получится, ибо данный текст SQL запроса формируется в зависимости от комбинации условий, которые задаются на форме пользователем. Я предлагаю это проделать только для проверки, только чтобы понять, в чем дело. После этого можно будет вернуться к самой программе. BezumВобщем хрень какая-то. Хоть садись вешайся и пиши свою пользовательскую функцию. Предлагаю все-таки проверить ВСЕ мои пункты, причем в разных сочетаниях друг с другом. Особенно 5 и 6. Опыт говорит, что если делать хотя бы что-нибудь, то решение обычно находится. Соответственно, если нет, то нет. Впрочем, этот форум не для того, чтобы погонять, а для того, чтобы давать советы. Если следовать им не хочется, то так тому и быть. Просто мне не хочется, чтобы на моей совести было самоубийство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 23:57:11 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32570548&tid=1673646]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
180ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 457ms |

| 0 / 0 |
