AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Probleme beim TTable sortieren

Probleme beim TTable sortieren

Ein Thema von JHOF · begonnen am 19. Jul 2013 · letzter Beitrag vom 20. Jul 2013
Antwort Antwort
JHOF

Registriert seit: 2. Jan 2012
6 Beiträge
 
#1

AW: Probleme beim TTable sortieren

  Alt 19. Jul 2013, 19:49
Nette Antworten, leider lösen sie nicht mein Problem.
Meine Frage war, was am Code falsch ist. Da helfen mir Hinweise auf SQL nicht. Damit kann ich durchaus umgehen, aber ich habe ein altes Programm, das ich auf die Schnelle wieder zum Laufen bringen muss, um es an den wirklich wichtigen Stellen zu verändern. Ich will keinesweg das Programm in Gänze umschreiben. Übrigens: die einzig sinnvolle Antwort auf ein Problem, ist die Antwort, die das Problem löst!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Probleme beim TTable sortieren

  Alt 19. Jul 2013, 20:52
Hast Du denn IndexName schon ausprobiert, so wie ich schrieb? Und wenn ja, was funktioniert nicht? Welche Fehlermeldung erscheint?

In einem korrekt funktionierenden Programm von mir nutze ich dieses:
Delphi-Quellcode:
procedure TfmMain.dbGridTitleClick(Column: TColumn);
begin
  try
    case Column.Field.FieldNo of
      1 : tb.IndexFieldNames := 'sender,datum,zeit';
      2 : tb.IndexFieldNames := 'zeit,datum,sender';
      3 : tb.IndexFieldNames := 'datum,zeit,sender';
      4 : tb.IndexFieldNames := 'sendung,sender,datum,zeit';
      5 : tb.IndexFieldNames := 'kategorie,datum,zeit,sender';
      6 : tb.IndexFieldNames := 'beschreibung,sender,datum,zeit';
      7 : tb.IndexFieldNames := 'id';
    else
      tb.IndexFieldNames := 'sender,datum,zeit';
    end;
  except
    on e : exception do ShowMessage(e.Message);
  end;
end;
tb = TAdoTable

In diesem Fall müssen bei IndexFieldNames die Felder durch Komma getrennt angegeben werden, nach denen sortiert werden soll. Da ich das immer problemlos bei geöffneter Tabelle mache, könntest Du ja eventuell mal das Schließen der Tabelle weglassen. Es ist halt überflüssig und kostet nur Zeit.

Die Hilfe zu Delphi schreibt hierzu:
Zitat:
Die Eigenschaft IndexFieldNames listet die Felder auf, die als Index verwendet werden sollen.

Delphi-Syntax:

property IndexFieldNames: string;

C++ Syntax:

__property AnsiString IndexFieldNames = {read=GetIndexFieldNames, write=SetIndexFieldNames}

Beschreibung

Verwenden Sie IndexFieldNames als alternative Methode zum Festlegen des Index für eine Client-Datenmenge. Geben Sie den Namen jedes Feldes an, nach dem die Datenmenge indexiert werden soll. Die einzelnen Namen werden durch ein Semikolon getrennt. Die Reihenfolge der Feldnamen wird im Index berücksichtigt.

Mit IndexFieldNames hinzugefügte Indizes unterstützen keine Gruppierungen oder gewarteten Aggregate.
Tipp: Mit IndexFieldNames können Sie zur Laufzeit Sortierreihenfolgen erstellen.
Hinweis: Die Eigenschaften IndexFieldNames und IndexName schließen sich gegenseitig aus. Durch Einstellen der einen Eigenschaft wird die andere zurückgesetzt.
sowie
Zitat:
Die Eigenschaft IndexName bezeichnet einen Index der Client-Datenmenge.

Delphi-Syntax:

property IndexName: string;

C++ Syntax:

__property AnsiString IndexName = {read=GetIndexName, write=SetIndexName};

Beschreibung

Mit IndexName können Sie einen anderen Index für eine Client-Datenmenge angeben. Wenn die Eigenschaft keinen Wert enthält, basiert die Sortierfolge der Datenmenge auf der Eigenschaft IndexFieldNames oder der Standardsortierung im Datenpaket. Die Standardsortierung richtet sich nach dem vordefinierten Index (DEFAULT_ORDER).

Enthält IndexName einen gültigen Indexnamen, werden die Datensätze basierend auf diesem Index sortiert.

Hinweis: IndexFieldNames und IndexName schließen sich gegenseitig aus. Durch Einstellen der einen Eigenschaft wird die andere zurückgesetzt.



Zitat:
Übrigens: kann man auch ein double Feld nach der Größe der Zahlen sortieren? Wenn ja wie?
Indem man 'nen Index drauf legt und den Namen des Index bei IndexName angibt.

PS:

Fehlermeldungen der ADO-Schnittstelle sind nicht immer zwingend aussagefähig und geben nicht zwingend einen Hinweis auf den tatsächlich aufgetretenen Fehler und der tritt meist nicht dort auf, wo die Ausnahme geworfen wird. ( <-- sakastisch formulierte Praxiserfahrung)

Also folgendes Versuchen:

Umsteigen auf IndexName und dort den Namen des zu nutzenden Index angeben.
Zuerst ohne vorheriges Schließen und anschließendes Öffnen der Tabelle. Nur wenn es dann nicht geht mit Close und Open arbeiten.

Geht's damit nicht, was passiert, wenn nur ein Close und ein Open aufeinander folgen, ohne das Setzen des Index?

