![]() |
Datenbank: Access / ADO • Version: Neueste • Zugriff über: ADO
Probleme beim TTable sortieren
Hallo,
ich versuche eine Tabelle in einer Access-Datenbank zu sortieren (in einer TADOTable (nennen wir sie DBT) dargestellt) und zwar nach einem Long Integer Feld in der Access-Tabelle ( nennen wir es 'AF'; das Feld ist indiziert): if (DBT.Active = True) then DBT.Close; DBT.IndexFieldNames := 'AF'; DBT.Open; Wenn ich das so mache, bekomme ich beim Ausführen des DBT.Open die Nachricht: "Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind miteinander unvereinbar". Ich habe das genau so in der Steinzeit mit Delphi 5 genau so gemacht und das funktionierte. Was mache ich falsch bzw. was hat sich geändert? Ich würde jetzt ungerne mit SQL anfangen und das Ganze über eine Query realisieren. Es müsste ja wohl auch noch so (oder ähnlich) gehen? Übrigens: kann man auch ein double Feld nach der Größe der Zahlen sortieren? Wenn ja wie? Schon jetzt vielen Dank von einem Gelegenheitsprogrammierer. |
AW: Probleme beim TTable sortieren
Ich hab da zwar nicht wirklich Ahnung von (SQL-"geschädigt"), aber in der Hilfe steht:
Zitat:
|
AW: Probleme beim TTable sortieren
|
AW: Probleme beim TTable sortieren
Vielen Dank für den Hinweis, aber die CursorLocation der Datenmengenkomponente ist auf "clUseClient" gesetzt.
|
AW: Probleme beim TTable sortieren
Sorry, TADOTable ist natürlich richtig und so verwendet.
|
AW: Probleme beim TTable sortieren
Hallo...
Zitat:
Vieleicht investierst du deine kostbare Zeit besser um den Umgang mit aktuellen DBMS und SQL zu erlernen. ...auch dabei können wir dir behilflich sein. :thumb: |
AW: Probleme beim TTable sortieren
Du willst ja einen bereits vorhandenen Index nutzen und das geht über IndexName.
Delphi-Quellcode:
Schließen und Öffnen sollten eigentlich nicht erforderlich sein.
if DBT.Active then DBT.Close;
DBT.IndexName := 'AF'; DBT.Open;
Delphi-Quellcode:
sollte beim neu gesetzten Index den Datensatzzeiger auf den ersten Satz setzen, andernfalls bleibt der Datensatzzeiger unverändert.
DBT.IndexName := 'AF';
DBT.First; |
AW: Probleme beim TTable sortieren
Zitat:
|
AW: Probleme beim TTable sortieren
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! |
AW: Probleme beim TTable sortieren
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:
tb = TAdoTable
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; 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:
Zitat:
Zitat:
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? |
AW: Probleme beim TTable sortieren
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. |
AW: Probleme beim TTable sortieren
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 :-( |
AW: Probleme beim TTable sortieren
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:
Delphi-Quellcode:
Hab's noch nicht ausprobiert, aber eventuell geht's ja.
dbf.IndexName := QuotedStr('Guten Tag');
|
AW: Probleme beim TTable sortieren
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 |
AW: Probleme beim TTable sortieren
Zitat:
Also: So wichtig eine problemorientierte Antwort ist, so wichtig ist mindestens eine antwortorientierte Problembeschreibung. :-D |
AW: Probleme beim TTable sortieren
Zitat:
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. |
AW: Probleme beim TTable sortieren
Zitat:
Zitat:
Gruß K-H |
AW: Probleme beim TTable sortieren
[OT]
Zitat:
Hätte ich es gestern Abend noch geschrieben wären die Worte noch ganz anders geworden[/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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