Results 1 to 12 of 12

Thread: Row not found in BDEClientdataset

  1. #1

    Post Row not found in BDEClientdataset

    Mensen, ik heb een pagina gemaakt in websnap gekoppeld aan een database.
    Dit is een hele simpele pagina die tekst kan wijzigen, verwijderen, en invoeren.
    De database is een oracle db die via een bdeclientdataset is gekoppeld aan de pagina.
    De invoeren, wijzigen, verwijderen doe ik via standaardacties die in een datasetadapter zitten.

    Probleem: Als ik een nieuw record toevoeg en hem gelijk verwijder en ik wil weer een record toevoegen dat geeft hij een melding:

    'Row Not Found in BDEClientDataSet'

    Waarom?

    Na de delete doe ik een applyupdate en refresh ik hem.

    Als ik de aangegeven volgorde niet aanhoud doet hij het wel?

    alvast bedankt.

  2. #2
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    hoe refresh je? meestal werkt het beter als je echt een close; en daarna weer een open; doet. Daarbij kun je misschien beter een losse clientdataset en datasetprovider en TQuery gebruiken, dat is niet alleen veel krachtiger, maar ook nog veel mooier
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  3. #3
    Heb je een keyfield aangegeven? Daarmee geef je aan hoe het juiste record moet worden gezocht.

    En als je toch nog aan het beginnen bent: stop met de BDE. De BDE wordt niet meer ondersteund en BDE en multi threading is geen beste combinatie. Als je Delphi 6 of beter hebt kun je beter dbExpress gebruiken.
    Marcel

  4. #4
    Ik zou heel graag over willen gaan naar dbExpress, maar mijn stage is bijna afgelopen, dus heb ik niet veel tijd meer om het helemaal overtezetten naar dbExpress. Ik heb de refresh vervangen door close en open en heb een keyfield aangegeven, maar nog geen resultaat.

    alvast bedankt

  5. #5
    Ik heb nog wat meer informatie over het probleem?
    De gegevens laat ik zien in een soort grid.
    Als er al een record te zien is op de pagina dan geeft hij de error niet, maar als het laatste record op de pagina verwijderd wordt en ik wil er daarna een toevoegen, dan komt hij met een error? Dit is dus niet het laatste record in de database.

    alvast bedankt

  6. #6
    ik zit hier een beetje op mijzelf te replyen, maar zou het kunnen zijn dat de BDEClientDataSet toch nog iets onthoudt als hij eenmaal gerefresh heeft? Als ik het laatste record verwijder en ik vraag de pagina opnieuw op, dan kan ik gewoon record toevoegen?

    alvast bedankt
    Last edited by lermo; 08-Jan-03 at 16:22.

  7. #7
    Probeer dan eens een CancelUpdates te doen, dan zijn je wijzigingen ook echt weg uit je ClientDataSet.
    Marcel

  8. #8
    Helpt ook niet

  9. #9
    Hmm, dan wordt het lastig. Dus komt de vraag die ons meestal een stuk verder helpt: kun je een voorbeeldprojectje maken waarin dit fout gaat en dat posten? Gebruik dan een database uit DBDemo's zodat we het ook daadwerkelijk kunnen gebruiken.
    Marcel

  10. #10
    Originally posted by Marcel
    Hmm, dan wordt het lastig. Dus komt de vraag die ons meestal een stuk verder helpt: kun je een voorbeeldprojectje maken waarin dit fout gaat en dat posten? Gebruik dan een database uit DBDemo's zodat we het ook daadwerkelijk kunnen gebruiken.
    Dit wordt moeilijker dan het lijkt. Sorry trouwens voor de late reactie. Als eerste heb ik een voorbeeldprojectje gemaakt met een eenvoudige Ttable, maar dit ging zonder een errors, toen heb ik een voorbeeldprojectje gemaakt met een Tdatabase, maar dit ging ook zonder errors. Ik denk dat het aan oracle ligt, ik zou niet weten wat het anders zou moeten zijn. Dus geen voorbeeldprojectje.

    alvast bedankt.

  11. #11
    Registered User
    Join Date
    Jun 2007
    Location
    Kampen
    Posts
    1
    Een late reactie: maar ik liep ook tegen het probleem op
    dus ik nog wat verder zoeken en ja hoor het is foutje in de DbAdapt.Pas unit:
    Code:
    TCustomDataSetAdapter.LocateKeyParams function:
       if {we should modity here}FieldList.Count <> 0 then
       begin
        ...
        Result := DataSet.Locate(KeyFields, KeyValues, []);
       end
       else
        Result := True; // No locate params
    thus, this method use Dataset's Locate method, but have not consider whether the dataset is empty. yes Locate method often return false when  it search a empty dataset.
    In the method which call this function, Like TCustomDataSetAdapter.SilentLocate and TCustomDataSetAdapter.Locate function, we can see the exception would be throw:
    {In SilentLocate method}
       Result := LocateKeyParams(TLocateParamsWrapper.Create(L));
       ......
    {In Locate method}
      if not SilentLocate(LocateParamsList, True) then
       RaiseRowNotFound
      ...
    fix it would be easy, just add a condition like this(if you have a better way, then tell me please)
    {In TCustomDataSetAdapter.LocateKeyParams method}
       if (Dataset.RecordCount <>0) and (FieldList.Count <> 0) then
       begin
        ...
        Result := DataSet.Locate(KeyFields, KeyValues, []);
       end
       else
        Result := True;
    Last edited by Dees; 21-Jun-07 at 22:02.

  12. #12

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. LoadLibrary() returns 126 (module not found)
    By El Jeffroz in forum Algemeen
    Replies: 2
    Last Post: 07-Jun-04, 15:39
  2. Replies: 5
    Last Post: 16-Feb-04, 13:28
  3. ADO uit ROW Lezen
    By Delphi Man in forum Algemeen
    Replies: 4
    Last Post: 29-Jan-04, 08:21
  4. firebird app start niet. GDS32.dll not found
    By r.nijenhuis in forum Databases
    Replies: 5
    Last Post: 02-Dec-03, 14:13
  5. 'fijne' kleurtjes row dbgrid
    By Jurgen in forum Databases
    Replies: 1
    Last Post: 08-Apr-03, 18:42

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •