ODBC && Access
От: MyLifeMyChoice Россия  
Дата: 16.06.04 11:18
Оценка:
Всем привет!

Сразу к делу.
CBlockInfo recBlock(pDB); // CBlockInfo — класс, сгенерированный мастером для доступа к таблице BlockInfo

Открываю Access'ую БД(перекрестный запросик):

SQL =
"SELECT * "
"FROM BlockInfo "
"WHERE BlockID "
"IN (SELECT BlockInfo.BlockID "
"FROM ((KursInfo LEFT JOIN RazdelInfo ON KursInfo.KursID = RazdelInfo.KursID) LEFT JOIN TemaInfo ON RazdelInfo.RazdelID = TemaInfo.RazdelID) LEFT JOIN (BlockInfo LEFT JOIN StepInfo ON BlockInfo.BlockID = StepInfo.BlockID) ON TemaInfo.TemaID = BlockInfo.TemaID )"


recBlock.Open(CRecordset::dynaset,SQL);

Возникает exception "Ошибка при получении записи".

Раньше с такой жутью никогда не сталкивался... Страшно...
Мысли о том, что может быть строчка стринговая с запросом слишком длинная...

А Вы что думаете? Подскажите!

Заранее пасибо!!!
Re: ODBC && Access
От: MyLifeMyChoice Россия  
Дата: 16.06.04 13:24
Оценка:
Здравствуйте, MyLifeMyChoice, Вы писали:


MLM>Всем привет!


MLM>Сразу к делу.

MLM>CBlockInfo recBlock(pDB); // CBlockInfo — класс, сгенерированный мастером для доступа к таблице BlockInfo

MLM>Открываю Access'ую БД(перекрестный запросик):


MLM>SQL =

MLM> "SELECT * "
MLM> "FROM BlockInfo "
MLM> "WHERE BlockID "
MLM> "IN (SELECT BlockInfo.BlockID "
MLM> "FROM ((KursInfo LEFT JOIN RazdelInfo ON KursInfo.KursID = RazdelInfo.KursID) LEFT JOIN TemaInfo ON RazdelInfo.RazdelID = TemaInfo.RazdelID) LEFT JOIN (BlockInfo LEFT JOIN StepInfo ON BlockInfo.BlockID = StepInfo.BlockID) ON TemaInfo.TemaID = BlockInfo.TemaID )"


MLM> recBlock.Open(CRecordset::dynaset,SQL);


MLM>Возникает exception "Ошибка при получении записи".


Мучился, мучился. В итоге получилось:
Вместо
SQL = ".....";
recBlock.Open(CRecordset::dynaset, SQL);

Надо написать в данном случае

recBlock.m_strFilter = "BlockID IN (SELECT BlockInfo.BlockID "
"FROM ((KursInfo LEFT JOIN RazdelInfo ON KursInfo.KursID = RazdelInfo.KursID) LEFT JOIN TemaInfo ON RazdelInfo.RazdelID = TemaInfo.RazdelID) LEFT JOIN (BlockInfo LEFT JOIN StepInfo ON BlockInfo.BlockID = StepInfo.BlockID) ON TemaInfo.TemaID = BlockInfo.TemaID )";

А потом, просто

recBlock.Open();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.