stuck on MS Access :(

5 отговора 129 прегледа
#1

stuck on MS Access :(

здрасти,
имам 2 проблема с MS Access, които са ми сериозен "препъни-камък". Ако можете да помогнете със съвет или информация ще е чудесно
Имам една програмка /писана е на C++/, която обработва данни, които от своя страна се съхраняват в MySQL DB. Сега ми се иска да разширя функционалността, като добавя възможност за работа и с Access, но ... егати проблема!!! Пускам едно SQL query, което да изведе от таблица "some_table" всички записи, чиито полета "some_field_1" и "some_field_2" съдържат определен substring (например: "some_value"). Пиша си аз:

"SELECT * FROM some_table WHERE some_field_1 LIKE '*some_value*' OR some_field_2 LIKE '*some_value*' ORDER BY some_other_field ASC"

такааа..... до тук добре. Програмата подава заявката, резултатът се изобразява на екрана, но о ужас!!! В споменатите полета няма и помен от търсената стойност. Как става тоя номер?? Къде бъркам по дяволите?? В интерес на истината, забелязъл съм, че когато в някой от записите съществува търсения стринг, тогава всичко си е ОК и се показват само правилни резултати, но ако не бъде намерен такъм стринг - лошо.

Някакви идеи?

Другия въпрос или по-скоро проблем е свързан с ограниченията на Access. Четох в документацията на програмата, че когато става дума за използване на "WHERE", могат да се навържат до 40 израза. А ако трябва да са повече, групирани с "OR"???
Да речем че:

"SELECT f1, f2, f3 FROM tbl WHERE f1=x OR f2=y ... f67=ff ..."

или пък ...

"SELECT f1, f2, f3 FROM tbl WHERE f1=5 OR f1=17 ... f1=250 ..."

Сега, това е съвсем хипопетичен казус. Възможно е никога да не се наложи да се ползва такова обемисто query, но не ми се иска да рискувам. Възможно ли е това ограничение да се заобиколи по някакъв начин? Със сигурност има алтернативни варианти, но в този момент не се сещам за нито един от тях...

HELP!!!

Отговор
в отговор на Access Denied :) #2

Re: stuck on MS Access :(

ами ако ползваш DAO или ADO има филтър на данните , но това е по-бавно. Но по-добре прочети малко за UNION. Значително по-бързо - повярвай

Отговор
в отговор на Access Denied :) #3

Re: stuck on MS Access :(

SELECT tbl_Efficiency.*
FROM tbl_Efficiency
WHERE (((tbl_Efficiency.Items) Like "*fff*"));

при мен работи чудно.......опитай да смениш * с % ?
и кажи ко става?
апропо, пробвах и с апостров ' на мястото на кавичките, пак работи...

Отговор
в отговор на KKKK #4

Re: stuck on MS Access :(

ами, всъщност си прав - ползвам DAO, а що се отнася до UNION ... не ми беше дошло наум. Мерси за идеята! Мисля, че това ще има приложение и в други части на програмата.

Отговор
в отговор на Topбaлaн #5

Re: stuck on MS Access :(

първоначално го бях направил така (с "%") вместо с "*", но не се получи и затова се порових малко в MSDN-а. Там е записано следното:

You can use the Like operator to find values in a field that match the pattern you specify. For pattern, you can specify the complete value (for example, Like "Smith"), or you can use wildcard characters to find a range of values (for example, Like "Sm*").

In an expression, you can use the Like operator to compare a field value to a string expression. For example, if you enter Like "C*" in an SQL query, the query returns all field values beginning with the letter C. In a parameter query, you can prompt the user for a pattern to search for.


това обаче се отнасяло само да DAO, но така или иначе, аз ползвам именно него. Иначе се ползва "%", каквато беше и моята информация. Както и да е ... Странното тук е, че при заявка, подадена със същия синтаксис, но с критерий написан на латиница, всичко си е наред. Пусна ли заявка с кирилица и нещата се объркват. И още нещо, ако стринга, който се търси е 2-3 знака, проблемите са още по-големи, а при 5-6 знака (на кирилица) вече има относителна точност, въпреки, че и при това положение има 2-3 паразитни записа от общо 50 (примерно), които не съдържат търсения стринг.
Е, това не мога да го разбера и това си е

Въпреки това, благодаря ти за помощта, явно аз съм оплескал на някое друго място във функцията, иначе просто няма логика да не работи... Ей сегичка ще я прегледам още веднъж (ама е доста дълга м.... й)

Отговор
в отговор на Access Denied #6

това по принцип би трябвало да го знам...

пробвах и с киркилица, работи си чудно.....
ако има проблем - не е в аксеса (не че го обичам, ама работи)
огледай декларацията на стринговете, как ги предаваш
разпечатай ги в последния момент....виж да не се наакват,
имам някакви далечни спомени, че някога едни кодови таблици се кодираха правилно до някъде....например до буква Р или С и от там нататък мазано......

Отговор