| Autor |
Beitrag |
Jagg
      
Beiträge: 635
|
Verfasst: 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 :
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
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Di 10.12.02 17:59
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
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 
      
Beiträge: 635
|
Verfasst: 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
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: 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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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  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 
      
Beiträge: 635
|
Verfasst: Mi 11.12.02 09:51
ist das so richtig ?
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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mi 11.12.02 09:59
Hi
stells mal so um:
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
      
Beiträge: 185
|
Verfasst: 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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mi 11.12.02 11:24
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 
      
Beiträge: 635
|
Verfasst: 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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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
      
Beiträge: 185
|
Verfasst: Mi 11.12.02 12:48
_________________ Gruß
Wolfgang
----------
zu hause ist es doch am schönsten
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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 
      
Beiträge: 635
|
Verfasst: Mi 11.12.02 13:22
hierbei :
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
      
Beiträge: 185
|
Verfasst: Mi 11.12.02 13:43
Wo siehst du das?
_________________ Gruß
Wolfgang
----------
zu hause ist es doch am schönsten
|
|
Jagg 
      
Beiträge: 635
|
Verfasst: Mi 11.12.02 13:44
wenn ich die tabelle öffne (nicht mit einem DBGrid)
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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
      
Beiträge: 185
|
Verfasst: 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 
      
Beiträge: 635
|
Verfasst: Mi 11.12.02 13:52
|
|
Jagg 
      
Beiträge: 635
|
Verfasst: Mi 11.12.02 14:36
ich muss das aber mit dbipacktable machen weiss aber nciht wie !
Jagg !
|
|