Autor |
Beitrag |
Tabakbrummel
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: So 20.11.05 21:52
Hi alle
Ich habe da ein Problem mit den verhindern, dass das DBGrid automatisch neue Einträge einfügt? Es geht darum wenn, ich was in der Tabelle speichern (.Post) will speichert es nur in der ersten Zeile im DBGrid und nicht in der nächste Zeile.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm20.ArtenTableBeforeInsert(DataSet: TDataSet); begin Abort; end;
procedure TForm20.SWDBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_DOWN) then begin ArtenTable.DisableControls; ArtenTable.Next; if ArtenTable.EOF then Key := 0 else ArtenTable.Prior; ArtenTable.EnableControls; end; end; |
Meine frage was mache ich da Falsch?
MfG
Tabakbrummel
|
|
cartridge
      
Beiträge: 209
Win XP
D4 Prof,D6 Prof
|
Verfasst: Mo 21.11.05 21:28
Einiges!
Ich weiß zwar nicht genau, was das werden soll, aber schließe die Tabelle nach dem Einfügen einfach und öffne sie wieder. Oder habe ich Dich da gänzlich falsch verstanden?
Durch das Manipulieren des DB- Cursors überspringst Du z.B. schon jeweils eine Zeile...
Gruß Ingo
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Mo 21.11.05 23:40
Hi
Ich möchte es so haben wenn, ich was im DBEdit eintrage das es nicht gleich in der Table übernommen wird. Sondern erst wenn, ich mit .Post speichere in der Table übernommen wird.
MfG
Tabakbrummel
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 13:14
Tabakbrummel hat folgendes geschrieben: | Hi
Ich möchte es so haben wenn, ich was im DBEdit eintrage das es nicht gleich in der Table übernommen wird. Sondern erst wenn, ich mit .Post speichere in der Table übernommen wird.
[/Edit] Ich arbeite mit Paradox ,TTable und DataCource
MfG
Tabakbrummel |
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 22.11.05 13:38
Dann musst du das mit zwei TTable-Komponenten machen oder "einfache" Edit-Felder nehmen und das manuell eintragen.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 14:20
Hi Jasocul
Da hab ich mal eine Frage wie ich das den mit zwei TTable-Komponenten?
Danke im vorraus
MfG
Tabakbrummel
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 22.11.05 14:25
Ein TTable und TDatasource benutzt du für das DBGrid.
Das andere TTable und TDataSource für deine DBEdit-Kopmonenten.
Du musst folgendes beachten:
Wechselst du den Datensatz im DBGrid (bzw. im ersten TTable), musst du das auch im zweiten anpassen. Dafür kannst du einen Filter oder die Find-Methode verwenden.
Wenn der Datensatz gespeichert wird, musst du natürlich ein Refresh mit der ersten TTable-Komponente durchführen. Sonst siehst du die Änderungen nicht im DBGrid.
Ich würde der Einfachheit halber ein zweites Fenster verwenden für die Erfassung und Bearbeitung. Damit sparst du dir eine Menge Probleme, auf die ich jetzt nicht eingehen möchte. Ich will dich ja nicht jetzt schon völlig verwirren.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 14:28
Hi Jasocul
Erst mal danke für deine Antworten.
MfG
Tabakbrummel
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 14:43
Hi Jasocul
Mein du es so das man die zweite Tabelle als art temp. nemmen soll?
Oder mit den Fenster das man spiegeln soll.
MfG
Tabakbrummel
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 22.11.05 15:05
Eher die zweite Variante.
Beispiel:
- In der ersten TTable(DBGrid) wählst du einen Datensatz aus.
- Über einen Button (z.B.) öffnest du das zweite Fenster (Modales Fenster bitte).
- Dort greifst du über ein zweites TTable auf den speziellen Datensatz zu.
- In diesem Fenster hat du dann noch einen Speichern und Abbruch-Button.
- Wenn du speicherst, wird der Datensatz gespeichert und das Fenster geschlossen.
- Im Hauptfenster musst du mit der TTabel-Komponente noch ein Refresh machen, da diese die Änderungen mit dem anderen TTable nicht mitbekommt.
Du arbeitest zwar mit zwei TTable-Komponenten, aber auf der selben Datenbank-Tabelle. Daher hat das mit einer Spigelung oder einer temoorären Tabelle nichts zu tun.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 15:38
Hi Jasocul
Mit denn fenster ist nicht so das ding.
Mit den Edit ist denke ich mal eine bessere Lösung? Aber wie es am besten mit den Edit machen?
MfG
Tabakbrummel
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 22.11.05 16:10
Nur mal ein kurzer Ansatz (habe gerade wenig Zeit):
Mit ArtenTable.FieldByName(<Feldname>).AsString kannst du auf die Felder der der Tabelle zugreifen. Damit kannst du die Daten in die Edit-Felder übertragen und wieder zurück geben.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 19:26
Hi
Mit den Edit-Felder übertragen habe ich hinbekommen im Button1 und zurück geben auch im FormShow.
Jetzt ist nun noch das Problem? In der DBGrid wenn ich in der zweiten Zeile gehe zeigen die Edits alles von der ersten Zeile der DBGrid an.
Mfg
Tabkbrummel
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 22.11.05 20:02
In deiner TDataSource gibt es ein Ereignis "OnDataChange". Dies wird u.a. ausgelöst, wenn du den Datensatz wechselst. D.h. du kannst jedesmal, wenn das Ereignis ausgelöst wird deine Edit-Felder automatisch neu füllen.
Aufpassen musst du nur, dass du einen Datensatzwechsel nicht zulässt, wenn du gerade in deinen Edit-Feldern etwas am Ändern bist.
Ich würde das DBGrid solange disablen.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 20:23
Hi Jasocul
Jetzt weis ich nicht was ich für ein Quelltext in OnDataChange eintragen soll.
MfG
Tabakbrummel
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Di 22.11.05 20:33
Hi
Mit der OnDataChange habe ich hin bekommen.
jasocul hat folgendes geschrieben: | Aufpassen musst du nur, dass du einen Datensatzwechsel nicht zulässt, wenn du gerade in deinen Edit-Feldern etwas am Ändern bist.
Ich würde das DBGrid solange disablen. |
Das mit den Datensatzwechsel verstehe ich nicht.
MfG
Tabakbrummel
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 23.11.05 09:13
Angenommen, du bist gerade dabei, einen Datensatz zu verändern und wechselst dann im DBGrid die Zeile. Dann sind deine Änderungen in den Edit-Feldern dahin. Das kann natürlich so von dir gewollt sein, ist aber nicht die beste Lösung.
Entweder du sperrst das dBGrid (Enabled := False), solange du bearbeitest oder du prüfst im OnDataChange ob du gerade etwas am Ändern bist und gibst eine Meldung aus. Am besten noch mit der Möglichkeit den Datensatzwechsel abzubrechen oder die Änderungen automaitsch zu speichern.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Mi 23.11.05 10:21
Hi Jasocul
Erst mal vielen Dank für deinen Antworten.
Ich weis nicht ob ich da richtig liege. DBGrind.Enable:= false im AfterEdit.
Da ist Problem. Wenn ich eine Eingabe ändere speichert es sie nicht ab.
Ich bin dann erst mal bis Heute abend ca 20 Uhr nicht im Netz.
MfG
Tabakbrummel
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 23.11.05 10:48
Im AfterEdit von was?
Ich vermute von einem Edit-Feld.
Mach dir die Arbeit nicht so schwer.
Lege die Edit-Felder auf ein Panel. Solange der Anwender im DBGrid browst, ist das Panel disabled. Wenn der Anwender dann einen Button Ändern oder Erfassen drückt, wird das Panel enabled und das DBGrid disabled. Wird dann ein Button Speichern oder Abbruch gedrückt, wird das Panel wieder disabled und das DBGrid enabled.
|
|
Tabakbrummel 
      
Beiträge: 124
win 7
Turbo Delphi, VS 20010 Express
|
Verfasst: Mi 23.11.05 20:59
Hi Jasocul
Eigendlich meinte ich es das man in der DBGrid gar nichts editiert sondern nur über die TEdits. Da ist mein Problem wenn ich was editiere und abspeichere wird das editierte nicht abgespeichert.
MfG
Tabakbrummel
|
|