Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2015, 22:54   #1
rachina
Пользователь
 
Регистрация: 15.03.2015
Сообщений: 27
По умолчанию удаление записи из БД. организация файлов кучей

доброго времени суток!
не получается организовать удаление файлов из бд, а точнее из блоков.
в моем блоке хранится 5 записей. допустим, я записал 10 записей - следовательно, у меня имеется 2 блока и они имеют такой вид:
1| 2 | 3| 4| 5| 6| 7| 8| 9| 10
допустим, я удаляю запись 4, тогда на её место должна встать запись последняя запись из последнего блока и тогда примет вид такой:
1| 2 | 3| 10| 5| 6| 7| 8| 9| nill

надо как-то удалять старую запись и на её место записать новую, но я смог получить только там, что удаляются обе записи (и 4, и 10).

подскажите, пожалуйста, как это можно исправить?

Код:
procedure TForm1.Button3Click(Sender: TObject);
var i1,i2,i3,k:integer; zach_ud:integer; net: boolean;  b_end: block;
begin
  net:=true;
  if listbox1.itemindex<>-1 then begin
    zach_ud:=Tek_zach;
    FileWork;
    for i2:=1 to filesize(f)-1 do begin
    Seek(f,i2);
    blockread(f,tek_block,1);
    for i1:=1 to 5 do
      if (tek_block.Zap_block[i1].id_zach=zach_ud)  then begin
      Seek(f,filesize(f)-1);
      blockread(f,b_end,1);                     //проверка на 1 блок
      for i3:=1 to 5 do
       if (b_end.Zap_block[i3].id_zach=0)  then begin//проверка на то, что следующая перед послед. запись - пустая
       if ((i3=1) and (b_end.Zap_block[i3+1].id_zach=0)) then begin
       tek_block.Zap_block[i1]:=b_end.Zap_block[i3];
       Seek(f,i2);
       blockwrite(f,tek_block,1); // обрезает с той позиции
       Seek(f,filesize(f)-1);
       truncate(f);
       end else
       tek_block.Zap_block[i1]:=b_end.Zap_block[i3-1];
       b_end.Zap_block[i3-1]:=zap0;
       Seek(f,i2);
       blockwrite(f,tek_block,1);
       Seek(f,filesize(f)-1);
       blockwrite(f,b_end,1);
       end;
       closefile(f);
       Print_all;
       exit;
       end;
       end;
    end;
  end;

Последний раз редактировалось rachina; 07.04.2015 в 22:55. Причина: fds
rachina вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одновременная работа с кучей файлов artemievigor Общие вопросы C/C++ 1 28.09.2014 22:37
Организация чтения/записи файла в библиотеке API-функций. feniksss Помощь студентам 1 10.10.2012 14:24
Организация передачи файлов. Denutrror Работа с сетью в Delphi 6 28.02.2011 04:12
Организация файлов проекта в Visual C++ Fog Visual C++ 6 31.01.2011 14:23
Связь с кучей dbf файлов (таблиц) через OLEDB через UNION ALL Sasha811 SQL, базы данных 0 01.01.2009 14:04