// Создал класс
class CAuto : public CRecordset
{
public:
CAuto(CDatabase *pDatabase = NULL) :
CRecordset(pDatabase) { m_nFields = 5; };
long m_Gid; // Подозоеваю, что что-то с типами здесь напортачил...
CString m_Name;
long m_Aid;
CString m_Prod;
CTime m_Date;
void DoFieldExchange(CFieldExchange *pFX);
};
void CAuto::DoFieldExchange(CFieldExchange *pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Long(pFX, "GID", m_Gid); //Соответсвенно, если в классе не
правильно заданы типы, то и здесь макросы не верные
RFX_Text(pFX, "Name", m_Name, 50);
RFX_Long(pFX, "AID", m_Aid);
RFX_Text(pFX, "Производитель", m_Prod, 50);
RFX_Date(pFX, "Дата", m_Date);
}
///.......
void AddDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDatabase cdbMyDB;
cdbMyDB.Open("База данных MS Access");
CAuto Rs(&cdbMyDB);
try
{
Rs.Open(CRecordset::forwardOnly, "Авто");
if(Rs.CanAppend())
{
Rs.AddNew();
Rs.m_Name = "Камаз";
Rs.m_Date = CTime(2000, 1, 1, 0, 0, 0);
Rs.m_Gid = 51;
Rs.m_Aid = 12;
Rs.m_Prod = "Город N";
Rs.Update();
/// После этой строки возбуждается исключение и вылетает окно: Недопустимый
идентификатор атрибута или параметра. Кстати если писать
Rs.Open(CRecordset::dynaset, "Авто"); то ошибка: драйвер ODBC не поддерживает
динамических подмножеств данных.
}
Rs.Close();
}
catch (CDBException cdb)
{
AfxMessageBox(cdb.m_strStateNativeOrigin);
}
}
Запись в таблицу Access с использованием ODBC (Visual C++)
В частности есть таблица в которой 5 стольбцов:
Имя поля / Тип данных
GID Счетчик
Name Текстовый
AID Числовой
Производитель Текстовый
Дата Дата/время
Прочитать данные из этой таблицы удалось. А вот с добавлением возникли проблемы.
Вот код:
Код:
Вот такие дела...помогите разобраться, первый раз этим занимаюсь.