Jump to content

IRecordManager.DeleteEntry funktioniert nicht


Recommended Posts

var
 i: Integer;
begin
 for i := 0 to DVBViewer.RecordManager.Count-1 do begin
   DVBViewer.RecordManager.DeleteEntry(DVBViewer.RecordManager.Items[i].recID);
 end;
end;

 

So sollten meines Wissens nach alle bisher aufgenommenen Dateien (auch von Festplatte) gelöscht werden. Leider bleiben diese bisher bestehen und können auch später noch gelistet werden (über Items.Filename etc.).

 

Nach einem Neustart des Programms sind dann alle TV-Kanäle weg!

 

Was nun?

 

Wenn ich die Dateinamen der Videos und .txt Dateien aus dem Aufnahmeordner lösche, muss ich die dann noch irgendwo aus eine Datenbank löschen, oder steht alles in den .txt Dateien?

 

Danke im Vorraus!

Link to comment
Guest Lars_MQ

 for i := 0 to DVBViewer.RecordManager.Count-1 do begin
  DVBViewer.RecordManager.DeleteEntry(DVBViewer.RecordManager.Items[i].recID);

Schlechte Idee.

 

Auf jeden fall beim löschen einer liste immer von oben anfangen!

for i := DVBViewer.RecordManager.Count-1 downto 0 do begin

Den rest schau ich nachher nach, wenn meine tests mit dem neuen netzwerkstreaming system durch sind :)

Link to comment

Gut, das würde schonmal einiges erklären. (Siehe auch anderes Thema.)

 

Aber (ich weiss, ich bin nur am fordern) ich denke es wäre schon sinnvoll/wichtig, wenn nach DeleteEntry von deinem Interface selbständig der Wert um 1 verringert wird oder -besser- neu berechnet wird.

Link to comment
Guest Lars_MQ

Ähm wie soll das gehen? Du zählst von 0 bis 10 hoch und fängst an:

 

0 löschen -> 9 da

1 löschen -> 8 da, da eins wieder runterrutscht bleibt ein element 0.

2 löschen -> 7 da, eins wieder runtergerutscht.

usw.

 

man löscht entweder:

 

while count >0 do

delete(0)

 

oder for i:=count-1 downto 0 do

delete(i);

 

Probiere es mal mit ner liste.

Link to comment
Guest Lars_MQ

function TRecordManager.deleteEntry(ID : Integer): Boolean;
var
 mMediaInfo:TRecorddata;
begin
 result := False;
 if not FRecordDB.GetEntry(ID,@mMediaInfo) then
   exit;
 if mMediaInfo.FileName='' then
   exit;
 deletefiles(changefileext(mMediaInfo.FileName, '') + '*.*'); // splittet files and info.txt files
 if FRecorddb.DeleteEntry(@mMediaInfo) and
   fMediaDB.DeleteEntry(mMediaInfo.FileName) then
 begin
   SetLength(FItems,0);
   result := True;
 end;
end;

So das ist der Code, der dahinter steht. Ich seh schon, da fehlen noch kriterien, für den worst case, der eigentlich nicht auftreten darf (folder oder filename=''). Das wird schon beim anlegen im vcr-engine verhindert, allerdings manchmal bringen user sachen fertig, die man nie für möglich gehalten hat (siehe meine sig :)).

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...