Results 1 to 14 of 14

Thread: Een bepaald Record openen.

  1. #1
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Question Een bepaald Record openen.

    Hoi aan Iedereen, kan iemand mij mischien vertellen wat de makkelijkste en handigste
    en zeker niet te vergeten de snelste manier is om naar een bepaald 'geindexeert' record toe te 'springen'.

    Momenteel doe ik het op deze manier:
    We hebben een Tabel met 128 Records daar in elk record heeft een eigen uniek nummer.
    Om het simpel te houden heeft record nr 60. ok het nummer 60.
    als ik hier dan naar toe wil om een Edit uit te voeren dan doe ik dit.
    Code:
    DM.ffDigital_Output.First;
    DM.ffDigital_Output.MoveBy(Division0);
    Waarbij 'Division0' voor het aantal records staat wat ik moet overslaan. dus in deze suituatie is dat 60.

    Ik kan mij goed indenken dat dit niet de juiste manier is en tevens traag.

    Alvast bedankt.
    RLD

  2. #2
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199

    Lightbulb

    Ik had op het andere bericht al geantwoord dacht ik! Zal wel op het moment geweest zijn dat Marcel hem weggooide?
    Maar goed:
    Heb je al gekeken in de help bij: Locate, GotoKey en FindKey.
    Dat zijn de methodes om naar een bepaald record te gaan!
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  3. #3
    Eigenlijk komen ze allemaal op hetzelfde neer en moeten ze toch alle records aflopen. Zelfs MoveBy doet simpel gezegd niets anders dan:
    Code:
    While Skipped < ToSkip do
      Skip
      Skipped := Skipped + 1
    De snelste manier om een specifiek record te pakken is door alleen dat record op te halen, maar ik denk dat je met je third party tool bezig bent die geen SQL ondersteund?
    Marcel

  4. #4
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Talking Geheel Correct Marcel.

    Inderdaad 3th Party en geen SQL, komt overigens wel in de nieuwere versie hiervan, maar daar moeten wij maar even voor gaan sparen. (Valt niet mee om voor (prive) doeleinden software aan te schaffen.)

    Inderdaad wat Matthijs ook al zegt, ik heb zelf ook al naar Find, Goto, en Locate gekeken, maar heel simpel gezegt kom ik er niet 123 uit, (uiteraard) wel naar 3 avonden testen en proberen.
    Dus vandaar mijn vraag zouden jullie niet een ini mini voorbeeldje kunnen geven.

    Alvast bedankt, Richard.
    RLD

  5. #5
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199

    Lightbulb

    Goed komt ie.

    IntZoekWaarde is een integer die de waarde bevat waarop gezocht moet worden in "Veld1". "Veld1" is dus een integer.
    StrZoekWaarde is een string die de waarde bevat waarop gezocht moet worden in "Veld2". "Veld2" is dus een string.
    De actieve index van Table1 ligt op "Veld1" en "Veld2"

    GotoKey
    Code:
    with Table1 do begin
      SetKey; // of eventueel EditKey als dit een tweede aanroep is!
      FieldByName('Veld1').AsInteger := IntZoekWaarde;
      FieldByName('Veld2').AsString := StrZoekWaarde;
      if GotoKey then begin
        ShowMessage('Record gevonden!' + #10#13 + 
          'Dit is nu het actieve record!'
      end else begin
        ShowMessage('Record niet gevonden' + #10#13 + 
          'Actieve record is dus niet gewijzigd!');
      end;
    end;
    GotoNearest
    Code:
    with Table1 do begin
      SetKey; // of eventueel EditKey als dit een tweede aanroep is!
      FieldByName('Veld1').AsInteger := IntZoekWaarde;
      FieldByName('Veld2').AsString := StrZoekWaarde;
      GotoNearest;
      if (FieldByName('Veld1').AsInteger = IntZoekWaarde) 
      and (FieldByName('Veld2').AsString = StrZoekWaarde) then begin
        ShowMessage('Record gevonden!' + #10#13 + 
          'Dit is nu het actieve record!'
      end else begin
        ShowMessage("Record niet gevonden!' + #10#13 + 
          'Het actieve record is echter wel gewijzig!');
      end;
    end;
    FindKey
    Code:
    with Table1 do begin
      if FindKey([IntToStr(IntZoekWaarde), StrZoekWaarde]) then begin
        ShowMessage('Record gevonden!' + #10#13 + 
          'Dit is nu het actieve record!'
      end else begin
        ShowMessage('Record niet gevonden' + #10#13 + 
          'Actieve record is dus niet gewijzigd!');
      end;
    end;
    FindNearest
    Code:
    with Table1 do begin
      FindNearest([IntToStr(IntZoekWaarde), StrZoekWaarde]);
      if (FieldByName('Veld1').AsInteger = IntZoekWaarde) 
      and (FieldByName('Veld2').AsString = StrZoekWaarde) then begin
        ShowMessage('Record gevonden!' + #10#13 + 
          'Dit is nu het actieve record!');
      end else begin
        ShowMessage('Record niet gevonden!' + #10#13 + 
          'Het actieve record is echter wel gewijzig!');
      end;
    end;
    Locate
    Bij het gebruik van Locate maakt het niet uit wat de actieve index is.
    Als er een index is op de gebruikte velden, dan zal locate deze index automatisch gebruiken!
    Code:
    with Table1 do begin
      if Locate('Veld1;Veld2',
                VarArrayOf([IntToStr(IntZoekWaarde), StrZoekWaarde]),
                loCaseInsensitive) then begin
        ShowMessage('Record gevonden!' + #10#13 + 
          'Dit is nu het actieve record!');
      end else begin
        ShowMessage('Record niet gevonden' + #10#13 + 
          'Actieve record is dus niet gewijzigd!');
      end ;
    end;

    He, he. Met onderbrekingen heeft dit berichtje meer dan een uur gekost! Dat krijg je als je kleine kinderen hebt! Ik hoop dat dit een en ander verduidelijkt!
    Que? Waarom werken de Italic-tags niet?
    Last edited by Matthijs; 30-May-01 at 21:47.
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  6. #6
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Thumbs up Dit zijn berichten....

    Hartelijk dank voor de uitgebreide moeite Matthijs, hier heb ik absoluut wat aan.
    De voorbeelden zijn lekker duidelijk, en overzichtelijk, ik ga hier vanavond en morgen avond mee aan de slag (het een en ander testen) dus ik laat het je weten
    hoe het gaat.
    En dan zal ik mijn signature onderaan even de eer aan doen.

    Richard says (NL)Delphi Rules. And i'm still learning.
    Richard says (NL)Delphi Rules. And i'm still learning.
    Richard says (NL)Delphi Rules. And i'm still learning.

    Bedankt he..
    RLD

  7. #7
    Nog een extra performancetip: gebruik EnableControls en DisableControls. Als je door een dataset loopt terwijl er controls (DBGrid/DBEdit e.d.) aan zijn gekoppeld gaat 95% van je tijd zitten in het up-to-date houden van je scherm. Met DisableControls vertel je je dataset dat ie de controls niet moet 'onderhouden'. Dus:
    Code:
    Table1.DisabeControls;
    try
      Doe je ding
    finally
      Table1.EnableControls;
    end;
    (Matthijs: de italic is weer terug)
    Marcel

  8. #8
    Member Chilly-B's Avatar
    Join Date
    Jun 2001
    Location
    Hoogeveen
    Posts
    62

    Smile

    Check this out, hoofd-/kleine letter ONgevoelig + positie ongevoelig!
    Misschien niet de snelste oplossing maar wel een effectieve.

    Koppel 'VindHet' aan bijv. de onchange van een TEdit.

    Groeten,
    Martijn
    Attached Files Attached Files

  9. #9
    Hoi Martijn,

    Ziet er goed uit, maar wat is het voordeel boven Locate? Ik heb het idee dat die hetzelfde doet als jouw routine, maar misschien mis ik iets.
    Marcel

  10. #10
    Member Chilly-B's Avatar
    Join Date
    Jun 2001
    Location
    Hoogeveen
    Posts
    62

    Post

    De record met bijv. veldwaarde 'Assendorp Installatietechniek', wordt niet gevonden met Locate als ik 'dorp' intyp. Met mijn functie wel. De gehele veldwaarde wordt bij mij namelijke doorzocht en niet alleen het begin van de string. Misschien krijg jij dit wel met locate voor elkaar?

    Groeten,
    Martijn

  11. #11
    Ah, die had ik gemist, dat werkt inderdaad niet met locate.
    Marcel

  12. #12
    Wat dacht je van


    DM.ffDigital_Output.recNo := 60;

  13. #13
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Unhappy -Re Maarten

    Hoi Maarten, de manier die jij aandraagd is opzich grappig, alleen heb ik hier helaas niets aan, en waarom ? :

    Ik gebruik dus zoals je waarschijnlijk al gelezen had een Thirth Party Component, deze genaamt Flashfiler.
    En nu zeggen de heren van Turbopower het volgende:
    FlashFiler does not support the TDataSet.RecNo property.
    Dus helaas pindakaas, leuk bedacht maar niet van toepassing.

    Ps. toch bedankt, want dit is iets dat jij waarschijnlijk toch niet hadden kunnen weten.
    Maar evengoed bedankt.

    Groetjes Richard.
    RLD

  14. #14
    Ik heb eigenlijk nooit begrepen waarom Borland daar geen default implementatie aan heeft gegeven, zo moelijk zou dat toch niet moeten zijn. Nu moet je maar afwachten of een 3rd party dat implementeerd.
    Marcel

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Replies: 4
    Last Post: 20-Apr-04, 11:51
  2. CTTM 2003
    By Marcel in forum Koffiehoek
    Replies: 26
    Last Post: 02-Jun-03, 13:02

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
  •