Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Set - запросы


Автор: SSlavon 18.10.2004, 10:41
Не могу понять, как записать запрос по условию Where или Like
Код
m_pSet->Open(CRecordset::dynaset, "SELECT GetFrom  FROM PaymDoc
  WHERE  LIKE 'A%' ");

ИЛИ
Код
m_pSet->Open(CRecordset::dynaset, "SELECT GetFrom  FROM PaymDoc");
m_pSet->m_strFilter = "LIKE 'A%' ";

Как будет правильно?
и можно-ли вместо А подставить ff->m_gContrStr (указатель на строку)?

Автор: Mad 18.10.2004, 14:09
Правильно будет и так и так, если ты полностья укажеш условие выбора (т.е. "{что} LIKE 'A%') ;)

Автор: Coocky 18.10.2004, 21:49
Цитата
и можно-ли вместо А подставить ff->m_gContrStr (указатель на строку)?

Конечно!Ведь m_strFilter это строка :) Только вот надо будет сделать операции с со строками CString::Insert() :)
Цитата
m_pSet->m_strFilter = "LIKE 'A%' ";

Выполняется до m_pSet->Open();
P.S. А че у тебя нормально запрос работает.Ни чего драйвер не выдает :D :D :D

Автор: SSlavon 19.10.2004, 08:27
во, а я в исходниках встречал m_pSet->m_strFilter = "LIKE ..."; после m_pSet->Open();, поэтому и не работало, теперь все нормально, вот только не врубаюсь как провести сортировку для получения уникальных записей
И еще вопрос по той же теме, у меня множественный фильтр по отбору инфы из БД, если m_pSet->m_strFilter = "LIKE ..."; выполняется перед m_pSet->Open();, мне нужно постоянно открывать и закрывать базу, выполняя поиск по условию? Или есть какой другой способ?

Автор: SSlavon 19.10.2004, 08:52
что-то я начинаю тупить :stena
делаю запрос
Код

   m_pSet->m_strFilter = " GetFrom LIKE '[Я]%' ";
   m_pSet->Open(CRecordset::dynaset, "SELECT * FROM PaymDoc ");

работает, выдает все что есть, а если пытаюсь провести
Код

   m_pSet->m_strFilter = " GetFrom LIKE '[Язва]' ";
   m_pSet->Open(CRecordset::dynaset, "SELECT * FROM PaymDoc ");

выдает:
Попытка просмотра данных после конца или перед началом данных.
хотя "[Язва]" в базе есть, и не одна :)

Автор: Mad 19.10.2004, 13:49
SSlavon посмотри настройки кодовой таблице в ODBC. Скорей всего у тебя драва не распознают кирилицу (или база :) )

Автор: SSlavon 19.10.2004, 14:07
все распознает :)
запрос я не правильно делал
Код

m_pSetPD->m_strFilter = "GetFrom LIKE '" +str+ "%' ";

так работает :)
теперь другая проблема вылезла, как отследить отсутсвующие данные, прога апосля выдачи:
Попытка просмотра данных после конца или перед началом данных.
вылетает напроч :hmmm
Добавлено @ 14:08
где можно почерпнуть унфу по работе с ODBC?

Автор: Mad 19.10.2004, 14:35
Цитата(SSlavon @ 19.10.2004, 14:07)
теперь другая проблема вылезла, как отследить отсутсвующие данные, прога апосля выдачи:
Попытка просмотра данных после конца или перед началом данных.

В класса CRecordset есть для этого две фенкции: IsBOF() и IsEOF(). Если хоть одна из них вернет TRUE, то чтение приведет к приведенной ошибке.
Цитата(SSlavon @ 19.10.2004, 14:07)
где можно почерпнуть унфу по работе с ODBC?

Посмотри MSDN, там все красиво, с примерами, описанно

Автор: SSlavon 19.10.2004, 14:57
я понимаю, но как мне ими воспользоваться, если база то еще не открыта?
Код

m_pSetPD->m_strFilter = "GetFrom LIKE '" +str+ "%' ";
 m_pSetPD->Open(CRecordset::dynaset, "SELECT *  FROM PaymDoc");

иначе запрос не получается сделать :stena

Автор: Mad 19.10.2004, 15:05
SSlavon
У тебя ошибка вылитает не на Open() вызове а на первом вызове MoveNext() или MoveFirst(), посмотри в дебагере.

Автор: SSlavon 19.10.2004, 15:36
:thumbs-up
понял, нашел, спасибо :D

Автор: Coocky 19.10.2004, 19:30
Ты говоришь,что видел
Цитата
m_pSet->m_strFilter = "LIKE ..."; после m_pSet->Open();,

Да но ты пропустил
Код
после m_pSet->Open();m_pSet->Requery();m_pSet->m_strFilter = "LIKE ...";  
:D

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