AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensatznummern für ein DBGrid

Datensatznummern für ein DBGrid

Ein Thema von Thomas F · begonnen am 16. Sep 2008 · letzter Beitrag vom 17. Sep 2008
Antwort Antwort
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#1

Datensatznummern für ein DBGrid

  Alt 16. Sep 2008, 23:42
Datenbank: MYBase • Version: ? • Zugriff über: Clientdataset
Wie kann man jedem Eintrag in einer DBGrid chronologisch eine Nummer geben

Mit dem Code hab ich es probiert

Delphi-Quellcode:

Clientdataset1Nr.asinteger := Clientdataset1.recno ;
Funktioniert aber nicht weil die Tabelle nach dem Feld Clientdataset1Feld1 sortiert wird

und dann die Nummern durcheinander geraten.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Datensatznummern für ein DBGrid

  Alt 16. Sep 2008, 23:46
Benutze die ID-Spalte in deiner Tabelle. Wenn du keine hast, hast du das grundlegende Datenbankdesign nicht verstanden.
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#3

Re: Datensatznummern für ein DBGrid

  Alt 16. Sep 2008, 23:53
Delphi-Quellcode:
Clientdataset2.Indexdefs

Default_Order

Changeindex
meinst du das ?

Wahrscheinlich mit ChangeIndex , oder ?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Datensatznummern für ein DBGrid

  Alt 16. Sep 2008, 23:55
Ne, ich meine das du einfach eine Spalte in deine Tabelle aufnehmen sollst, die eine Zahl enthält. Das sollte dann vielleicht auch dein Primary-Key sein und eventuell ein Autofeld.

Edit...
So ich habe nochmal etwas ausprobiert.

Bei folgender Kette:
Connection->SQLDataSet->DataProvider1->ClientDataSet1->DataProvider2->ClientDataSet2->DataSource->DBGrid
kann das RecNo verwendet und ein neues Feld in die Anzeigemenge einführt werden.

Im ClientDataSet2 kann dann ein neues Feld angelegt werden (ID, Zahl) und folgendermaßen initialisiert werden...
Delphi-Quellcode:
procedure TForm.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
  DataSet.FieldByName('id').AsInteger:=ClientDataSet1.RecNo;
end;
Eine Sortierung wird dann folgendermaßen möglich...
  ClientDataSet2.IndexFieldNames:='id'; Trotzdem ist mein erster Vorschlag sinnvoller...
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#5

Re: Datensatznummern für ein DBGrid

  Alt 17. Sep 2008, 07:49
So hab ich das bis jetzt auch hinbekommen.

Das ist aber falsch !

Wenn nämlich Einträge geändert oder gelöscht werden, dann stimmts nicht mehr.

Ich habs jetzt, so funktioniert es......

Delphi-Quellcode:
procedure Tform1.Zeilennummern_eingeben;
var i:Integer;
begin
for i := 1 to Form1.Clientdataset2.recordcount do
begin
  form1.ClientDataSet2.Recno := i;
 form1.ClientDataSet2.Edit;
form1.ClientDataSet2Nr.AsInteger:= form1.ClientDataSet2.Recno ;
end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Datensatznummern für ein DBGrid

  Alt 17. Sep 2008, 08:59
@Thomas F: Im Gegenteil, ich denke, daß Deine Lösung "fasch" ist. Was Du in Deinem Beispiel erhältst, ist lediglich eine Zeilennummerierung, aber keine eindeutige Identifizierung der Datensätze (über mehrere Aufrufe hinweg). Schon allein deshalb, weil die Nummer sich bei jedem Aufruf ändern kann. Das sind zwei verschiedene Dinge. Es lohnt sich wirklich, über omatas Anregung nachzudenken. Wenn es für Dich so funktioniert, ok. Aber bereits bei konkurrierenden Zugriffen und/oder Transaktionen bekommt man evtl. große Probleme, die man durch besseres Design von vornherein vermeiden kann. Natürlich KANN man eine ID zur Sortierung benutzen. Sollte man aber besser nicht.
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#7

Re: Datensatznummern für ein DBGrid

  Alt 17. Sep 2008, 10:31
Ich lass die Zeilennummern weg

Irgendwie bekomm ich das nicht hin

Es funktioniert nur solange man keine Datensätze ändert oder löscht,

dann kommt alles durcheinander.

Und wenn die Zeilennummern durcheinander sind , dann bringt es auch nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Datensatznummern für ein DBGrid

  Alt 17. Sep 2008, 10:52
Hmm ... so schnell habe ich das nicht erwartet.

Also:

Wenn ich das richtig verstanden habe, hast Du ZWEI Aufgaben:

1. Identifikation und
2. Sortierung

Für beide Zwecke führst Du jeweils ein eigenes Feld in Deiner Datenstruktur.

1. die ID
ein eigener Zähler, der unabhängig von allen anderen Operationen immer nur hochgezählt wird.
Manche Datenbanken bieten dafür als Datentyp autoincrement o.ä. an.
Wenn Du den Datensatz ansprichst, dann am Besten über diese ID, die NIEMALS verändert werden darf

2. die Ordnungsnummer
beim Anlegen des Datensatzes kann man die ruhig auf dienselben Wert setzen, wie die ID, dadurch ist gewährleistet, daß sie noch nicht vorkommt. Später kannst Du diese Ordnungsnummer aber ändern (z.B. tauschen, um zwei Sätzen in der DARSTELLUNG zu vertauschen). Damit wird aber die ID nicht verändert. Der Datensatz bleibt eindeutig aber beliebig sortierbar.

Es ist keine gute Idee, die Datenstruktur oder die Identifikation für eine Darstellung zu verändern. Das ist imho, was omata mit "Design" meinte.


Beispiel

FILM_ID integer (eindeutig, wird nur angelegt, nie verändert)
FILM_ORDER integer
FILM_NAME char(50)
...


So eine Struktur macht es leicht, später z.B. abhängige Tabellen hinzuzufügen, weil eine eindeutige Zuordnung über die FILM_ID möglich ist...

Lies mal z.B. Andreas Kosch: Interbase Datenbankentwicklung mit Delphi, nicht mehr besonders aktuell, aber an den Prinzipien guten Designs hat sich nichts geändert....
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#9

Re: Datensatznummern für ein DBGrid

  Alt 17. Sep 2008, 11:38
Danke, für deine Antwort

Ich hab jetzt ein Feld 'Nr' hinzugefügt mit dem Datentyp 'AutoInc'

Zählt jeden Datensatz um eins nach oben.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz