SheepSpeech Ответов: 1

ODBC MFC: не удается правильно использовать SELECT


Привет!

Я пытаюсь использовать ODBC с базой данных Access 2000 в приложении C++ MFC.

Я использую следующий код для выбора записи (которая существует) в моей базе данных:

CNoeud myNode;
myNode.Open(CRecordset::dynaset, L"SELECT * FROM Noeuds where Identifiant_Noeud=5", CRecordset::none);

AfxMessageBox(L"myNode: " + myNode.m_Identifiant_Noeud);

myNode.Close();

Примечание:
- Identifiant_Noeud является первичным ключом.
- Я не открываю и не закрываю базу данных, я использую только методы CNoeud object Open() и Close ().

Но AfxMessageBox показывает только " e:" (я не знаю почему !).

Я новичок во всем этом, не могли бы вы объяснить мне, как сделать мое простое заявление SELECT? Наверное, я упускаю что-то очевидное...
Спасибо!

Что я уже пробовал:

Если бы я написал следующее:
CNoeud myNode;

myNode.Open(CRecordset::dynaset, L"SELECT * FROM Noeuds where Identifiant_Noeud=5", CRecordset::none);

if (myNode.IsEOF()) AfxMessageBox(L"no entry");
myNode.Close();

Окно сообщения не отображается, поэтому я предполагаю, что объект CNoeud не пуст.

W∴ Balboos, GHB

Строку Подключения?

По крайней мере, из того, что вы послали, у вас нет связи с базой данных.

1 Ответов

Рейтинг:
12

Jochen Arndt

Ключевое слово-арифметика указателей C/C++.

Первый параметр системы AfxMessageBox() функция-это LPCTSTR строковый указатель. Вы передаете адрес постоянной строки и добавляете значение "5" (myNode.m_Identifiant_Noeud это как первичный ключ наверное какой то int). Таким образом, в окне сообщения отображается строка, начинающаяся с 6-го символа (нулевой 5-й).

Вы не можете объединить строки с помощью + оператор в C/C++.

Вы должны создать форматированную строку и показать это:

CString strMsg;
strMsg.Format(_T("myNode: %d"), myNode.m_Identifiant_Noeud);
AfxMessageBox(strMsg.GetString());


SheepSpeech

Спасибо!
Я только что закончил проект на C#, моя ошибка. Но я видел это в интернете, и это, кажется, работает, я использую его для своих исключений баз данных: AfxMessageBox(L"ошибка базы данных:" + e->m_strError);

Jochen Arndt

Там m_strError-это CString. Это поддерживает объединение строк с оператором + (но не других типов, таких как int). Вышеизложенное создаст временную строку CString (поскольку один операнд является строкой CString), которая затем передается с помощью неявного оператора PCXSTR ().

Спасибо, что приняли мое решение.