Autor Beitrag
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Fr 23.05.03 07:22 
guden all

hab die kombo benutzt auf anraten von Udontknow ... nun finde ich zum erbrechen aber nicht , wie ich ein feld per generator generieren kann...

wenn das einer was wäre super ;)

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 23.05.03 12:57 
Hiho!

Also: Ein Generator ist ja einfach nur ein Mechanismus auf DB-Ebene, um eine Zahl zu "generieren". Da du aber zunächst nur eine Clientdatenmenge hast, die noch gar nicht zur DB wandert, wenn du nicht ApplyUpdates aufrufst, hast du logischerweise noch keine ID, wenn du die Zuweisung weiterhin per Trigger realisieren willst. Da müsstest du nach dem Posten direkt ApplyUpdate für jeden einzelnen Datensatz aufrufen.

Ich verfahre da anders. Ich erstelle auf der Interbase-DB eine Prozedur, die ich in Delphi dann per Dataset abrufen kann. Hier mal der Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
CREATE PROCEDURE Get_GenID(
    ID_ANZAHL INTEGER)
RETURNS (
    ID_NO INTEGER)
AS
BEGIN
  ID_NO = GEN_ID(GLB_ID_NO,ID_Anzahl);
  suspend;
 END


Einen Generatorwert kannst du dann mit einer einfachen SQL-Abfrage abrufen:

select * from Get_GenID(1) liefert dir dann also eine neue ID (Machst du aus der 1 eine 20, erhälst du die zwanstigste GenID zurück, die erste ist dann logischerweise Wert-19. So kann man sich automatisch einen Pool an Ids reservieren).
Sobald du diesen Wert hast, musst du ihn nur noch dann in deinem Dataset in AfterInsert einfügen.

Nachtrag:

Kann es sein, daß du "Kompo" anstelle von "Kombo" meinst? :wink:
Und ich war am überlegen, wann wir über ComboBoxen gesprochen hatten...

Cu, :)
Udontknow
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 27.05.03 07:31 
ich werde es versuchen

also dann sage ich einfach, im afterPost unter dem Feld ID der tabelle Firma , das der Diese prozeude aufrufen soll und einfügen soll?....

erweitert sich der wert auch immer um 1?, also nicht das ich da 10 mal 1 habe das ist nämlich nicht möglich

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 27.05.03 07:37 
Hiho!

Du musst es im BeforePost-Ereignis machen, Afterpost ist zu spät.

Der Generator erhöht sich genau um den Wert, den du an die Prozedur übergibst. Bsp:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Generator-Stand: 0

select * from Get_Gen_ID(1)
Rückgabe 1
Generatorstand 1

select * from Get_Gen_ID(3)
Rückgabe 4 (da du 3 Schlüssel angefordert hast, kannst du also 2,3 und 4 nun vergeben)
Generatorstand 4


Cu,
Udontknow
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 27.05.03 07:42 
ok verstanden... nur npch ein verständins problem ...

wenn ich jetzt in before das einfüge ... dann ändert der doch imemr automatisch den anforderungswert oder??

also sagen wa einfach datensatz 1 -----> select * from Get_Gen_ID(1)
datensatz 2 ----> select * from Get_Gen_ID(2)
das ändert sich dann ja??oder muss ich das so machen?
wenn du mir das sagst habe ich es verstanden ;)

i:= i+1
select * from Get_Gen_ID(i);

bsp.

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 27.05.03 08:02 
Nein, nein! Der Generatorwert erhöht sich um den Wert, den du bei Get_Gen_ID angibst!
Du rufst für einen Datensatz immer nur Get_Gen_ID(1) auf. Das liefert dir einen Schlüssel.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
select * from Get_GEN_ID(1)
Rückgabe 1

select * from Get_GEN_ID(1)
Rückgabe 2

select * from Get_GEN_ID(1)
Rückgabe 3


Cu,
Udontknow
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 27.05.03 08:04 
ahhhhh allet klar dank dir

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mi 28.05.03 09:09 
wieso steckt ihr das denn in eine eigene prozedur?
Man kann doch auch

Select Gen_ID(Gen_Name, Anzahl) FROM RDB$Database;

in einem execute query machen. Also, wozu denn die Prozedur?

gruß
Ken
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 28.05.03 11:27 
Wahrscheinlich, weil ich diesen Kniff nicht kannte. :wink: Aber man lernt ja nie aus. Danke für den Hinweis! :)

Nachtrag: In manchen Fällen ist es vielleicht schön, vorher noch überprüfen zu können, ob der Generator eine bestimmte Grenze überschreitet (z.B. einen dem Standort zugeordneten Nummernkreis, um ordentlich replizieren zu können).

Cu,
Udontknow