Geht das alles nicht, dann auf IndexFieldNames ausweichen. Schreibweise der Feldnamen eventuell so, wie in der Datenbank, also Groß-/Kleinschreibung beachten (auch wenn's meiner Meinung nach irrelevant sein sollte).

IndexFieldNames zuerst bei geöffneter Tabelle setzen, nur wenn das scheitert, mit Schließen und Öffnen probieren.

Ist die TAdoTable über eine TDataSource mit irgendwelchen Komponenten zur Anzeige... verbunden? Wenn ja, diese Verbindung probeweise entfernen und erneut probieren.

Der Fehler "Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind miteinander unvereinbar" deutet etwas globalgalaktisch auf ein dateninduziertes Problem hin, der Fehler muss letztlich nicht zwingend in Deinen drei Zeilen Quelltext liegen, sondern kann überall dort auftreten, wo beim Öffnen oder Scrollen (was beim Öffnen automatisch passiert) etwas mit den Daten (z. B. das Anzeigen) geschieht. Ggfls. auch mal alle Ereignisroutinen der TADOTable (im Objektinspektor) entfernen, sofern vorhanden.

Läßt sich die Tabelle im Objektinspektor öffnen? Wenn ja, im Objektinspektor mal IndexName bzw. IndexFieldNames wie gewünscht befüllen. Klappt das dort?
  Mit Zitat antworten Zitat
JHOF

Registriert seit: 2. Jan 2012
6 Beiträge
 
#3

AW: Probleme beim TTable sortieren

  Alt 19. Jul 2013, 21:32
Lieber Nahpets,
vielen Dank für den ausführlichen Beitrag, der sehr hilfreich ist. Allersding lag der Fehler wie so oft im Detail: die Accesstabelle lässt als Feldnamen auch Bezeichnungen zu, in denen Blanks vorkommen, also z.B. 'Guten Tag'. Delphi kann damit zurecht kommen, zumindest wenn man den Feldnamen in der Form benutzt wie z.B. in ADT.FieldByName('Guten Tag').AsInteger. Sobald man das Feld aber indiziert um zu sortieren, geht es in die Hose. Da funktioniert nur 'GutenTag'. Muss man erst mal rausfinden.
Aber trotzdem vielen Dank für deine Antwort, die sich wohltuend von einigen anderen abhebt, die für den Gelegenheitsprogrammierer wenig hilfreich sind.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Probleme beim TTable sortieren

  Alt 19. Jul 2013, 21:57
Ohja, Leerzeichen in Tabellennamen und/oder Spaltennamen, da habe ich auch schon Stunden gesucht. Wer sowas macht, gehört verhauen
Und die Fehlermeldung deutete ja auch sehr präzise darauf hin
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Probleme beim TTable sortieren

  Alt 19. Jul 2013, 22:02
Ach, da fällt mir noch was ein:

Leerzeichen im Indexnamen könnten unter Umständen eventuell vielleicht man weißnicht so genau mit QuotedStr funktuionieren:
dbf.IndexName := QuotedStr('Guten Tag'); Hab's noch nicht ausprobiert, aber eventuell geht's ja.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Probleme beim TTable sortieren

  Alt 19. Jul 2013, 22:45
Da Access ja ein wenig eigenwillig ist könnte man ja es auch einmal hiermit versuchen
[Tabellenname].[Feldname]
ggf. muß zusätzlich mit doppelten Anführungszeichen gearbeitet werden.
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Probleme beim TTable sortieren

  Alt 20. Jul 2013, 07:54
Dank für deine Antwort, die sich wohltuend von einigen anderen abhebt, die für den Gelegenheitsprogrammierer wenig hilfreich sind.
Lieber JHOF, so wohltuend und richtig deine Kritik an dem Antwortverhalten ist, so sehr vermisse ich bei deiner Problembeschreibung die Feldbezeichnung 'Guten Tag', also mit Leerzeichen. Bei dem Feldnamen 'AF' kommt man von selbst einfach nicht drauf.

Also: So wichtig eine problemorientierte Antwort ist, so wichtig ist mindestens eine antwortorientierte Problembeschreibung.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Probleme beim TTable sortieren

  Alt 20. Jul 2013, 10:09
Also: So wichtig eine problemorientierte Antwort ist, so wichtig ist mindestens eine antwortorientierte Problembeschreibung.
FULL ACK.

Wenn man immer im voraus wüsste das der Fragestelle ein Tunnelblick hat und Hinweise auf Probleme die Rechts und Links neben seinen aktuellen Problem lauern ignoriert würde ich mir meine Zeit die ich kostenlos zur Verfügung sparen und solche Fragesteller liebend gerne ignorieren.

Glücklicherweise gibt's auch genügen Fragestelle die Hinweise auf andere vorhandene Probleme/Schlechte Implementierung die sich mit der gestellten Frage zeigen gerne annehmen und in Zukunft dann diese Problem nicht haben. Aber wenn der Fragesteller in jede Falle stolpern will die es mit seinem Lösungsansatz (hier dbGo mit Access) gibt. Bitte sehr.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Probleme beim TTable sortieren

  Alt 20. Jul 2013, 11:34
Wenn man immer im voraus wüsste das der Fragestelle ein Tunnelblick hat und Hinweise auf Probleme die Rechts und Links neben seinen aktuellen Problem lauern ignoriert würde ich mir meine Zeit die ich kostenlos zur Verfügung sparen und solche Fragesteller liebend gerne ignorieren.
Sei nicht so streng, manchmal muß man mit solchen Vorgaben leben.

Glücklicherweise gibt's auch genügen Fragestelle die Hinweise auf andere vorhandene Probleme/Schlechte Implementierung die sich mit der gestellten Frage zeigen gerne annehmen und in Zukunft dann diese Problem nicht haben. Aber wenn der Fragesteller in jede Falle stolpern will die es mit seinem Lösungsansatz (hier dbGo mit Access) gibt. Bitte sehr.
Im Prinzip

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Probleme beim TTable sortieren

  Alt 20. Jul 2013, 11:37
[OT]
Sei nicht so streng, manchmal muß man mit solchen Vorgaben leben.
Manchmal muss ich mich aufregen (Auch wenn ich sonst hier ziemlich ruhig bin).
Hätte ich es gestern Abend noch geschrieben wären die Worte noch ganz anders geworden[/OT]
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort

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 04:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz