Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sperren: Exeption wenn auf letztem Datensatz (https://www.delphipraxis.net/5326-sperren-exeption-wenn-auf-letztem-datensatz.html)

Gambit 1. Jun 2003 23:29


Sperren: Exeption wenn auf letztem Datensatz
 
Hallo,

meine Datenbank öffnet schreibgeschützt, also nichts ist editierbar. Nun habe ich eine Routine eingebaut, die den Schreibschutz aufhebt, damit sich ZB DBEdits editieren lassen:

Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
var pos: TBookmark; // Lesezeichen
begin
  pos:= Query1.GetBookmark; // Position merken
  Query1.Active:= false;
  if CheckBox1.Checked= true then Query1.RequestLive := false //sperren
  else Query1.RequestLive := true; // Sperre aufheben
  Query1.Active:= true;
  Query1.GotoBookmark(pos); // Position wiederherstellen
end;
Das funzt soweit auch ganz gut, es sei denn, ich stehe gerade auf dem letzten Datensatz. Wenn ich dann sperren oder entsperren will bekomme ich ein Exeption mit der Fehlermeldung:

Gitternetz außerhalb des zulässigen Bereichs.

Wie kommt denn das und wie kann man dem abhelfen?

Gruß

Gambit

Neo2084 1. Jun 2003 23:33

Hi,

ich glaube nicht das Bookmarks überhaupt ein schließen der Tabelle überleben.
Wenn deine Tabelle einen Primärindex auf einem Feld hat, dann merke dir doch einfach den Primärkey und nach dem öffnen machst du einfach ein Query.Locate ...
Wenn locate keine übereinstimmmung findet, geht es einfach zum nächsten Datensatz.

Gruß Neo

Hansa 1. Jun 2003 23:41

ist das etwa eine CD?

Gambit 1. Jun 2003 23:46

Also anfangs hatte ich das Ganze mit ner TTable gemacht, da klappte das mit den Bookmarks. Obs mit der Query noch klappt probier ich morgen. Aber die Exeption kam auch bei der TTable schon. Möcht bloß wissen wieso?

Gambit

P.S was meinst du denn mit CD?

Gambit 1. Jun 2003 23:48

Achso, ohne Bookmarks kam die Exeption auch...

Gambit

Neo2084 1. Jun 2003 23:53

Hi,

wie lautet die Exception ?
Wenn du eine Query über mehrere Tabellen machst, kann man diese nicht editieren und dann führt RequestLive zu einer Exeption.

Und noch was, Bookmarks müssen mit Free wieder freigegeben werden, sonst hast du ein Speicherleck !

Poste doch mal die Komplette Funktion ohne Bookmark ...

Gruß Neo

Gambit 2. Jun 2003 07:20

Moin!

Was meinst du denn mit schick mal die ganze Funktion? Das ist doch die ganze Methode. Also ich glaube auch, RequestLive hat da unmittelbar gar nichts mit zu tun, es passiert ja auch, wenn ich Table1.ReadOnly:=False bei einer Table statt einer Query benutze.

Die Exeption ist eine der Klasse EInvalidGridOperation die Fehlermeldung hatte ich ja schon gepostet.

Und, es ist nur eine Tabelle.

Könntest du mir denn etwas genauer erklären, wie ich mir ich mir den Primärindex merken kann, dann probier ich das mal?

Gruß

Gambit

Gambit 2. Jun 2003 18:56

Jetzt raff ich gar nix mehr...mach die DBGrid von der Breite her kleiner, klappt alles ohne Probs. Mach ich sie breiter kommt die Exeption.

Das soll mal wer schnallen...

Gambit

Neo2084 2. Jun 2003 20:05

Hallo,

mach das Grid unsichtbar (visible=false),
dann schließ die Tabelle und öffne sie erneut,
dann Grid wieder einschalten. Scheinbar stimmt die Anzahl der Spalten nicht mehr nach dem erneuten öffnen.

Alternativ vorher noch Grid.Dataset :=nil
und anschließend neu zuweisen.

sag mal Bescheid ob das hilft...

Gruß Neo

Gambit 2. Jun 2003 21:11

Wie meinst du das jetzt genau? In die oben genannte Routine einbauen?

Ich bin im Moment völlig confused...

Gambit

P.S

Vielleicht könntest du das in die Routine oben mal reinschreiben? :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.
Seite 1 von 2  1 2      

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