AutoIncrement
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
AutoIncrement
Kann man eigentlich (DD ist eingebunden) über normale DBF einen automatischen Zähler für eine ID einbauen, der vom ADS dann auch verwaltet wird, oder geht das nur mit ADT oder händisch?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: AutoIncrement
Manfred,
solange Du im ADS mit der FOXCDX arbeitest geht das. Feldtyp "S".
Jan
solange Du im ADS mit der FOXCDX arbeitest geht das. Feldtyp "S".
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Äh, die FOXCDX hat doch erstmal nichts mit dem ADS zu tun, oder?
Das entscheidende ist, dass es den Datentyp geben muß. Und wenn im DataDictionary bzw. in den darin befindlichen Tabellen der TableType "VFP" (=Visual Fox Pro) oder "ADT" ausgewählt ist, geht das. Der zugehörige Datentyp ist "autoinc".
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: AutoIncrement
Uli,
es geht doch hier um dbf im ADS, nicht um ADT. Darum fragt Manfred ja explizit. Und wenn er FOXCDX in den ADS einbindet, kann der das machen wie ich beschrieben hatte. Das hat ja nicht direkt etwas mit ADS zu tun.
Jan
es geht doch hier um dbf im ADS, nicht um ADT. Darum fragt Manfred ja explizit. Und wenn er FOXCDX in den ADS einbindet, kann der das machen wie ich beschrieben hatte. Das hat ja nicht direkt etwas mit ADS zu tun.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: AutoIncrement
Nein was?
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: AutoIncrement
Nein, hat nix mit ADS zum Tun. Fox kann Autoinc implizit, mit oder ohne ADS.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
kann man das denn auch nachträglich ändern? Also wenn ich jetzt die FOXCDX DBF in ein DD gepackt habe, über SQL befüttern möchte und deshalb die bisher selbstgebaute Hochzählroutine nicht mehr nutzen kann/möchte. Was stelle ich da ein? Ich sehe derzeit nur GUID als Data Type. Aber kommt da nicht nur einfach ein "Zufallsstring" rein? Und wenn, wo trage ich dann den Startwert ein, weil der ja schon im Laufe der Zeit hochgezählt wurde und somit nicht mehr bei 1 anfangen darf.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Ich meine, Du irrst Dich da. Fox kann Autoinc nicht, wohl aber Visual FoxPro.
Zumindest muß man im Data Dictionary beim Anlegen einer Tabelle als Tabellentyp VFP angeben. Bei CDX gibt es den Feldtypen "Autoinc" nicht.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Was für ein Tabellentyp wird denn im ARC bei diesen Tabellen angezeigt?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: AutoIncrement
Uli,
ich arbeite fast ausschließlich mit FOXCDX. Und in einigen Anwendungen mit Feldtyp "S". Das ist sicher kein ganz so stabiler Autoinkrement wie das in SQL z. B. gemacht wird. Einfach weil der Zähler durch die DBE gesteuert wird, und man notfalls daran vorbei arbeiten kann. Aber es ist letztendlich doch ein Autoinkrement, wenn man es richtig macht. Und ob dann die dbf im ADS liegt oder nicht ist egal.
Jan
ich arbeite fast ausschließlich mit FOXCDX. Und in einigen Anwendungen mit Feldtyp "S". Das ist sicher kein ganz so stabiler Autoinkrement wie das in SQL z. B. gemacht wird. Einfach weil der Zähler durch die DBE gesteuert wird, und man notfalls daran vorbei arbeiten kann. Aber es ist letztendlich doch ein Autoinkrement, wenn man es richtig macht. Und ob dann die dbf im ADS liegt oder nicht ist egal.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Hallo Jan,
ich vermute, dass die FOXCDX nicht nur das Foxbase-Datenformat sondern auch Visual Foxbase Pro Format kann.
Aber Du hast schon die Tabelle im DataDictionary, oder? Bitte schau darin nach, was im Data Architekten für ein Datentyp bei diesem Feld angezeigt wird und was für ein Datentyp für die Tabelle angezeigt wird. Das interessiert mich sehr.
Uli
ich vermute, dass die FOXCDX nicht nur das Foxbase-Datenformat sondern auch Visual Foxbase Pro Format kann.
Aber Du hast schon die Tabelle im DataDictionary, oder? Bitte schau darin nach, was im Data Architekten für ein Datentyp bei diesem Feld angezeigt wird und was für ein Datentyp für die Tabelle angezeigt wird. Das interessiert mich sehr.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
mich auch, zumal ich mit meiner Zwischenlösung heute kräftig auf die Schnauze gefallen bin.
Ich führe derzeit eine Extratabelle, in der alle ID gespeichert werden. Diese öffne ich immer für einen kurzen Moment exclusiv, schreibe dann die neue Nummer rein und schließe sie wieder. Das habe ich jetzt mit einem SQL Befehl nachgebaut. Aber der ADS cached die DBF jetzt, weil ich die über SQL anspreche und verhindert somit, das andere die exclusiv öffnen können. Wattn Mist auch.
Ich führe derzeit eine Extratabelle, in der alle ID gespeichert werden. Diese öffne ich immer für einen kurzen Moment exclusiv, schreibe dann die neue Nummer rein und schließe sie wieder. Das habe ich jetzt mit einem SQL Befehl nachgebaut. Aber der ADS cached die DBF jetzt, weil ich die über SQL anspreche und verhindert somit, das andere die exclusiv öffnen können. Wattn Mist auch.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Exclusiv ist bei SQL keine gute Lösung . Mit Hilfe von Joachim habe ich dafür eine seit vermutlich 10 Jahren 100% funktionierende Lösung! Bei Interesse suche ich die raus und veröffentliche sie hier.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
Uli,
LESEN.....
LESEN.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Warum schreist Du so?
Und was soll ich lesen, falls Du das meinst?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
weil ich schrieb, das ich es bisher exclusiv geöffnet habe.
Aber jetzt sehe ich ein, das Du den Satz etwas falsch betont gelesen haben wirst und deshalb meintest, ich würde es mit SQL exclusiv versuchen. Aber ich wußte gar nicht, das sowas auch geht.
Aber jetzt sehe ich ein, das Du den Satz etwas falsch betont gelesen haben wirst und deshalb meintest, ich würde es mit SQL exclusiv versuchen. Aber ich wußte gar nicht, das sowas auch geht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Ach so. Aber ohne exclusiv muß man einigen Aufwand betreiben, damit es nicht im Multi-User-Betrieb kracht und die gleiche Id mehrfach vergeben wird.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
deshalb ja auch meine Frage hier mit dem AutoIncrement. Ist natürlich immer besser sowas dem Server zu überlassen. Also habe ich es erstmal wieder rückgängig gemacht und lasse mir eine bessere Lösung einfallen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: AutoIncrement
wenn man es mit einem SQL macht, muss man eine Transaction drumrumsetzen, ist dann wie exclusiv ausgeführt.
Hier als Funktion
create function NextId() returns integer
begin
declare id integer;
Begin;
update <table> set id = id +1 where ...;
id = (select id from <table> where ... );
commit;
return @id;
end;
Kann man dann so ansprechen
insert into <table>(id, ....)
values (NextID(), ....);
Hier als Funktion
create function NextId() returns integer
begin
declare id integer;
Begin;
update <table> set id = id +1 where ...;
id = (select id from <table> where ... );
commit;
return @id;
end;
Kann man dann so ansprechen
insert into <table>(id, ....)
values (NextID(), ....);
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
legt man die dann im Architekten ab unter Functions, oder wie war das gemeint?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: AutoIncrement
Das SQL einmalig im ARC ausführen, es wird die Function erzeugt:
Danach kannst du wie beschrieben darauf zugreifen.
Code: Alles auswählen
create function NextId() returns integer
begin
declare id integer;
Begin;
update <table> set id = id +1 where ...;
id = (select id from <table> where ... );
commit;
return @id;
end;
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: AutoIncrement
Wenn es nicht um numerische IDs geht, würde ich grundsätzlich dringend empfehlen, nicht (mehr) mit Zählern zu arbeiten, sondern mit UIDs/UUIDs. Das sind automatisch generierte, ein-eindeutige (bei UUIDs sogar weltweit eindeutige!), zeichenbasierte IDs, die man in Xbase++ mit einem simplen Aufruf von UuidToChar(UuidCreate()) erzeugen lassen kann. Da spielt dann auch keine Rolle mehr, wo irgendein Zähler stand oder so. Aber das ist wirklich nur für das interne Matching geeignet. Bei Auftrags- und Kundennummern und solchem Zeug muss man natürlich anders arbeiten.
Herzlich,
Tom
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: AutoIncrement
Marcus, aber dadurch verhinderst Du nicht, dass in einer Multiuser-Umgebung die gleiche Id mehrfach zurückgegeben werden kann!Marcus Herz hat geschrieben: ↑Di, 02. Jun 2020 13:30 wenn man es mit einem SQL macht, muss man eine Transaction drumrumsetzen, ist dann wie exclusiv ausgeführt.
Hier als Funktion ...
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: AutoIncrement
Hi Tom,
ich nutze die wirklich nur um Verknüpfungen zu erstellen zwischen Tabellen. Irgendwie kann man sowas m.E. besser mit normalem Blick erkennen, wenn man mal was nachschauen und vergleichen muß. Aber vielleicht sollte ich mein bisherige Konzept wirklich mal überdenken. Änderbar wäre das ja sofort. Man muß nur den Feldtyp von numerisch auf Charakter umstellen, breiter machen evtl. und dann sagen:"Ab jetzt nur noch UID". Die alten Nummern können ja weiterhin bestehen bleiben. Hätte den Vorteil, das man keine gedöns herum mehr hat mit der Verwaltung der Nummern etc. Hm, ist vielleicht doch keine so schlechte Idee
ich nutze die wirklich nur um Verknüpfungen zu erstellen zwischen Tabellen. Irgendwie kann man sowas m.E. besser mit normalem Blick erkennen, wenn man mal was nachschauen und vergleichen muß. Aber vielleicht sollte ich mein bisherige Konzept wirklich mal überdenken. Änderbar wäre das ja sofort. Man muß nur den Feldtyp von numerisch auf Charakter umstellen, breiter machen evtl. und dann sagen:"Ab jetzt nur noch UID". Die alten Nummern können ja weiterhin bestehen bleiben. Hätte den Vorteil, das man keine gedöns herum mehr hat mit der Verwaltung der Nummern etc. Hm, ist vielleicht doch keine so schlechte Idee
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!