Autor Beitrag
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Di 10.12.02 17:35 
Hallo,ich bin es mal wieder !

Ich habe eine TTable und will immer den aktuellen Datensatz löschen !
Hier ist ein Code :

ausblenden Quelltext
1:
2:
3:
4:
Table1.Open;
Table1.First;
if Table1.FieldByName('UmlagNr').AsString = Edit1.Text then
  Table1.Delete;


....hierbei markiert er den aktuellen Datensatz,so das das Programm erkennt,das der Datensatz gelöscht worden ist !

Ich will aber das er den Datensatz aus der Tabelle entfernt,also das dieser Datensatz nicht mehr in der Tabelle steht !

Könnt ihr mit helfen ???

Jagg !
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 10.12.02 17:59 
ausblenden Quelltext
1:
2:
3:
4:
Table1.Open; 
Table1.First; 
if Table1.FieldByName('UmlagNr').AsString = Edit1.Text then 
  Table1.Delete;


Also mit diesem Code passiert Folgendes: Die DB-Verbindung wird geöffnet, der erste Datensatz ausgewählt und wenn im Feld Umlag-Nr dasselbe steht, wie in Edit1 wird er gelöscht.

Es wird also nur der 1. Datensatz überprüft, da kann ja dann nicht der aktuelle Satz gelöscht werden. Wenn Du in Edit1 eine zu löschende Umlag-Nr (was immer das sein soll *g*) löschen willst, musste erstmal ein Locate machen
ausblenden Quelltext
1:
Table1.Locate('Umlag-Nr',Edit1.Text,[])					

Dann kannste das löschen und die if-Funktion brauchste dann au net.
Den aktuelle Satz löschste am besten (ich nehme an du hastn DBGrid), indem Du einfach ein Table1.Delete machst (natürlich wenn die DB offen ist)

Gruß
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Di 10.12.02 23:43 
Ich mach das nicht mit einem DBGrid !
Also nochmal !
In dem Editfeld wird die Nummer eingegeben,die wird dann mit der *.dbf verglichen im feld "UmlagNr",und wenn die nummer in dem editfeld mit der nummer im feld"UmlagNr" übereinstimmt wird der Datensatz gelöscht !
Due *.dbf ist aber nicht im DBgrid geöffnet,sondern sie ist auf der festplatte und darauf greife ich zu ! der datensatz soll nach dem löschen nicht mehr in der *.dbf zu sehen sein !Ich weiss das es nicht mit Table1.delete geht !
wie geht es dann ?
verstehst du mich jetzt ?

Jagg !
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 10.12.02 23:47 
Vorschlag :

Versuche das ganze mal mit SQL.

SQL-Befehl dazu ist : DELETE FROM tabellenname WHERE UmlagNR='<<string vom Edit1-Feld>>'

Das ganze machst Du über eine TQuery-Komponente. Denn soweit ich weis gibt es keine andere möglichkeit außer die, die Dir UGrohne geschrieben hat.
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 09:00 
Hi
Jagg hat folgendes geschrieben:
Ich mach das nicht mit einem DBGrid !

Davon ist doch auch gar niemand ausgegangen

Jagg hat folgendes geschrieben:

In dem Editfeld wird die Nummer eingegeben,die wird dann mit der *.dbf verglichen im feld "UmlagNr",und wenn die nummer in dem editfeld mit der nummer im feld"UmlagNr" übereinstimmt wird der Datensatz gelöscht !

Das ist doch genau das, was UGrohne oben beschrieben hat.

Jagg hat folgendes geschrieben:

Ich weiss das es nicht mit Table1.delete geht !
wie geht es dann ?

Es geht nur mit Table1.delete oder mit der SQL-Methode von bis11.

Jagg hat folgendes geschrieben:

verstehst du mich jetzt ?

Wir verstehen dich schon :mrgreen: aber ich versteh nicht wo dein Problem ist.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 11.12.02 09:51 
ist das so richtig ?
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
if Key = #13 then
  begin
    Query1.SQL.Clear;
    Query1.SQL.Add ('DELETE FROM Umlag.dbf WHERE UmlagNr=Edit1.Text');
    Close;
  end;


.... er löscht aber nichts ?

Jagg !
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 09:59 
Hi
stells mal so um:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
if Key = #13 then 
  begin 
    Query1.SQL.Clear; 
    Query1.SQL.Add ('DELETE FROM Umlag.dbf WHERE UmlagNr= ' + QuotedStr(Edit1.Text)); 
    Query1.ExecSQL;
  end;

Wenn UmlagNr ein numerisches Feld ist, musst du das QuotedStr weglassen.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Mi 11.12.02 10:45 
Hi Jagg,

Bei DBase werden immer nur die Datensätze als gelöscht markiert. Wenn die Daten wirklich weg sein müssen, must du ein PackTable durchführen.

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 11:24 
Oops :oops: Das hatte ich vollkommen ausser acht gelassen. Das ist natürlich korrekt und auch der Grund warums mit Table.Delete nicht funktioniert hat. Beim Löschen mit SQL ist es IMHO nicht notwendig.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 11.12.02 12:32 
Ich habe in der Hilfe unter Packtable besucht aber nichts gefunden !
Könnt ihr mir sagen ,was dieses so macht und die syntax sagen ?

danke !

Jagg !
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 12:46 
Hi
das ist auch keine Methode sondern eine BDE-Funktion. Da gibts zwei Varianten die du anwenden kannst:

  • DbiPackTable
  • DbiDoRestructure

Ich hab das auch schon mal verwendet, allerdings müsste ich da erst mal Zuhause sehen, ob ich das noch finde. In der Zwischnenzeit könntest du vielleicht erst mal versuchen mit der BDE-API Hilfe weiterzukommen.
Das Problem dabei ist aber wieder, dass die Tabelle im Exklusiven Modus geöffnet sein muss, damit das funktioniert.
Ich würde an deiner Stelle erst mal Testen ob das Löschen mit SQL den gewünschten Erfolg bringt, bevor zu zusätzlichen Aufwand betreibst.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Mi 11.12.02 12:48 

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 13:01 
Hi
Und noch was: Ich hab das Löschen von Datensätzen in DBase-Tabellen noch mal durchgetestet. Es funktioniert sowohl mit TTable.Delete als auch mit SQL. Gelöschte Datensätze (auch wenn physikalisch noch in der Tabelle vorhanden) werden in der Datenmenge nicht mehr angezeigt. Das Packen der Tabelle wäre also gar nicht unbedingt notwendig. Es sei denn aus Sicherheitsgründen.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 11.12.02 13:22 
hierbei :
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
if Key = #13 then
  begin
    Query1.SQL.Clear;
    Query1.SQL.Add ('DELETE FROM Umlag.dbf WHERE UmlagNr= '+(Edit1.Text));
    Query1.ExecSQL;
    Close;
  end;


markiert er nur den gelöschten datensatz,aber er entfernt ihn nicht !

Jagg !
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Mi 11.12.02 13:43 
Wo siehst du das?

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 11.12.02 13:44 
wenn ich die tabelle öffne (nicht mit einem DBGrid)
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mi 11.12.02 13:46 
Hi
der Code funktioniert und entfernt den Datensatz aus der Datenmenge. Er wird mit einem Löschkennzeichen versehen und ist damit nicht mehr sichtbar.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Mi 11.12.02 13:47 
Kann der Benutzer deines Programmes die Tabelle auch so öffnen? Wenn ja: Tabelle packen, wenn nein alles OK

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 11.12.02 13:52 
nein !
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 11.12.02 14:36 
ich muss das aber mit dbipacktable machen weiss aber nciht wie !

Jagg !