Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > Количество параметров в запросе в Access-e


Автор: tuzikrvn 28.10.03, 09:52
Очередная небольшая проблемка..  ;)

Есть База на Access-e. Мне нужно выгрести из неё информацию по трём критериям. Что то вроде
SELECT * FROM INF_TABLE WHERE PARAM1='par1' AND PARAM2='par2' AND PARAM3='par3'

Всё вроде намана, запускаю даный запрос из проги, и в ответ оно мне:
"Too few parameters. Expected 2."

Т.е. как я понял ему не понравилось то, что я ему три параметра через AND передал. Может есть какие то варианты как иначе запрос переписать? А то я не особо силён в SQL-е  ::)

Автор: old_lamer 28.10.03, 10:36
Вроде должно работать...

А как таблица и поля назвывались? И типы полей какие?

Автор: tuzikrvn 28.10.03, 10:53
Таблица KEYS:
....
DATA_CREATE - data/time
DATA_EXP - data/time
FIID - text
KEY_TYPE - text
INDEX - number
....

Запрос:

SELECT DATA_CREATE, DATA_EXP FROM KEYS WHERE FIID='xxxx' AND KEY_TYPE='zzz' AND INDEX='3'

матюкается..  ::)

Автор: old_lamer 28.10.03, 11:11
....AND INDEX=3
Кавычки нафиг похерь ;D

Автор: tuzikrvn 28.10.03, 11:30
Я и так и так пробовал.. с кавычками - это просто последний вариант..  ;)
Всё равно не работает..

Автор: old_lamer 28.10.03, 12:12
У меня работало

Автор: tuzikrvn 28.10.03, 14:29
Я тут вроде разобрался где именно проблема, но задачу ещё не решил..
Для наглядности код:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    CString m_sql = "SELECT DATA_CREATE, DATA_EXP FROM KEYS WHERE FIID='xxxx' AND KEY_TYPE='xxx' AND INDEX=3";<br><br>CODBCRecordset m_rs( &m_db );<br>m_rs.Open(m_sql);<br>

Код нормальный, рабочий.
В таком виде при выполнении m_rs.Open(m_sql) выскакивает ошибка "Too few parameters. Expected 2."
Если выгребать из таблицы любые данные кроме даты, типа SELECT FIID, KEY_TYPE.. и.д., то запрос работает нормально.. однако мне всё же нужна дата.
Если же попытаться выгрести всё запросом типа SELECT * FROM KEYS.. то при вызове  m_rs.Open(m_sql) выскакивает критическая ошибка.
Вывод: судя по всему тут нужно или дату выгребать как то по-особенному, типа TO_CHAR(DATA_CREATE) или ещё как то.. как именно не знаю.. ::)
Кто подскажет?  

Автор: old_lamer 28.10.03, 14:43
CODBCRecordset - это тобой порождённый класс от CRecordset??
Посмотри на сколько правильно описан класс.

В смысле есть ли в нём поля
Цитата
типа SELECT FIID, KEY_TYPE.. и.д.,

Автор: tuzikrvn 29.10.03, 06:50
Нормальный рабочий класс. Я его с CodeGuru взял. Вполне рабочий. глюков ещё пока не замечал. У меня есть две базы, одна удалённая Oracle-вская, вторая локальная Access-евская. И в той и в другой идёт работа в том числе и с DateTime полями. С Oracle проблем никаких нет, всё нормально. А вот с Access-ом такой вот глюк. У меня из-за него работа стопорится.  :-/

Автор: tuzikrvn 29.10.03, 07:38
Следующее наблюдение:
при запросе "SELECT DATA_CREATE FROM KEYS" выдаёт "Too few parameters. Expected 1."
т.е. ему даже в простом запросе по выборке даных типа date/time не хватает параметров.
ИМХО он форматирование вывода требудет. Но вот как?  ::)
Народ.. не дайте погибнуть..  ;)

Автор: tuzikrvn 29.10.03, 09:38
Всё.. погиб..
Переписал Аксесовскую базу на .dbf и пошла работа дальше..

Автор: old_lamer 29.10.03, 10:55
Короче...
Напиши так
CString m_sql = "SELECT DATA_CREATE, DATA_EXP FROM KEYS WHERE FIID='xxxx' AND KEY_TYPE='xxx' AND INDEX=3";

CRecordset m_rs( &m_db );
m_rs.Open(m_sql);

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)