![]() |
Datenbank: Access • Zugriff über: TADOConnection
Exception bei Locate
Hallo zusammen,
habe versucht bei mir eine lokalisierung eines Datensatzes durchzuführen, was normalerweise kein Problem ist, aber irgendie wehrt sich meine Anwendung dagegen.
Nun zu der eigentlichen Routine: Beim Ereignis OnKeyPress vom TDBGrid reagiere ich auf gültige Zeichen. Dort ermittle ich den richtigen Spaltennamen und rufe dann Locate auf mit meiner Spalte als Key, meinen Character als Value und beide Optionen ([loCaseInsensitive, loPartialKey]) gesetzt. Hier kommt nu eine Exception dass die Argumente vom falschen Typ sind, außerhalb des Gültigkeitsbereiches liegen oder nicht miteinander vereinbar sind. Was läuft da falsch? Gruß, Moony |
Re: Exception bei Locate
Hallo,
zeig' uns bitte mal die entsprechende Routine, so ist das doch etwas zu abstrakt. |
Re: Exception bei Locate
Delphi-Quellcode:
if TB1.Active then
begin if (Key in ['a'..'z', 'A'..'Z']) then if TB1.FieldList.IndexOf(SelectedCol) <> -1 then // SelectCol wird gesetzt beim TitleClick TB1.Locate(SelectedCol, Key, [loCaseInsensitive, loPartialKey]); end; |
Re: Exception bei Locate
Hallo,
Breakpoint auf die Locate-Zeile und nachschauen, was in SelectedCol steht. Falls dort alles OK ist, setz mal vorher DataSource des DBGrids auf NIL und weise es nachher wieder zu. Heiko |
Re: Exception bei Locate
SelectCol ist vollkommen in Ordnung und das setzen des DataSource bringt nichts. Immer noch die gleiche Meldung.
|
Re: Exception bei Locate
Hallo,
mach' in der Locate-Zeile mal aus dem Key einen String, weiß nicht, ob Char als Variant übergeben werden kann. |
Re: Exception bei Locate
Immer noch die gleiche Meldung.
|
Re: Exception bei Locate
Hallo,
dann versuch' es zuerst einmal mit einer "festen" Abfrage:
Delphi-Quellcode:
Um herauszubekommen, was denn da eigentlich falsch ist/sein soll.
TB1.Locate('existierendenSpaltenNamen', 'A', [loCaseInsensitive, loPartialKey]);
Und dann mal die einzelnen Kombinationen ausprobieren. Variiere bitte auch mal die Kombinationen von [loCaseInsensitive, loPartialKey]. Ich möchte nicht ausschließen, dass Kombinationen, die aus Delphisicht korrekt sind, von einzelnen Datenbanken nicht verarbeitet werden können. |
Re: Exception bei Locate
Hallo,
und die Exception kommt ganz sicher genau bei "diesem" Locate. Gehst du auch tatsächlich mit F8 weiter und bekommst die Exception ? Nimm mal das temporär raus partial key. Welche DB ? Heiko |
Re: Exception bei Locate
Also...
@hoika: ja, ich gehe mit F8 weiter und genau in dieser locate zeile kommt die exception. @nahpets: weder die statischen Werte noch unterschiedliche Kombinationen führen zu einem zufriedenstellenden Ergebnis. |
Re: Exception bei Locate
Hallo,
das heißt dann doch, dass der Fehler nicht bei Dir und Deinem Programm liegt, sondern das Access (bzw. die Schnittstelle) mit dem Locate nicht zurecht kommt. Funktioniert wenigstens ein
Delphi-Quellcode:
Wenn nicht, kannst Du das Locate bei der Datenbank wohl vergessen.
TB1.Locate('Spaltenname','A',[]);
|
Re: Exception bei Locate
Hallo,
Notlösung wäre eine Extra-Such-Query, die den Primär-Schlüssel sucht. Dann mit FindKey (hat das ADO ?) direkt draufspringen. Heiko |
Re: Exception bei Locate
Nein, auch ohne Optionen gehts nicht.
Aber das kann doch nicht sein. Ich verwende diese Funktion quasi überall und auch mit der gleichen Datenbank die ich hier benutze. @hoika: nein , es gibt keinen FindKey bei ADO |
Re: Exception bei Locate
Hallo Moony,
habe mal eben eine kleine Anwendung mit ADOConnection, ADOTable, DataSource, DBGrid und Accessdatenbank erstellt. Der von Dir gepostete Quelltext funktioniert mit dieser Kombination fehlerfrei. In Deinem Projekt muss sich irgendwas verstrubbelt haben. Erstell' mal 'ne neue Anwendung mit nur der Suche im DBGrid und schau, ob das funktioniert. |
Re: Exception bei Locate
Halo,
benutzt du TB1 vielleicht aus Versehen noch an einer anderen Stelle ? Was steht denn in TB1.TableName ? Heiko |
Re: Exception bei Locate
Also...
klar wird TB1 an anderen Stellen genutzt, aber immer nur mit dieser Datenbank und immer mit der SQL Anweisung: SELECT * FROM Table. Beim Debug lasse ich mir Infos zu dem Dataset anzeigen und auch hier ist alles richtig: die SQL Anweisung, Dataset ist aktiv, die Anzahl der Datensätze , die Feldnamen. Deswegen verstehen ich nicht was zu diesem Fehler führt. @nahpets: Ich verwette meine 4 Buchstaben dafür, dass es funktionieren wird, wenn ich das in eine neue Anwendung implementiere. Habe jetzt nachträglich mal den Namen des Datasets sowie der DB geändert, damit keine verwechselungen auftreten, aber immer noch das gleiche Problem. |
Re: Exception bei Locate
So, habe noch ein wenig im ADO-Source rumgewühlt und festgestellt, dass er Probleme mit meinem Datenbankfeld hat. Meine Felder sind bis auf eins durchnummeriert, sprich die FeldCaption beinhaltet einen 1-Zeichen langen String, was ADO wahrscheinlich als Char versteht.
Und hier liegt sein Problem! Danke für eure ganzen Denkanstöße und Vorschläge. Gruß, Moony |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 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