Autor Beitrag
EddieMcCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 17.02.08 20:00 
habe diesen quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm2.BitBtn2Click(Sender: TObject); 
begin 
form3.Table1.Insert; 
form3.Table1.FieldValues['Datum'] := dbedit2.text; 
form3.Table1.FieldValues['Stunde'] := DBLookupComboBox3.text; 
form3.Table1.FieldValues['Haus'] := DBLookupComboBox1.text; 
form3.Table1.FieldValues['Raum'] := DBLookupComboBox2.text; 
form3.Table1.FieldValues['Klassenstufe'] := DBLookupComboBox4.text; 
form3.Table1.FieldValues['Klasse'] := DBLookupComboBox5.text; 
form3.Table1.FieldValues['Fach'] := DBLookupComboBox6.text; 
form3.Table1.FieldValues['Materialien'] := DBLookupComboBox7.text; 
form3.Table1.FieldValues['Lehrer'] := dbedit1.text; 
form3.Table1.Post; 
end;


jetzt soll wenn die ersten vier fieldvalues bereits schon hintereinander in einem datensatz vorhanden sind eine fehlermeldung erscheinen und nicht der gleiche datensatz noch einmal in der tabelle auftachen.
hoffe jemand hat eine ahnung ich weis einfach nich wie ich dass machen soll.
aber trotzdem schon mal danke an alle.

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
icho2099
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101
Erhaltene Danke: 12

WIN XP, WIN 7, WIN 10
Delphi 6 Prof, Delphi 2005, FPC
BeitragVerfasst: So 17.02.08 20:32 
da musst du wohl erst mal in Table1 nachschauen, ob es schon einen Satz mit den Werten gibt und dann entscheiden was passieren soll.

Die Methode locate von Table1 sollte dir helfen:

ausblenden Delphi-Quelltext
1:
2:
3:
function Locate(const KeyFields: string; 
const KeyValues: Variant; 
Options: TLocateOptions): Boolean;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
EddieMcCool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 17.02.08 20:40 
ja aber das nützt mir ja nichts es sind enorm viele datensätze und er soll ja bei der eingabe erkennen ob dieser datensatz bis zum 4. wert schon vorhanden ist.aber trotzdem danke.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 17.02.08 22:31 
wie wär's damit, die ersten vier felder als primary keys zu spezifizieren? dann macht das die db von alleine...
GericasS
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 540

Windows Vista Home Premium
D2010, VisualStudio2008
BeitragVerfasst: Mo 18.02.08 08:01 
user profile iconEddieMcCool hat folgendes geschrieben:
habe diesen quelltext

nutze demnächst bitte die Delphi-Tags damit alles ein wenig übersichtlicher wird !


LG

GericasS

Moderiert von user profile iconNarses: Quote gekürzt

_________________
Alexander N.
Neue Bewaffnung Amilo xi2428 T9300
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Mo 18.02.08 09:19 
user profile iconGrenzgaenger hat folgendes geschrieben:
wie wär's damit, die ersten vier felder als primary keys zu spezifizieren? dann macht das die db von alleine...

Außerdem dürfte eine Selectanweisung mit einer entsprechenden WHERE-Bedingung nicht sehr schwer aufzusetzen sein.
EddieMcCool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 22.02.08 20:59 
ja sorry ich kann leider nicht viel mit den hilfestellungen anfangen ich bin blutiger anfänger. wäre echt nett falls jemand mir das mal einfacher erklären könnte.

habe mich aber trotzdem daran versucht. das mit dem primärkey klappt zwar aber dann kann ich gar kein wert mehr eingeben der schon vorhanden ist. er soll aber nur nicht speichern wenn alle vier in einem einzigen datensatz hintereinander schon mal vorhanden sind hoffe jemand kann mir helfen.
EddieMcCool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 23.02.08 21:02 
hat den niemand mitleid?
EddieMcCool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 24.02.08 17:52 
hat noch jemand ne idee?
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 24.02.08 18:48 
Versuchs mal so:

ausblenden 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:
var Query: TAdoQuery; // oder ähnliches
    Exists: Boolean;
begin
  Query:= TAdoQuery.Create(Nil);
  try
    Query.SQL.Text:= 'Select Count(*) as CNT from TableName where spalte1= :wert1 and spalte2 = :wert2';
    Query.ParamByName('Wert1').Value:= '1';
    Query.ParamByName('Wert2').Value:= '2';
    Query.Connection:= <deine Verbindungskomponente>;
    try
      Query.Open;
      Exists:= Query.FieldByName('CNT').asInteger>0;
    except
      Exists:= False; // hier eigentlich nur, wenn SQL fehlerhaft
    end;
  Finally
    Query.Free;
  end;
  if not Exists then
  // hier Append oder Insert
  else
  // hier Locate(..) und dann Edit;
end;


alles klar?
grez
Msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
EddieMcCool Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 24.02.08 19:13 
sorry funzt irgendwie nicht bereits bei der deklaration von query spinnt er
icho2099
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101
Erhaltene Danke: 12

WIN XP, WIN 7, WIN 10
Delphi 6 Prof, Delphi 2005, FPC
BeitragVerfasst: So 24.02.08 20:12 
Wie genau stellst du dir denn "bei der Eingabe schon merken" vor ?

Man kann jedesmal, wenn ein Zeichen für einen der vier Werte eingegeben wird,
prüfen, ob es bereits einen solchen Satz gibt.

Man kann auch erst alle vier Werte eingeben und dann prüfen.

Man kann die Prüfung parallel in einem Thread ausführen, dann wird die Eingabe
nicht unterbrochen, die Programmierung ist dann etwas aufwendiger, du musst u.a.
darauf achten, dass der Thread seine eigene Session verwendet.

oder du machst es eben doch mit locate() in deiner Methode BitBtn2Click()

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm2.BitBtn2Click(Sender: TObject);   
begin   
  If Table1.Locate('Datum;Stunde;Haus;Raum',
                    VarArrayOf([dbedit2.text,DBLookupComboBox3.Text,
                    DBLookUpComboBox1.Text,DBLookUpComboBox2.Text]),
                    [loCaseInsensitive]) then begin
    (* Fehlermeldung anzeigen *)
    MessageDlg('Satz bereits vorhanden',mtWarning,mbOK,0);
  end else begin
    form3.Table1.Insert;   
    form3.Table1.FieldValues['Datum'] := dbedit2.text;   
    form3.Table1.FieldValues['Stunde'] := DBLookupComboBox3.text;   
    form3.Table1.FieldValues['Haus'] := DBLookupComboBox1.text;   
    form3.Table1.FieldValues['Raum'] := DBLookupComboBox2.text;   
    form3.Table1.FieldValues['Klassenstufe'] := DBLookupComboBox4.text;   
    form3.Table1.FieldValues['Klasse'] := DBLookupComboBox5.text;   
    form3.Table1.FieldValues['Fach'] := DBLookupComboBox6.text;    
    form3.Table1.FieldValues['Materialien'] := DBLookupComboBox7.text;   
    form3.Table1.FieldValues['Lehrer'] := dbedit1.text;   
    form3.Table1.Post;
  end;
end;