Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запись в таблицу Access с использованием ODBC (Visual C++)

1.9K
04 сентября 2006 года
burst
94 / / 04.09.2006
Приложение, разрабатываемое в Visual Studio 2006 c использованием MFC, взаимодействует с БД Access: чтение, добавление и изменение данных.
В частности есть таблица в которой 5 стольбцов:

Имя поля / Тип данных
GID Счетчик
Name Текстовый
AID Числовой
Производитель Текстовый
Дата Дата/время

Прочитать данные из этой таблицы удалось. А вот с добавлением возникли проблемы.

Вот код:

Код:
// Создал класс

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);
    }

}

Вот такие дела...помогите разобраться, первый раз этим занимаюсь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог