Работа с БД Dbf из Vc++

Тема в разделе "MS Visual C++", создана пользователем Alex_Bamuner, 5 сен 2006.

Статус темы:
Закрыта.
  1. Alex_Bamuner

    Alex_Bamuner Гость

    Привет всем!
    Произошла удивительная вещь!!! Работаю с базой dbf из Visual C++ 6.0. Читаю, редактирую, добавляю записи. А вот кодга дело до удаления дошло - тут-то и началось. После удаления записи из рекордсета открываю базу в Excel и вижу, что удаленная запись исчезла. Потом считываю базу сам из VC++ и вижу, что она на месте! Чудеса! Привожу отрывок кода. Считаем, что объект CDatabase уже создан (OVRA) и база подключена, и что имеется класс-наследник от CRecordset для работы с базой (ORRecordset):

    ORRecordset ovr(&OVRA); // тот самый наследник
    ovr.m_nFields = 4;

    CString SQL = CString("SELECT * FROM TABLE1");

    if(ovr.IsOpen()) ovr.Close();
    try
    {
    ovr.Open(CRecordset::dynaset, SQL);
    }
    catch(...)
    {
    Error = 4;
    return Error;
    }
    ovr.Move(0);
    while(!ovr.IsEOF()) // хочу удалить все записи из таблицы
    {
    try
    {
    ovr.Delete();
    }
    catch(...)
    {
    // обработка исключения, хотя оно не возникает!!!
    }
    ovr.MoveNext();

    }
    ovr.Close();
    Error = 0;
    return 0;

    Заранее благодарю за помощь и любые комментарии!
     
  2. artiom_kh

    artiom_kh Гость

    Делай Requery для обновления кэша рекордсета
     
  3. Alex_Bamuner

    Alex_Bamuner Гость

    Пробовал. :unsure: Вся запара в том, что при замене базы на mdb все сразу работает как надо. с этим же кодом. А Dbf - не хочет... :(
     
  4. artiom_kh

    artiom_kh Гость

    Значит ODBC-драйвер кривой, установи другой
     
  5. Alex_Bamuner

    Alex_Bamuner Гость

    хе-хе... кучу уже перепробовал. не знаю, что и делать... пока, временно, перешел на mdb, но в конечном счете нужно юзать именно dbf, будь она неладна! :unsure:
     
  6. artiom_kh

    artiom_kh Гость

    Ну, можно попробовать в CRecordset::Open передать также CRecordset::skipDeletedRecords(в dwOptions), если уже и это не поможет, то тогда есть вариант перехода на DAO/ADO - через DAO/ADO можно открывать также БД ODBC.
     
  7. Alex_Bamuner

    Alex_Bamuner Гость

    Хм... Как раз от DAO (CDaoRecordset) я и перешел к CRecordset :unsure: из-за проблем с работой с dbf. DAO позволял лишь просматривать таблицы, а записью и редактированием были глюки. Так что DAO как-то не подходит. Теперь уже меня беспокоит лишь спортивный интерес - почему же так происходит??? Видимо, я полностью перейду на mdb. А вот насчет CRecordset::skipDeletedRecords стоит попробовать. Спасибо.
     
  8. artiom_kh

    artiom_kh Гость

    <!--QuoteBegin-Alex_Bamuner+6:09:2006, 08:42 -->
    <span class="vbquote">(Alex_Bamuner @ 6:09:2006, 08:42 )</span><!--QuoteEBegin-->Хм... Как раз от DAO (CDaoRecordset) я и перешел к CRecordset из-за проблем с работой с dbf.
    [snapback]43297" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    есть альтернатива DAO - ADO (построенна на OLE DB) - и мелкомягкие рекомендует в современных программах использовать именно её
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей