[gelöst]mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 13:44

Guten Morgen @ all,

Hab ne ganz blöde Frage, ist es irgendwie möglich, in einer Tabelle mehrere Datensätze mit dem gleichen Primärschlüssel zu schreiben?
Denke das dies mein Problem ist..

Rechne in einer Temporären Tabelle Posten zusammen..
Erst nur je Artikel - klappt wunderbar...
Dann je Artikel und Charge - geht gar nicht, egal was ich mache, der "alte" Datensatz wird immer überschrieben.
Gibts da nen Trick wie man das übergehen kann??
Oder geh ich die Geschichte ganz falsch an?

Bin noch ein ziemliches Greehorn...

Gruß Matthias
Zuletzt geändert von himi81 am 13. Januar 2009 17:08, insgesamt 1-mal geändert.

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 14:00

Es gibt keine Möglichkeit, in einer Tabelle zwei oder mehr Datensätze mit gleichen Primärschlüsselwerten zu schreiben, da gibt es auch keinen Trick.

Wenn du aber deine Frage etwas weiter ausführst, wird dir sicher jemand dabei helfen können, dein Problem auch mit gültigen Primärschlüsselwerten in den Griff zu bekommen.

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 14:22

himi81 hat geschrieben:Hab ne ganz blöde Frage, ist es irgendwie möglich, in einer Tabelle mehrere Datensätze mit dem gleichen Primärschlüssel zu schreiben?

Nein, aber warum glaubst du, dass du das machen müsstest?

So wie ich dich verstehe, möchtest du Summen bilden. Das kannst du alles mit deinem temp. Record abbilden.
Vorgehensweise:
Du hast einen Artikel und eine Menge in einem Record (RecNeu).
Du schaust zuerst, ob dieser Artikel (oder die Kombination, auf die es dir ankommt) im temp. Record vorhanden ist. Wenn ja, hole diesen temp. Record und erhöhe die dortige Menge um die Menge von RecNeu und führe ein MODIFY aus.
Nur wenn diese Kombination noch gar nicht vorhanden war, führe ein INSERT aus.

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 14:39

So würde das Ganze dann aussehen, wenn du ein Feld summieren möchtest. Das ist in etwa die Logik, die auch Natalie verwendet.

Code:
IF NOT temp.GET('PRIMÄRSCHLÜSSEL') THEN BEGIN
  temp.INIT;
  temp.primarykey := 'PRIMÄRSCHLÜSSEL';
  temp.INSERT(TRUE);
END;
temp.field := temp.field + 'ZUSÄTZLICHER WERT';
temp.MODIFY(TRUE);

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 14:49

Sebastian Pfliegel hat geschrieben:Das ist in etwa die Logik, die auch Natalie verwendet.

Nee, genau so ;-)

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 15:20

Hallo himi81,

kannst du deine temporäre Tabelle designen, falls ja, erweitere die Tabelle um ein Option-Feld, das den Typ deines eingefügten Datensatzes beschreibt, z.B. Artikel, Charge,...
Dieses Feld fügst du dann deinen Primärschlüssel hinzu (ob am Anfang, oder am Ende hängt von deiner gewünschten Sortierung ab). Beim Einfügen der Datensätze musst du dann nur noch bei jedem Datensatz das Typ- Feld füllen, bevor du ihn in deine Tabelle einfügst.

Gruß, Fiddi

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 15:52

Ich denke so komm ich nicht weiter, das mit dem Option feld ist keine Schleche Idee, weiß nur grad nicht wie ich das angreifen
soll...

So wie die anderen gesagt haben habe ich das schon gemacht, auch mit get usw...
Kommt immer nur eine Zeile bei raus, diese wird dann immer und immer wieder überschrieben...

Ich schreib euch mal meinen Quellcode, ihr les'd den ja wie die Tageszeitung:


//Hier filter ich die Artikelposten ab....
Code:
Bilanz_1.RESET;
Bilanz_1.SETCURRENTKEY(Bilanz_1."Document No.");
Bilanz_1.SETRANGE(Bilanz_1."Entry Type",(Bilanz_1."Entry Type"::Consumption));
Bilanz_1.SETFILTER(Bilanz_1."Posting Date",GETFILTER("Date Filter"));
Bilanz_1.SETFILTER(Bilanz_1."Routing No.",GETFILTER(Arbeitsplanfilter));
Bilanz_1.SETFILTER(Bilanz_1."Document No.",(FAFilter));


IF Bilanz_1.FINDFIRST THEN
REPEAT;

Bilanz_Temp.RESET;

 Bilanz_Temp.SETRANGE(Bilanz_Temp.Artikelummer,Bilanz_1."Item No.");
  Bilanz_Temp.SETFILTER(Bilanz_Temp.Charge,'%1',(Bilanz_1."Lot No."));
 
    IF NOT Bilanz_Temp.FINDFIRST THEN
    Bilanz_Temp.INIT;
    Bilanz_Temp.Artikelummer:= Bilanz_1."Item No.";
    Bilanz_Temp.Artikelbezeichung:= Bilanz_1.Description;
    Bilanz_Temp.Charge:=Bilanz_1."Lot No.";
 
   IF  Bilanz_Temp.INSERT(TRUE) THEN BEGIN
  Testbool := TRUE;

// Wenn ein Datensatz Artikelnummer und Charge nicht da ist füge diesen ein.

Code:
END;

Bilanz_Temp.RESET;


// Wenn kein Datensatz mit der Artikelnummer gefunden wird, füge diesen ein...
Code:
 Bilanz_Temp.SETFILTER(Bilanz_Temp.Artikelummer,'%1',(Bilanz_1."Item No."));
 
 IF NOT Bilanz_Temp.FINDFIRST THEN BEGIN;
    Bilanz_Temp.INIT;
    Bilanz_Temp.Artikelummer:= Bilanz_1."Item No.";
    Bilanz_Temp.Artikelbezeichung:= Bilanz_1.Description;
    Bilanz_Temp.Charge:=Bilanz_1."Lot No.";

    IF  Bilanz_Temp.INSERT(TRUE) THEN
  Testbool := TRUE;
  END;

  UNTIL Bilanz_1.NEXT = 0;
Zuletzt geändert von Natalie am 1. Februar 2009 17:37, insgesamt 1-mal geändert.
Grund: Code-Tags eingefügt

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 15:56

Sebastian Pfliegel hat geschrieben:So würde das Ganze dann aussehen, wenn du ein Feld summieren möchtest. Das ist in etwa die Logik, die auch Natalie verwendet.

Code:
IF NOT temp.GET('PRIMÄRSCHLÜSSEL') THEN BEGIN
  temp.INIT;
  temp.primarykey := 'PRIMÄRSCHLÜSSEL';
  temp.INSERT(TRUE);
END;
temp.field := temp.field + 'ZUSÄTZLICHER WERT';
temp.MODIFY(TRUE);


Wenn du das denn in eine "Scheife baust, und sich der 'PRIMÄRSCHLÜSSEL') wiederholt, überschriebt er beim nächsten Datensatz den ZUSÄTZLICHER WERT....
Soweit wie dus geschieben hat funktioniert das auch bei mir, habe nur mehere Artikelposten mit der Gleichen Atikelnummer,
und der geichen Chargenummer, und dann kommen in der Scheife wieder Posten mit der gleichen Artikelnummer und ABWEICHENDER Chargennummer, in diesem Fall soll ein neuer Datensatz erzeugt werden.

Gruß Matthias

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 16:30

Dein Primärschlüssel besteht doch aus mehreren Attributen/Feldern. Wieso filterst du dann immer nur auf ein Attribut und machst dann den FINDFIRST?. Du möchtest doch den temporären Datensatz finden mit der bestimmten Artikelnr. und Chargennr.. Dann müsstest du doch auf beides filtern. Der Setrange/Setfilter ist bei Primärschlüsselattributen nicht ganz geeignet. Hier ist der GET besser. Er liefert den eindeutigen Datensatz und "springt" auf ihn.

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 16:40

Hallo Himi81,


kannst du mal die Schlüssel der Tabelle Bilanz_temp ausgeben. Ich meinte, du solltest der Bilanz_temp das von mir beschriebene Feld einfügen. Vor dem Bilanz_temp.Insert machst du dann noch die Zuweisung Bilanz_temp.Typ:= Bilanz_temp.Typ::Artikelposten. Wenn deine Tabelle Bilanz_1 allerdings die Artikelposten sind, nützt dir das gar nichts. In der Artikelposten ist eine Laufende Nr. der Primärschlüssel, d.h. ein Artikel kann in den Artikelposten theoretisch beliebig oft vorkommen, da nützt das Option-Feld nur teilweise etwas. Wenn du alle Artikelposten deines Artikels in deiner Bilanz_temp ablegen willst, musst du auch hier die "Laufende Nr." in den Primärschlüssel einfügen, und aus den Artikelposten übernehmen. Das Option-Feld kannst du dann immer noch benutzen, wenn du aus mehreren Postentabellen Artikelinfos mit "Laufender Nr." übernehmen willst, um zu unterscheiden aus welcher Postentabelle die Daten kommen.

Gruß, Fiddi

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 16:43

Hier ist der GET besser. Er liefert den eindeutigen Datensatz und "springt" auf ihn.[/quote]

Hatte auch erst alles mit GET aufgebaut, funktioniert genauso... derzeit zumindest noch *G*

Mit diesesen ganzen Schlüsseln bin ich noch irgendwie nicht wirklich gut bewandert.

1. Wo kann ich mir die Attribute des Primärschlüssels ansehen?

2. Wie setzte ich einen GET Befehl auf 2 Felder gkleichzeitig?

Danke für euere Hilfe!

Gruß Matthias

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 16:48

himi81 hat geschrieben:1. Wo kann ich mir die Attribute des Primärschlüssels ansehen?

Object Desiger -> Table (passende auswählen)-> Button Design -> Ansicht -> Keys -> 1. Zeile

2. Wie setzte ich einen GET Befehl auf 2 Felder gkleichzeitig?

Code:
Record.GET("Feld 1", "Feld 2", ...);

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 16:53

himi81 hat geschrieben:1. Wo kann ich mir die Attribute des Primärschlüssels ansehen?


Wenn du in einer Tabelle bist kannst du auch auf Sortieren klicken. Der oberste Eintrag ist auch der Primärschlüssel.

Re: mehrere Datensätze mit gleichem Primärschlüssel??

13. Januar 2009 17:08

Danke an euch alle!!

ES geht!

Der Springende Punkt , oder das hüfende Komma, war dass ich die Chargennummer noch in den Primärschlüssel schreiben musste..
Echt blöd ne?? Anfängerfehler...

Trotzdem danke an Alle!

Hier noch mal der fertige Quellcode :


//Hier filter ich die Artikelposten ab....
Code:
Bilanz_1.RESET;
Bilanz_1.SETCURRENTKEY(Bilanz_1."Document No.");
Bilanz_1.SETRANGE(Bilanz_1."Entry Type",(Bilanz_1."Entry Type"::Consumption));
Bilanz_1.SETFILTER(Bilanz_1."Posting Date",GETFILTER("Date Filter"));
Bilanz_1.SETFILTER(Bilanz_1."Routing No.",GETFILTER(Arbeitsplanfilter));
Bilanz_1.SETFILTER(Bilanz_1."Document No.",(FAFilter));


IF Bilanz_1.FINDFIRST THEN
REPEAT;

 Bilanz_Temp.RESET;

IF NOT Bilanz_Temp.GET(Bilanz_1."Item No.",Bilanz_1."Lot No.") THEN BEGIN;
    Bilanz_Temp.INIT;
    Bilanz_Temp.Artikelummer:= Bilanz_1."Item No.";
    Bilanz_Temp.Artikelbezeichung:= Bilanz_1.Description;
    Bilanz_Temp.Charge:=Bilanz_1."Lot No.";
 
   IF  Bilanz_Temp.INSERT(TRUE) THEN BEGIN
  Testbool := TRUE;
 END;
END;

 UNTIL Bilanz_1.NEXT = 0;
Zuletzt geändert von Natalie am 1. Februar 2009 17:38, insgesamt 1-mal geändert.
Grund: Code-Tags eingefügt