Autor Beitrag
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mi 26.03.08 17:54 
Titel: re
Ok aber auf dem Formular wo ich die Felder hab, hab ich ja kein Button sondern nur die Navigatorbar kann ich auch der diese Aufgabe zuweisen?
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 26.03.08 18:00 
Ja

Nun isset aber jut mit dem am Händchen führen :mrgreen:

Schau doch selber erstmal nach, welche Eigenschaften, Ereignisse und Methoden der Navigator hat.

Wenn Du die oben angegebenen Anforderungen erfüllt hast, dann bist Du doch selbständig schon ganz schön weit gekommen :zustimm:

also weiter so

_________________
Gruß Aga
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mi 26.03.08 18:10 
Titel: re
ok ich werds versuchen^^
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Do 27.03.08 16:32 
Titel: re
kannste mir wenigstens einen tipp geben wie das + auf der navigator leiste ansprechen kann? hab schon einiges ausprobiert aber an ereignissen hat gar nicht wirklich gepasst

man könnte es mit einem onclick ereignis machen aber dazu müsste ich wissen wie der + button auf der navi heißt finde aber nichts dazu
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Do 27.03.08 18:35 
Einen Tipp Komponentenname eingeben den Punkt setzen kurz warten und schauen was da alles so angezeigt wird, vieleicht auch mal dran denken das dies alles englisch ist dann kommt man leichter drauf. :wink:

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 27.03.08 19:00 
Ich weiß zwar nicht, ob dein 'Navigator' ein DBNavigator ist... aber wenn, dann guck dir mal das Ereignis OnClick und dessen Parameter Button an ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Fr 28.03.08 00:31 
oder Du markierst einfach den Navigator auf dem Formular und drückst auf F1.

Da gibts sogar ein Beispiel :idea:

Du kannst Dir auch die Ereignisse von TTable angucken, damit gehts auch, vielleicht sogar etwas kontrollierbarer, also z.B. beforePost

Übrigens noch ein Tipp, Du musst dafür Sorge tragen, dass es wenigstens einen Benutzer gibt, also auch prüfen, ob in der Benutzertabelle der letzte Datensatz gelöscht wird und das verhindern, sonst komm ich nämlich, lösch alle Benutzer und schliesse das Programm, dann öffne ich es wieder und dann sag ich...Und nu :roll:

_________________
Gruß Aga
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 28.03.08 16:08 
Titel: re
Hi ok ich mach das mit der Hilfe von der Tabelle also nicht mehr mit der "DBNavigator-Komponente".
Ich wollte dafür BeforeInsert also bevor ein Datensatz eingefügt wird soll er das machen benutzen.
Bloß nun hab ich das Problem das er nicht abbricht, sondern den Datensatz trotzdem einträgt und einen leeren Datensatz kann ich auch nicht mehr hinzufügen sondern nur noch die vorhandenen bearbeiten.
Dazu kommt das er jetzt immer wenn ich auf den + Button klicke die MsgBox anzeigt, was ja logisch ist da ich nur die ändern kann die schon da sind^^, wie kann ich das ändern?
Soll ich anstatt des abort villt Table1.Delete verwenden?

So hab ichs:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin
 if Table1.Locate('Benutzer', DBEdit1.Text, []) then
    ShowMessage('Benutzer bereits vorhanden!');
    abort;
end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Fr 28.03.08 16:13 
Ne, ne, Du mußt das mit beforePost machen.

Insert legt ja erstmal nur einen leeren Datensatz an.
Da gibts noch gar nix zu prüfen.

Aber wenn der Benutzer den Datensatz speichert, also den Haken klickt, oder den Datensatz wechselt, dann führt das Grid ein Post aus.

_________________
Gruß Aga
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 28.03.08 18:33 
Titel: re
aber wenn ich das in post mache kommt immer ne fehlermeldung T_T
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 28.03.08 19:11 
Titel: Re: re
user profile iconBlack_Fox hat folgendes geschrieben:
aber wenn ich das in post mache kommt immer ne fehlermeldung T_T


Verrate uns bloß nicht, was für eine Fehlermeldung kommt.. geschweige denn, was für einen Quelltext du verwendest..
Könnte ja passieren, dass man dir helfen kann.
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 28.03.08 22:16 
Titel: re
Also das hier ist die Fehlermeldung:

