Toon posts:

[Delphi] GotoBookMark -> Error $0002

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben momenteel bezig met een programma.
Hierbij hou ik het currend record bij op het moment dat een nieuwe melding wordt gedaan.
Daarna wordt deze vrij gegeven, etc bij Annuleren.

Hieronder een stukje van de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private
  cur_mld_rec : tbookmark

// nieuwe melding aanmaken
procedure TDlgSpo003_meld.btnNieuweMeldingClick(Sender: TObject);
begin
  pnlNewMelding.Visible := true;
  cur_mld_rec := dmSpo003.qryMelding.GetBookmark;
  prMeldingEditMode(true);

  dmSpo003.qryMelding.Insert;

  dmSpo003.qryMelding.fieldbyname('MELDER_TYPE').value := 'INTERN';
  dbgSoortMelderChange(Self);
  dbeMelding.setfocus;
end;

procedure TDlgSpo003_meld.btnMeldingAnnulerenClick(Sender: TObject);
begin
// Wanneer melding opgeslagen melding weer verwijderen uit database
  dmSpo003.qryMelding.CachedUpdates := true;
  dmSpo003.qryMelding.CancelUpdates;
  prMeldingEditMode(false);
  dmSpo003.qryMelding.GotoBookmark(cur_mld_rec);
  dmSpo003.qryMelding.FreeBookmark(cur_mld_rec);
end;


Echter krijg ik bij: dmSpo003.qryMelding.GotoBookmark(cur_mld_rec);
de melding:
... class EDBEngineError with message 'BDE error $0002'. Process stopped. ...
Deze melding krijg ik zowel bij het opslaan als annuleren, wanneer ik GotoBookMark(cur_mld_rec) aanroep.

Heeft iemand deze melding al eens gehad. En weet iemand wat hier de oorzaak van is en de oplossing er voor?
Op google kan ik er nog niet veel duidelijks over vinden..

alvast bedankt.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 03-05 20:49

Creepy

Tactical Espionage Splatterer

Vreemd, want error 2 zie ik zo snel niet terugkomen in de lijst van errorcodes van de BDE.

Kijk eens naar: http://www.delphifaq.com/fq/q0075.shtml. Welke meldingen krijg je dan terug van de BDE?

Overigens:
Uit de Delphi help
Note: GetBookmark relies on a protected method to obtain the bookmark value. TDataSet descendants implement this method to provide their own type of bookmark support. Unidirectional datasets do not support bookmarks, and so do not return a meaningful value.
Het is toch wel een bidirectional dataset he? ;)

[ Voor 49% gewijzigd door Creepy op 27-07-2005 15:43 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Heb eerlijk gezegt geen flauw idee.

Hoe stel je een bidirectional dataset in?

Heb een TQuery als dataset. Verder geen aparte dingen aan veranderd.. Moet daar verder nog wat voor ingesteld worden?

Hoorde ook iemand over Findrecord oid.. Wat kan je beter gebruiken? Bookmark of FindRecord oid..?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

TQuery.Locate op ID moet je gebruiken. Bookmarks moet je vermijden, want dat zijn directe pointers naar een rij en werken alleen in sommige gevallen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
OK, probeer ik dat.

dank je.

  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Gebruik IPV Bookmark dan de BookmarkStr. Dit is een tekst-representatie van de regel waarop je stond en is niet data-afhankelijk zoals de Bookmark pointer.

Via de BookmarkStr methode zal je qeury dan wellicht niet naar een ander record springen, omdat het record niet kan worden gevonden.

Daarnaast kun je (zoals al aangegeven) een Locate gebruiken.

Verwijderd

Topicstarter
Misschien nog een stomme vraag.

maar wanneer moet je/ gebruik je bookmark en wanneer niet?
Gebruik je bookmark ook als je maar een paar waarden wilt invoeren uit een dblookuplist, dbedit en dbmemo, of alleen als je gebruik maakt van een Datagrid e.d.?

En wat zijn alternatieven? Behalve Locate..

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 21:40

Tomatoman

Fulltime prutser

Verwijderd schreef op donderdag 28 juli 2005 @ 13:35:
Misschien nog een stomme vraag.

maar wanneer moet je/ gebruik je bookmark en wanneer niet?
Een bookmark is de figuurlijke boekenlegger, die je gebruikt je als je later wilt terugkeren naar een record dat eerder de huidige record was. Je gebruikt het dus als de kans bestaat dat in de tussentijd de huidige record verandert. Je moet daarbij wel oppassen dat een bookmark niet meer geldig is als de recordset opnieuw wordt gecreërd (na Refresh/Requery/Close etc.) en ook niet gebruikt kan worden als de recordset alleen van voor naar achter gelezen kan worden (unidirectional datasets, o.a. in combinatie met DBExpress).
Gebruik je bookmark ook als je maar een paar waarden wilt invoeren uit een dblookuplist, dbedit en dbmemo, of alleen als je gebruik maakt van een Datagrid e.d.?
Als de huidige record niet wijzigt, is er geen reden om de huidige record terug te vinden en is er dus ook geen reden om een bookmark te gebruiken. :)
En wat zijn alternatieven? Behalve Locate..
Zie de antwoorden in eerdere posts. Mijn ervaring is dat Locate in de meeste gevallen precies doet wat je wilt. Dit is typisch een onderwerp dat in boeken over Delphi wordt behandeld, inclusief de voor- en nadelen van de alternatieven. Voor een uitgebreid antwoord inclusief voorbeelden moet je eens op zoek naar een goed leerboek. :)

Een goede grap mag vrienden kosten.

Pagina: 1