Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TabelleName aus einer ComboBox löschen !


Jagg - Mi 24.07.02 09:18
Titel: TabelleName aus einer ComboBox löschen !
Hallo,Leute !

Ich habe eine ComboBox und daraus wähle ich den Namen einer Tabelle z.b. Test.dbf !
Ich will die Tabelle jetzt löschen !

Wie mache ich das ?


Jagg !

PS : Er soll genau den die Tabelle löschen,die ich ausgewählt habe


wwerner - Mi 24.07.02 09:25

deletefile(combobox1.items[combobox.itemindex]);


Tino - Mi 24.07.02 09:39

Direkt nach dem Löschen würde ich natürlich auch noch den Eintrag in der ComboBox löschen.

Außerdem dem sollte man vor dem Löschen noch Prüfen ob ein Eintrag aus der ComboBox ausgewählt ist. Ansonsten bekommst bei dem Code-Beispiel von Werner einen kleinen Fehler.

Gruß
TINO


Jagg - Mi 24.07.02 09:39

er löscht nicht,aber er sagt auch keine fehlermeldung !


wwerner - Mi 24.07.02 09:46

wahrscheinlich muß noch der pfad dazu


Jagg - Mi 24.07.02 09:52

Mein pfad ist : C:\Nguyen\Sonstige\Mailimg Service\Datenbank

Und wo tue ich das jetzt hin ????
Hab noch nie mit deletefile gearbeitet !

Jagg !


wwerner - Mi 24.07.02 09:55

Auf diese Frage antworte ich: Lies einfach einmal in der Hilfe unter deletfile


Jagg - Mi 24.07.02 10:12

Deletefile('C:\Nguyen\Sonstige\Mailing Service\Datenbank'[Combobox1.Itemindex]);

ist das so richtig ??? er löscht aber alles !


Tino - Mi 24.07.02 11:51

Nein.

Die Methode DeleteFile erwartet als Parameter einen Dateinamen. Wenn Du mal DeleteFile eingibst und F1 drückst bekommt Du Infomationen zu dieser Funktion. Unter anderem auch den Hinweis wie diese Funktion definiert ist und somit welche Parameter erwartet werden:
Delphi-Hilfe hat folgendes geschrieben:
function DeleteFile(const FileName: string): Boolean;

Dadurch siehst Du jetzt das es sich bei der Methode DeleteFile um eine Funktion handelt die als Ergebnis ein Boolean-Wert zurückliefert und einen Paramter erwartet.

Das heißt jetzt das der folgende Aufruf z. B. die Datei z:\test.txt löscht:

Quelltext
1:
2:
3:
4:
If DeleteFile ('z:\test.txt') { = True} Then
  { Datei gelöscht }
Else
  { Fehler }
Das "Problem" ist nun das Du statt der Angabe z:\test.txt den Eintrag aus der ComboBox und zusätzlich die Pfadangabe benötigst. Wie Du den markierten oder auch engetragenen Text aus der ComboBox bekommst steht auch in der Online-Hilfe und in dem Beitrag von Werner.

Gruß


wwerner - Mi 24.07.02 11:59

Nur noch ein Hinweis: Du solltest keine Pfadangabe hardcodieren. Was ist wenn das Programm auf d: läuft? Auserdem bekommst du die Zeile da oben gar nicht übersetzt. Kannst du inzwischen mit den Debugger umgehen?


Jagg - Do 25.07.02 08:16

also,wenn ich das jetzt richtig verstehe !
Ich darf also nicht den pfad mit eingeben,weil der programm eventuell auch auf einem anderen pfad laufen kann !
Aber wie mache ich das denn wenn ohne pfad,also ich blick da gar nicht mehr durch !
Mit dem Debugger kann ich jetzt umgehen,also zeile für zeile analysieren !

Jagg !


Jagg - Do 25.07.02 08:18

Ich habe bisjetzt so :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm3.Button2Click(Sender: TObject);
begin
  if ComboBox1.ItemIndex <> -1 then
  begin
    if DeleteFile ('ComboBox1.Items[ComboBox1.ItemIndex]') then
    begin
    
    end;
  end;
end;


Wie füge ich denn jetzt da ein ????
Was muss ich noch machen ???

Jagg !


Tino - Do 25.07.02 09:25

Hallo Jagg,

bei Deinem Code versucht DeleteFile jetzt die Datei mit dem Name "ComboBox1.Items[ComboBox1.ItemIndex] zu löschen. Das ist natürlich falsch.

Hier mal 4 Beispiele die letztendlich alle das gleich machen. Nur halt mit dem Unterschied das mal dierekt eine Datei angegeben wurde und mal durch eine oder zwei Variablen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
// Löscht die Datei Test.txt auf Laufwerk C im Verzeichni Program
DeleteFile ('c:\Program\test.txt'); 


