Autor Beitrag
Tabakbrummel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: Di 22.11.05 13:14 
user profile iconTabakbrummel 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: Di 22.11.05 14:28 
Hi Jasocul

Erst mal danke für deine Antworten.

MfG
Tabakbrummel
Tabakbrummel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: Di 22.11.05 20:33 
Hi

Mit der OnDataChange habe ich hin bekommen.

user profile iconjasocul 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124

win 7
Turbo Delphi, VS 20010 Express
BeitragVerfasst: 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