Autor Beitrag
AdrianK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 56

Kubuntu 9.04 Jaunty
Mono 2.4 + MonoDevelop 2.0; Qt Creator
BeitragVerfasst: Do 21.08.08 13:12 
Hallo,

ich programmiere gerade eine einfache Adressverwaltung in C#. Die Daten speichere ich in einer SQLServer Compact Datenbank. Jeder Datensatz hat eine eigene ID die automatisch zugeordnet wird (mit Identität: true, IdentityIncrement:1 und IdentitySeeed:1) Das navigieren in der Datenbank funktioniert damit sehr gut, ebenso das berbeiten, speichern und erstellen von Einträgen. Nur das Löschen funktioniert nicht so wie es sollte. Wenn ich per SQL einen Eintrag mitten in der Datenbank lösche bleibt sozusagen ein ID "Loch" übrig, das heist die ID Liste wird unterbrochen (1,2,Hier ist das loch, 4,5..) Somit, kann ich nicht mehr ohne Fehler navigieren.
Wie kann ich also SQL veranlassen, die IDs neu zu berechnen/zuzuordnen? Danke schonmal! (Ich hoffe ich habs verständlich erklärt...)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 21.08.08 13:21 
Was hat die Lückenlosigkeit der ID's mit der Navigationsfähigkeit zu tun?
Die ID sollte nur zur eindeutigen Identifikation eines Datensatzes dienen und sonst nichts!

Primary Keys zu ändern ist eigentlich immer eine schlechte Idee. Wenn diese als Fremdschlüssel in anderen Tabellen benutzt werden sind die Verbindungen nachher falsch oder du müßtest per kaskadierenden Updates durch alle Tabellen rennen und die geänderten ID's nachziehen. Ganz schlecht.
AdrianK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 56

Kubuntu 9.04 Jaunty
Mono 2.4 + MonoDevelop 2.0; Qt Creator
BeitragVerfasst: Do 21.08.08 14:12 
Zum Navigieren habe ich zwei Buttons, und eine Prozedur zum darstellen eines beliebigen datensatzes mit dessen ID. Dann habe ich in einer Variable die ID des aktuell dargestellten Datensatzes, und beim Klick auf z.B. "weiter" wird dann die Prozedur zum darstellen des Datensatzes aufgerufen. (Zur ID wird 1 dazugezählt...) So funktioniert das auch gut, doch leider geht dies nicht mehr, wenn die IDs eine Lücke haben. Wie könnte man das mit dem Navigieren sonst noch lösen?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 21.08.08 14:24 
Mit einer etwas komplizierten SQL-Query könntest du nach der nächsten ID suchen - normalerweise lädt man aber einfach die gesamten Daten auf einmal in ein DataSet, zum Navigieren benötigst du dann keine weiteren DB-Anfragen mehr. Wenn es nicht gerade Zehntausende von Datensätzen sind, sollte das problemlos funktionieren und mit einem BindingNavigator ist die Navigation gleich dabei.
AdrianK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 56

Kubuntu 9.04 Jaunty
Mono 2.4 + MonoDevelop 2.0; Qt Creator
BeitragVerfasst: Do 21.08.08 14:31 
OK, das mit dem DataSet werd ich mal probieren (bis jetzt hab ich alles ohne Komponenten, nur mit .NET Klassen gemacht...)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 21.08.08 14:37 
Probier's aus, es macht wirklich Spaß :D . Der Wizard unter "Daten -> Neue Datenquelle" erledigt das meiste für dich. Dann musst du nur noch die gewünschte Tabelle auf die Form ziehen und fertig.
AdrianK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 56

Kubuntu 9.04 Jaunty
Mono 2.4 + MonoDevelop 2.0; Qt Creator
BeitragVerfasst: Do 04.12.08 14:02 
Jep, hast recht! Ist wirklich viel einfacher so :)