void udalenie()
{
FILE* f;
FILE* newf;
struct BD //BD - tip dannih dlia BD
{
int nomer; //nomer magazina
string nazvanie; //naimenovanie tovara
string artikul; //artikul tovara
double cena; //cena edinici tovara
int kolvo; //kolichestvo tovara
int ID;
} tovar1,tovar2; //tovar1 - dlia zapisi v "fnew"/// tovar2 - dlia zapisi v "f"
int del;
cout<<"Vvedite nazvanie BD";
cin>>nazvanie_BD;
strcat( nazvanie_BD, ".txt" );
cout<<"Vvedite ID udaleiaemoi zapisi";
cin>>del; // del - ID udaliaemoi zapisi
f=fopen(nazvanie_BD,"rb");
newf=fopen("newf.txt","ab");
rewind(f);
rewind(newf);
int eof,i=1;
eof=feof(f);
fread(&tovar1,sizeof(struct BD),1,f);
eof=feof(f);
while (eof==0)
{
if (tovar1.ID!=del)
{ tovar1.ID=i; fwrite(&tovar1,sizeof(struct BD),1,newf); i++;}
fread(&tovar1,sizeof(struct BD),1,f);
eof=feof(f);
}
fclose(f);
fclose(newf);
remove(nazvanie_BD);
k=0;
eof=0;
f=fopen(nazvanie_BD,"ab");
newf=fopen("newf.txt","rb");
rewind(f);
rewind(newf);
fread(&tovar2,sizeof(struct BD),1,newf);
while (eof==0)
{
if (stroki_v_BD("newf.txt")!=0) // (tovar2.ID!=-1)
{
fwrite(&tovar2,sizeof(struct BD),1,f);
fread(&tovar2,sizeof(struct BD),1,newf);
eof=feof(newf);
k++;
}
else
{
fclose(f);
remove(nazvanie_BD);
f=fopen(nazvanie_BD,"ab");
break;
}
}
fclose(f);
fclose(newf);
remove("newf.txt");
}
Глючит удаление записи из БД при повторном заполнении БД
Я пишу прогу для работы с БД. БД - файл с записями типа structure.
Я написал алгоритм удаления записи из БД:
Код:
Алгоритм чуток длинноватый, но работает. Но когда удаляешь все записи из БД, а потом снова их добавляешь (с помощью алгоритма Добавить Запись), то они перестают удаляться. Вместо этого в исходную БД добавляются все записи, кроме удаляемой.
Я все проверил, но так и не нашел ошибки.
Подскажите, в чем может быть дело? :confused: