• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Alex_Bamuner
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

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;

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

artiom_kh

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

Alex_Bamuner

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

artiom_kh

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

Alex_Bamuner

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

artiom_kh

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

Alex_Bamuner

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

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) - и мелкомягкие рекомендует в современных программах использовать именно её
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!