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


Автор: Fantaz1 17.1.2009, 14:27
Пишу программу для роботы с базами данных. Скомпилирывал ошибок нема, но при запуске выдает вечно ошибку!
вот скрин http://s2.ipicture.ru/uploads/090117/5RIfE83Pfx.jpg
Кто обьяснит что это такое и из-за чего оно выскакует?? 
Что это за нарушение прав доступа?

Автор: pan2004 17.1.2009, 14:40
Это ошибка 0xc0000005, хорошо знакомая всем программерам на C++. Возникает, когда программа пытается воспользоваться нулевым или "висящим" указателем(это тот, который указывает в никуда). Соответственно, надо найти его и исправить.

Добавлено через 3 минуты и 46 секунд
еще это называется Segmentation fault

Автор: Fantaz1 17.1.2009, 21:49
Спасибо, ошибку нашел и исправил.

Но вот появилась еще одна небольшая проблемка, при реализации фильтрации в базе данных.
Пишу программу по примеру с книги, ошибок нема, запускается программа нормально, но при выборе фильтрации, выскакует окно с ошибкой  :
( Ошибка синтаксиса (пропущен оператор) в выражении запроса 'AND Kind_of_sport Like 'бег%' )

Вот текст функции фильтрации:

void CKyrsDBView::DoFilter(CString field)
{
    CFilterDlg FilterDlg;
    int res = FilterDlg.DoModal();
    if(res == IDOK)
    {
        m_pSet ->Close();
        m_pSet ->m_strFilter = m_strFilter0 + _T(" AND " + field + " LIKE '" + FilterDlg.m_FilterValue + "%'");
        m_pSet ->Open();        
        UpdateData(FALSE);
    }
}
Врядли б в книге напечатали неправельный код, но тогда почему не работает?
Объясню как работает: открывается диалог. окно в котором я должен ввести значение ( FilterDlg.m_FilterValue ) по которому программа должна отфильтровать списки по заданному полю ( field )


И кто может объяснить значение содержимого этих скобок (" AND " + field + " LIKE '" + FilterDlg.m_FilterValue + "%'")
Никак не могу понять, для чего там эти слова "AND", "LIKE'", "%'" ?? В книге там про эту строчку не слова.
Заранее всем большое спасибо!


Автор: xvr 18.1.2009, 21:16
Цитата(Fantaz1 @ 17.1.2009,  21:49)
Спасибо, ошибку нашел и исправил.

Но вот появилась еще одна небольшая проблемка, при реализации фильтрации в базе данных.
Пишу программу по примеру с книги, ошибок нема, запускается программа нормально, но при выборе фильтрации, выскакует окно с ошибкой  :
( Ошибка синтаксиса (пропущен оператор) в выражении запроса 'AND Kind_of_sport Like 'бег%' )

Вот текст функции фильтрации:

        m_pSet ->m_strFilter = m_strFilter0 + _T(" AND " + field + " LIKE '" + FilterDlg.m_FilterValue + "%'");


Тут ошибка, должно быть
Код

 m_pSet ->m_strFilter = m_strFilter0 + _T(" AND ") + field + _T(" LIKE '") + FilterDlg.m_FilterValue + _T("%'");
Макрос _T применяется ТОЛЬКО к изображению строк, ни в коем случае не к выражениям

Цитата

Врядли б в книге напечатали неправельный код, но тогда почему не работает?
Ф топку ©

Цитата

И кто может объяснить значение содержимого этих скобок (" AND " + field + " LIKE '" + FilterDlg.m_FilterValue + "%'")
Никак не могу понять, для чего там эти слова "AND", "LIKE'", "%'" ?? 
 Стандартное выражение фильтра в SQL

Цитата

В книге там про эту строчку не слова.
 Почитайте про SQL

Автор: mes 18.1.2009, 21:27
Цитата(xvr @  18.1.2009,  20:16 Найти цитируемый пост)
Макрос _T применяется ТОЛЬКО к изображению строк, ни в коем случае не к выражениям

почему это вдруг?

Автор: vinter 18.1.2009, 21:42
Цитата(mes @  18.1.2009,  22:27 Найти цитируемый пост)
почему это вдруг?

_T это конкантенация L и строки в случае юникода, что получится при конкантинации имени переменной и L? 

Автор: mes 18.1.2009, 21:51
сорри, не так понял высказывание. Подумал что нельзя применять к строчкам запроса и неправильной считается эта строка :
Цитата(xvr @  18.1.2009,  20:16 Найти цитируемый пост)
 m_pSet ->m_strFilter = m_strFilter0 + _T(" AND ") + field + _T(" LIKE '") + FilterDlg.m_FilterValue + _T("%'");


a оказывается речь об этой :
Цитата(xvr @  18.1.2009,  20:16 Найти цитируемый пост)
       m_pSet ->m_strFilter = m_strFilter0 + _T(" AND " + field + " LIKE '" + FilterDlg.m_FilterValue + "%'");

a ее заметил только сейчас.. еше раз сорри  smile 

Автор: xvr 18.1.2009, 22:34
Кстати, а что лежит в m_strFilter0? Судя по сообщению об ошибке там пусто, а не должно быть пусто  smile 

Автор: kolobok0 19.1.2009, 16:37
Цитата(Fantaz1 @ 17.1.2009,  21:49)
...Никак не могу понять, для чего там эти слова "AND", "LIKE'", "%'" ?? В книге там про эту строчку не слова...

как тут уже прозвучало - курите SQL.
AND - с английского И. Используеться в данном языке как логическая связь. пример..
 "мама мыла раму" И "курила"
LIKE - поиск подстроки.
процент - это то же самое что и звёздочка в файловой системе.т.е. "любые данные"

книгу как уже сказали - в топку. если не разжовано что сие значит.

SQL сильно зависит(носит отпечаток) самого движка БД..так что изучая SQL обратите на это внимание...


удачи ВАм
(круглый)

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