// Löscht die Datei die durch die Variable Filename angegeben ist
Filename := 'c:\Program\Test.txt';
DeleteFile (Filename);


// Löscht die Datei Filename im Verzeichnis Path
Filename := 'Test.txt';
Path := 'c:\Program\';
DeleteFile (Path + Filename);


// Löscht die Datei Filename im Verzeichnis 'c:\Program'
Filename := 'Test.txt';
DeleteFile ('c:\Program\' + Filename);

Hast Du das soweit verstanden? Wenn nicht dann frag noch mal nach ansonsten bekommst Du das in Deinem Programm nicht hin.

Gruß
TINO


Jagg - Do 25.07.02 09:30

Hey,das versteh ich schon aber eer soll den aushewählten namen aus der combobox löschen !
Wie mache ich das denn ?


Tino - Do 25.07.02 09:37

Dann ist es doch relativ einfach. Nimm das 3. Beispiel von oben also den hier:

Quelltext
1:
2:
3:
4:
// Löscht die Datei Filename im Verzeichnis Path
Filename := 'Test.txt';
Path := 'c:\Program\';
DeleteFile (Path + Filename);

Jetzt musst Du nur noch die Variable Filename den Wert aus der ComboBox zuweisen. Wie Du den Wert bekommst steht in dem ersten Posting von Werner. Die Varibale Path kannst Du erstmal zum Testen direkt das Verzeichnis das Du in Deinem 3. Posting gepostet hast zuweisen (aber zustätzlich mit einem abschließenden Backslash).

Fertig


Jagg - Do 25.07.02 09:46

ich habe es so gemacht,aber es geht trotzdem nicht !
Was mache ich nur falsch !


Quelltext
1:
2:
3:
4:
5:
6:
if ComboBox1.ItemIndex <> -1 then
  begin
    Filename := (ComboBox1.Items[ComboBox1.ItemIndex]);
    Path := 'C:\Nguyen\Sonstige\Mailing Service\Datenbank\';
    DeleteFile (Path + Filename);
  end;


Tino - Do 25.07.02 09:53

Das sieht doch schon recht gut aus! Jetzt pack noch die Klammern bei der Zuweisung der Variable Filename weg und schon sollte es funktionieren!

Gruß
TINO


wwerner - Do 25.07.02 09:53

Hi,

Das mit dem Path war so gemeint, das du zur Laufzeit ermitteln sollst wo dein Programm läuft:


Quelltext
1:
path := ExtractFilePath(application.ExeName);                    


wenn jetzt deine Datenbanken z.B. in Verzeichnis Datenbanken liegen mußt du noch folgendes machen:


Quelltext
1:
path := ExtractFilePath(application.ExeName)+'Datenbanken\'                    


Jagg - Do 25.07.02 09:57

Hey tino,es sollte gehen aber es geht nicht ich habe jetzt die klammern bei der Zuweisung für Filename weggelassen !

Jagg !


Tino - Do 25.07.02 10:02

Und wo klappt was nicht? Gibt es eine Fehlermeldung wenn ja welche wenn nicht dann setz doch mal einen Breakpoint auf Zeile DeleteFile und schaue Dir dann mal die Werte der Variablen (Filename & eventl. Path) an (einfach mit der Maus auf die Variable zeigen und schon siehste den Wert) und kontrolliere ob diese richtig sind.

Gruß


wwerner - Do 25.07.02 10:06

Jetzt ist es zeit für den Debugger
Das ausführen und schrittweise durchgehen

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if ComboBox1.ItemIndex <> -1 then 
  begin 
    Filename := ComboBox1.Items[ComboBox1.ItemIndex]; 
    Path := ExtractFilePath(application.ExeName)+'Datenbanken\'; 
    if DeleteFile (Path + Filename)
      then Showmessage('gelöscht')
      else Showmessage('Fehler'); 
  end;


Jagg - Do 25.07.02 10:10

Hey tino bei deletefile muss das hin !

Quelltext
1:
DeleteFile (Path + Filename + '.dbf');                    


trotzdem danke !


Jagg - Do 25.07.02 10:12

wie mache ich jetzt das er den namen aus der combobox löscht !

Mit combobox.clear geht das nicht,dann löcht er ja alle,aber ich will ja nur den gelöschten namen weghaben aus der comboBox !

Jagg !


wwerner - Do 25.07.02 10:21

Wie fügst du ein? Wahrscheinlich mit Combobox1.items.add....
Was hälst du zum löschen von Combobox1.items.delete?


Tino - Do 25.07.02 10:31

Jagg hat folgendes geschrieben:
Hey tino bei deletefile muss das hin !
Da siehste wie viel Du doch selbst mit dem Debugger herausfinden kannst :-D

Gruß


Jagg - Do 25.07.02 10:46

ok,ich habe es jetzt alles
danke für eure hilfe und für eure feduld mit mir !

jagg !