Welkom op het developersblog van 4DotNet
Op dit developersblog zullen onze eigen ontwikkelaars hun praktijkervaringen en andere inseressante onderwerpen plaatsen.

Berichten van Rene Kapitein

Rene Kapitein

Remember The Milk – Deel 1

Om een beetje overzicht te houden bij de taken die ik moet uitvoeren, vind ik het makkelijk om een lijstje te maken. In Outlook kun je taken toevoegen en deze zijn vervolgens weer te synchroniseren met een mobiele telefoon. Dit werkt op zich best goed.
Als je net als ik op meerdere computers werkt, is het handiger om het lijstje online bij te houden. Hiervoor bestaat een handige applicatie: Remember The Milk, ook wel RTM genoemd. De professionele versie is niet gratis maar de instapversie wel. Je kunt taken maken met verschillende categorieën (werk, hobby, etc.) en tags toevoegen om diverse selecties mee te maken. Het aardige van Remember The Milk is dat je ook de mogelijkheid hebt om een e-mail te sturen die vervolgens automatisch omgezet wordt naar een taak. Kijk, dan wordt het interessant voor ons soort mensen! Ik heb een kleine applicatie gebouwd om vanuit een tabel met datums een aantal herinneringen aan te maken en deze te e-mailen naar mijn eigen RTM e-mail adres. In een volgend bericht wil ik hier verder op in gaan.

Rene Kapitein

Als Pasen op een vrijdag valt

Nee het is geen typefout: er staat echt Pasen in de titel en geen Kerst! Het is een beetje een dooddoener; een antwoord dat je bijvoorbeeld kunt geven als je kinderen vragen wanneer we naar Disneyland gaan… “Als Pasen en Pinksteren op dezelfde dag vallen”, zeg je dan, of “Als Pasen op een vrijdag valt”. Dit jaar valt eerste Kerstdag echter wel op een vrijdag. Er zijn vast veel mensen die het jammer vinden dat ze dit jaar op tweede Kerstdag geen extra vrije dag hebben. Het is nu eenmaal een vaststaand feit dat we ieder jaar op 25 en 26 december Kerst vieren. De datum waarop het Paasfeest gevierd wordt, is minder makkelijk te achterhalen.
Lees verder…

Rene Kapitein

Werken tijdens de feestdagen

Twee vragen, één oplossing

De afgelopen weken kreeg ik van twee verschillende klanten een vrijwel identieke vraag. De ene klant wilde een uitbreiding in een bestaand programma om bij een bepaalde datum de eerstvolgende werkdag te bepalen. De andere wilde in een document een datum afdrukken waarop uiterlijk gereageerd kan worden. Voor deze datum geldt als regel dat men 20 dagen de tijd krijgt om te reageren. Als oplossing voor beide vragen heb ik een SQL functie gebruikt.


Lees verder…

Rene Kapitein

Heeft DTS de X-factor?

Bij DTS zullen de meeste lezers aan het volgende bedrijf denken: DTS Meppel. Dat is natuurlijk prima, niets mis mee. Ik vermoed echter dat er ook lezers zijn die de afkorting DTS kennen vanuit SQL Server. DTS staat dan voor Data Transformation Services.  Over die DTS gaat het hier. In de Enterprice Manager van SQL Server 2000 heb je de mogelijkheid om een DTS package te maken.  Vanaf SQL Server 2005 is DTS in mijn ogen volwassener geworden.  De DTS functionaliteit zit echter wel een beetje verstopt en is verweven met Visual Studio. Deze integratie kom je ook tegen in de naamgeving SSIS (SQL Server Integration Service).  Onder deze afkorting kun je op Internet meer voorbeelden vinden.

Een probleem waar jullie natuurlijk zelf nooit tegenaan lopen maar andere ontwikkelaars wel, is dat het soms lastig is om een oude applicatie die je ooit hebt geschreven na een paar maanden / jaren nog te begrijpen. Om nog maar te zwijgen over de ellende die je tegenkomt wanneer je hele lappen code van een collega moet bestuderen.  Met DTS heb je de mogelijkheid om op een gestructureerde manier een proces samen te stellen.  In plaats van een hele brij code is het meer een kwestie van componenten bij elkaar slepen en hierbij de juiste properties in te stellen.

Ok, tijd voor een voorbeeld:


Lees verder…

Rene Kapitein

Registry File

De laatste tijd ben ik weer regelmatig bezig met het maken van kleine aanpassingen in bestaande Visual Basic 6 applicaties. Ik heb daarbij vaak heel veel vensters met code geopend. CTRL + F4 dan maar om alles af te sluiten. Het is daarbij vervelend dat je in VB6 niet bij de instellingen kunt opgeven dat je het venster met code maximaal wilt vergroten. Het schijnt dat VB5 deze optie nog wel had.

Niet voor één gat te vangen, vond ik de registry instelling waarmee je deze vergeten optie zelf kunt instellen. Ik dacht dit even snel te doen met uitvoeren –> regedit.


Lees verder…

Rene Kapitein

Dynamische SQL

Voor een uitbreiding van een website bij mijn opdrachtgever kreeg ik laatst het verzoek om een stored procedure te maken waarmee je documenten uit een database kunt vinden. Als zoekcriterium kun je hiervoor oa. een aantal woorden invullen dat binnen de tekst moet voorkomen. Voor deze stored procedure heb ik dynamisch SQL gebruikt.  Dynamisch heeft hier de betekenis dat je de query runtime opbouwt en dan pas uitvoert. Deze techniek zul je niet vaak gebruiken, omdat juist de kracht van stored procedures is dat deze vooraf gecompileerd zijn en daardoor snel het gewenste resultaat opleveren. Ook zul je hierbij bewust moeten zijn van het gevaar van SQL injection. Bij deze opdracht heb ik toch voor dynamische SQL gekozen, omdat het aantal zoekwoorden kan variëren van 0 tot meer dan 10.

De totale stored procedure (SP) is te lang om hier in z’n geheel weer te geven. Dit verhaal zou dan ook voor sommigen saai en langdradig worden en dat is nu net wat je niet verwacht bij een artikel met ‘Dynamisch’ in de titel. Om de vaart erin te houden, wil ik in dit blog daarom de belangrijkste onderdelen even kort benoemen.  Wie weet helpt het iemand op weg die ook met dynamisch SQL wil werken. Ik ben overigens best benieuwd naar andere voorbeelden van geschikte toepassingen van deze techniek.


Lees verder…

Rene Kapitein

Tussenvoegsels

    Tussenvoegsels, niet iedereen heeft ze in zijn naam maar als je bijvoorbeeld De Boer, Van der Vaart of Van ‘t Schip heet, dan weet je waar we het over hebben. Het komt geregeld voor dat je met een SQL query een oplijsting moet maken waarin je de volledige naam wilt tonen. In een database zijn de tussenvoegsels vaak in een apart veld (kolom) opgeslagen. Een veelgebruikte oplossing is dan om eerst de achternaam weer te geven, dan een komma, gevolgd door de voornaam / voorletters en ten slotte de tussenvoegsels.

    Dit geeft dan:

    Boer, R. de

    Vaart,  R. van der

    Bergkamp, D.

    Schip, J. van ‘t

    Op zich een goede manier om namen weer te geven,  maar soms wil je liever de namen op een normale manier tonen.

    R. de Boer

    R. van der Vaart

    D. Bergkamp

    J. van ‘t Schip


    Met onderstaande selectie kun je de naam van een persoon op een normale manier weergeven, zonder overbodige spaties.

SELECT voetballer = LTRIM(RTRIM(ISNULL(voorletters, '') + ' '
                  + ISNULL(tussenvoegsels, '')) + ' '
                  + ISNULL(naam,'') )
FROM tblspeler
Rene Kapitein

distributiegroepen in Outlook

Stel je hebt net als ik een lijst met contactpersonen in Outlook en maakt dankbaar gebruik van de distributiegroepen.  Het is dan niet denkbeeldig dat er eens een vraag komt van iemand die dezelfde distributiegroepen ook wil gebruiken. Denk bijvoorbeeld aan een groep collega’s of een overzicht van commissies.

Omdat mijn Outlook contactpersonen gesynchroniseerd worden met de contactpersonen in mijn mobiele telefoon, staan privé en zakelijke personen door elkaar.  De zakelijke distributiegroepen en de bijbehorende e-mail adressen wilde ik wel delen. De personen die alleen voor mij interessant zijn, hoef ik niet te delen.

Voor ‘normale’ contactpersonen heeft Microsoft diverse exportmogelijkheden. Je kunt alles naar een bestand exporteren en in dit bestand gaan filteren. Voor distributiegroepen is er volgens mij maar één manier die echt goed werkt en dat is export naar een .pst bestand. Een .pst bestand gebruik je ook wanneer je een backup wilt maken of wanneer je het geluk hebt dat je een nieuwe computer mag inrichten. Om snel een .pst bestand te krijgen met alleen de relevante zakelijke contactpersonen en distributiegroepen, heb ik de volgende methode toegepast.


Lees verder…

Rene Kapitein

Virus, I kill you

Herkenbaar voor wie net als ik in de IT werkt:  zodra je bij familieleden of kennissen vertelt wat voor werk je doet, is de kans groot dat ze een printerprobleem hebben of een computer die met een virus besmet is.


Lees verder…

Rene Kapitein

een Update statement met een Inner Join

Een update statement in SQL Server. Ik kom ze bijna dagelijks tegen. Meestal is de syntax erg eenvoudig. Soms is de where clause wat uitgebreider, wanneer de update afhankelijk is van de inhoud van een andere tabel. Hieronder een voorbeeld van een update query zoals ik ze tot nu toe meestal maakte.

UPDATE MetaLoginMenu

SET Positie = 20

WHERE MetaMenuID =

(

SELECT MetaMenuID

FROM MetaMenu

WHERE MenuNaam = ‘mnuAbout’

)

AND MetaLoginID = 3

In dit voorbeeld gaat het nog om slechts twee tabellen. In de praktijk kunnen dit er al snel meer zijn, waardoor de where clause wat onoverzichtelijk wordt.  Een constructie met een inner join kan dan uitkomst bieden.

UPDATE L

SET Positie = 20

FROM MetaLoginMenu L INNER JOIN

Metamenu M ON L.MetaMenuID = M.MetaMenuID

AND MenuNaam = ‘mnuAbout’

AND MetaLoginID = 3

De onderste variant lijkt op het eerste gezicht wat vreemd: er staat geen where in de query! Toch is het resultaat van beide queries identiek. Qua performance is er amper verschil merkbaar. Bij een meer uitgebreide update kies ik de laatste tijd steeds vaker voor de onderste variant.