• Nieuwe artikelen

  • Mijn eerste query met parameters...

    Desiree Willemsen

    Naar aanleiding van al vele voorbeelden op het forum over het gebruik van parameters in een query heb ik het besluit genomen er een artikel over te schrijven. Hierin wordt uitgelegd, wat parameters zijn en hoe je ze kunt gebruiken. Om het makkelijk te maken zal ik er uiteraard ook een voorbeeld bij maken.Ik hoop ook dat er gebruik van gemaakt gaat worden, aangezien het veel speurwerk kan besparen.

    Parameters wat, waarom en hoe?

    Wat zijn parameters?

    Met parameters kun je data in een SQL-Statement vervangen.?áParameters kunnen zowel in designtime als runtime worden gemaakt. De parameters die in designtime worden gemaakt, worden gevuld tijdens het draaien van de applicatie. Parameters maken het mogelijk om een query meerdere keren te gebruiken zonder dat je steeds het SQL-statement moet wijzigen. Denk hierbij aan het toevoegen van een aantal records. Parameters zijn een onderdeel van de SQL-text van je query. Parameters kun je plaatsen?áin een SQL-text waar waarden voor velden en dergelijke verwacht worden.


    Waarom gebruik maken van parameters?

    • Makkelijk in het gebruik;
    • Geen problemen met quotjes en speciale karakters;
    • Geen problemen met data-formaten;
    • Sneller in gebruik;
    • Overzicht houden over je query.



    Hoe maak ik een parameter?

    Zoals gezegd kun je parameters gebruiken op plekken waar je anders waarden zou invullen. Een parameter in een SQL-text van een Query is een naam van die parameter voorafgegaan door een dubbele punt. Veel mensen gebruiken hiervoor de veldnaam.


    De praktijk..

    Ik heb in Access een tabel aangemaakt met de naam 'Personen'. In deze tabel heb ik vier velden: persoonID(autonummering), Naam (varchar), Leeftijd(integer), Datum(datetime).

    Hieronder een paar stukjes code welke weergeven hoe je met en zonder parameters moet werken. In de code ga ik ervan uit dat er al een connectie is gemaakt met de database, en de query ook gekoppeld is aan deze database.

    Als eerste zal ik een stukje code laten zien waarbij er geen gebruik wordt gemaakt van parameters. Je kunt dan goed het verschil zien tussen een query met parameters en een query zonder parameters.

      with qryInsertPersoon do
      begin
        SQL.Clear;
        SQL.Text := 'INSERT INTO Personen(naam, leeftijd, datum) ' +
                    'VALUES('                                      +
                    ' ''Dees'' , 22, ''' + FormatDateTime('yyyy-mm-dd', Now) + ''')';
    
        try
          ExecSQL;
        except
          on e:Exception do
            ShowMessage('Wooopsiee die INSERT ging fout');
        end;
      end; 
    
    
    Zoals je kunt zien worden de waardes die in de query worden weggeschreven gevuld, omdat dit in goed SQL moet, ben je genoodzaakt met quotjes te werken. Een andere oplossing voor dit is het werken met de functie QuotedStr(); deze zorgt zelf voor de quotjes, dit neemt nog niet heb probleem met datum-formaat weg bij de de queries. Op de plaats van de vaste gegevens, kunnen ook variabelen worden ingevoerd, deze moeten dan worden gezet als het FormatDateTime voorbeeld in de query.


    Dit stukje code is gebaseerd op een gewone TQuery uit Delphi.
      with qryInsertPersoon do
      begin
        SQL.Clear;
        SQL.Text := 'INSERT INTO Personen(naam, leeftijd, datum) ' +
                    'VALUES(:naam, :leeftijd, :datum)';
    
        ParamByName('naam').Value     := 'Dees';
        ParamByName('leeftijd').Value := 22;
        ParamByName('datum').Value    := Date;
    
        try
          ExecSQL;
        except
          on e:Exception do
            ShowMessage('Wooopsiee die INSERT ging fout');
        end;
      end;
    
    

    Omdat het vullen van parameters met een TADOQuery net even iets anders gaat dan een gewone TQuery, ook voor de TADOQuery een stukje code:
      with qryInsertPersoon do
      begin
        SQL.Clear;
        SQL.Text := 'INSERT INTO Personen(naam, leeftijd, datum) ' +
                    'VALUES(:naam, :leeftijd, :datum)';
    
        with Parameters do
        begin
          ParamByName('naam').Value     := 'Dees';
          ParamByName('leeftijd').Value := 22;
          ParamByName('datum').Value    := Date;
        end;
    
        try
          ExecSQL;
        except
          on e:Exception do
            ShowMessage('Wooopsiee die INSERT ging fout');
        end;
      end;
    
    
    Een voorbeeld van een parameter in een SELECT-statement:
      with qrySelectPersoon do
      begin
        SQL.Clear;
        SQL.Text := 'SELECT naam, leeftijd ' +
                    'FROM Personen '         +
                    'WHERE datum = atum '  +
                    'ORDER BY naam';
    
        Parameters.ParamByName('Datum').Value := Date;
    
        try
          Open;
        except
          on e:Exception do
            ShowMessage('Het openen van de tabel is mislukt');
        end;
      end;
    
    
    Let op, deze query is gemaakt met een TADOQuery, bij de TQuery moet het vullen van de parameter op een andere manier worden gedaan:
        ParamByName('Datum').Value := Date;
    

    Tot slot

    We hebben nu gezien hoe makkelijk parameters werken in een query. Er hoeft voortaan niet moeilijk meer te worden gedaan met quotes, speciale karakters en datum formaten. Ook is de query een stuk overzichtelijker door het gebruik van parameters. Ik hoop dat jullie er nog lang van mogen genieten. Voor vragen kun je terecht op het forum.

  • Nieuwste forumberichten

    VideoRipper

    Aaarhg! Toetsenbordperikelen: ANSI vs ISO

    Ik snap ook niet dat veel mensen (buiten gamers) genoegen nemen met van die fancy pruttoetsenborden.
    Zelfs de goedkope "K120" van €10

    VideoRipper Yesterday, 17:23 Go to last post
    Paul-Jan

    Aaarhg! Toetsenbordperikelen: ANSI vs ISO

    Eeriljk is eeriljk, je komt ook wel van een heel fijn toetsenbord af. Als die van mij niet zo veel koffie had gedronken, had ik er ook nog steeds heerlijk

    Paul-Jan Yesterday, 15:56 Go to last post
    VideoRipper

    Aaarhg! Toetsenbordperikelen: ANSI vs ISO

    Ja sorry hoor, dit is een mini-rant.

    Al jaren doe ik vol genoegen mijn werk op een bepaald soort toetsenbord en na 10 jaar trouwe

    VideoRipper Yesterday, 10:43 Go to last post
    cpri

    Decode EPC

    Thanks dat werkt.
    Ik was zelf bezig met de TBase64Encoding component.
    Waar ik dus niet uitkwam/niet doorhad was de DecodeStringToBytes functie.

    cpri 15-Jun-21, 13:50 Go to last post
    VideoRipper

    Decode EPC

    Zoiets?

    Delphi Code:
    1. uses
    2.   NetEncoding;
    3.  
    4. function DecodePec(ABase64: string): string;
    5. var
    6.   MyValue: TArray;

    VideoRipper 15-Jun-21, 13:03 Go to last post
    cpri

    Decode EPC

    Hallo,

    Ik krijg van een apparaat een JSon string terug met daarin een EPC code.
    Deze EPC code is hierin als volgt opgeslagen "base64url-encoded

    cpri 15-Jun-21, 12:15 Go to last post