Im Projekt Project1.exe ist eine Exception der Klasse EStackOverflow aufgetreten. Meldung: "Stack-Überlauf". Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Und das der Code dazu:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
 if Table1.Locate('Benutzer', DBEdit1.Text, []) then
    ShowMessage('Benutzer bereits vorhanden!');
    abort;
end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Fr 28.03.08 23:40 
tz

also EStackoverflow bedeutet, iwie hast es nu hingekriegt, ne Endlosschleife zu produzieren und das hat nichts mit dem von dir geposteten Quelltext zu tun, jedenfalls nicht direkt

Häng mal das ganze Projekt hier rein, aber mal ehrlich...ich find es etwas schade, dass Du wenn Du etwas machst, nicht auch mal ein bissel nach rechts und links guckst und Dir ein paar Gedanken machst.

Edit// wahrscheinlich hast Du noch das BeforeInsert drin oder irgendwas in der Art...versuch erstmal selbst dahinter zu kommen und dir klar zu machen, was da abläuft

_________________
Gruß Aga
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Sa 29.03.08 16:09 
Titel: re
Ich mach mir doch Gedanken bloß ich weiß ni wo der Fehler leigt weil das ist eigentlich der wichtigste Teil im Quelltext. Dazu kommt das ich das erste mal mit DB in Zusammenhang mit Delphi arbeite.

Hier ist der gesamte Quelltext, hab nen neues Projekt erstellt und das da genauso gemacht und der selbe Fehler kommt:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, DBTables;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBNavigator1: TDBNavigator;
    procedure Table1BeforePost(DataSet: TDataSet);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
 if Table1.Locate('Benutzer', DBEdit1.Text, []) then
    ShowMessage('Benutzer bereits vorhanden!');
    abort;
end;

end.


Hab zu dem Fehler nur das gefunden, aber werde daraus nicht shlau:

Beschreibung

EStackOverflow wird ausgelöst, wenn das System den erforderlichen Stack-Speicher nicht zuweisen kann. Mögliche Gründe sind extrem große lokale Variablen, eine große Rekursionstiefe oder unzulässiger Machinencode.

Zur Laufzeit werden Exception-Informationen in die Felder von EExternal gespeichert.

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 29.03.08 16:29 
Stackoverflow kann man auch als "Endlosschleife von Prozeduren" beschreiben, also Prozeduren, die sich immer wieder selber aufrufen (Rekursion). Wenn das zu viele werden, tritt eben dieser Fehler auf.

In deinem Fall:
1. Der Datensatz soll gespeichert werden -> OnBeforePost wird aufgerufen
2. In diesem Ereignis rufst du Locate auf. Locate verschiebt aber den aktuellen Datensatz. Um diesen zu verschieben, muss der aktuelle aber erst gespeichert werden -> zurück zu 1

Das Ganze läuft dann immer wieder im Kreis, bis irgendwann der Stack überläuft.


Lösung hab ich grad keine, da ich noch nie eine Eingabe direkt ins Grid erlaubt habe.. ich bau mir da immer einen eigenen Editor (neues Formular) für.
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Sa 29.03.08 17:06 
Titel: re
@Agawain kennst du ne lösung?^^
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: So 30.03.08 15:06 
keiner ne idee?
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: So 30.03.08 15:40 
Xentars Vermutung wird wohl stimmen.

Erstell Dir ein Query auf die Benutzertabelle. Da führste das Locate aus.

_________________
Gruß Aga
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: So 30.03.08 20:59 
Ok hab ne query auf die oberflche gesetzt und da bei beforepost das mit dem locate reingeschrieben, aber wie funkt das jetzt mit der query? muss doch bestimmt noch mehr einstellungen vornehmen?
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: So 30.03.08 21:01 
Ok hab ne query auf die oberflche gesetzt und da bei beforepost das mit dem locate reingeschrieben, aber wie funkt das jetzt mit der query? muss doch bestimmt noch mehr einstellungen vornehmen?

kommt nämlich keine messagebox wenn ich jetzt nen doppelten datensatz eintrage und wenn ich die query aktivieren will kommt immer keine sql befehle vorhanden?
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.