Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Exception bei Locate (https://www.delphipraxis.net/128300-exception-bei-locate.html)

Moony 27. Jan 2009 16:00

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.
  • Meine Tabelle ist geöffnet und in mein Grid geladen.
  • Das Grid ist auf ReadOnly = true gesetzt.
  • Die Spaltennamen sind unterschiedlich zu den tatsächlichen Spaltennamen in der Tabelle, was kein Problem ist, weil ich den richtigen Namen ermittel

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

nahpets 27. Jan 2009 16:08

Re: Exception bei Locate
 
Hallo,

zeig' uns bitte mal die entsprechende Routine, so ist das doch etwas zu abstrakt.

Moony 28. Jan 2009 07:21

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;

hoika 28. Jan 2009 08:00

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

Moony 28. Jan 2009 08:08

Re: Exception bei Locate
 
SelectCol ist vollkommen in Ordnung und das setzen des DataSource bringt nichts. Immer noch die gleiche Meldung.

nahpets 28. Jan 2009 08:41

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.

Moony 28. Jan 2009 08:44

Re: Exception bei Locate
 
Immer noch die gleiche Meldung.

nahpets 28. Jan 2009 09:13

Re: Exception bei Locate
 
Hallo,

dann versuch' es zuerst einmal mit einer "festen" Abfrage:

Delphi-Quellcode:
TB1.Locate('existierendenSpaltenNamen', 'A', [loCaseInsensitive, loPartialKey]);
Um herauszubekommen, was denn da eigentlich falsch ist/sein soll.
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.

hoika 28. Jan 2009 09:16

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

Moony 28. Jan 2009 09:30

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.

nahpets 28. Jan 2009 09:44

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:
TB1.Locate('Spaltenname','A',[]);
Wenn nicht, kannst Du das Locate bei der Datenbank wohl vergessen.

hoika 28. Jan 2009 09:47

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

Moony 28. Jan 2009 09:58

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

nahpets 28. Jan 2009 10:03

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.

hoika 28. Jan 2009 10:32

Re: Exception bei Locate
 
Halo,

benutzt du TB1 vielleicht aus Versehen noch an einer anderen Stelle ?
Was steht denn in TB1.TableName ?


Heiko

Moony 28. Jan 2009 11:34

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.

Moony 29. Jan 2009 08:13

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