Tijdens het programmeren van één van mijn projecten liep ik tegen een probleem op met het gebruik van combo boxen in combinatie met query/tabel resultaten uit een tabel of query. Het probleem dat zich voordeed was als volgt: je maakt drie combo boxen. In de eerste combobox wordt de naam van een tabel geselecteerd. Ik koos ervoor om dit met een value list te doen. In een tweede combobox wordt dan de mogelijkheid gegeven om uit alle velden uit die tabel te selecteren d.m.v. de SQL statement. De derde combobox zorgt ervoor dat alle mogelijke waarden uit dat veld wordt geselecteerd.
Eerst wordt een numeriek gegeven geselecteert als waarde in de derde combobox en dan combobox twee op een veld met veldtype “text” gezet. Wanneer je vervolgens weer een keuze probeert te maken uit de beschikbare waarden, zegt het systeem: “Item not in list” hoewel het item wel degelijk in de lijst staat. Het lijkt er op dat de combobox een data type heeft. Onterecht, uiteraard.
Om dit probleem te omzeilen, is het mogelijk om de combobox die alle mogelijke waarden uit een veld laat zien op “bound to column” en 0 te zetten. Daarmee krijgt de combobox geen index wat mogelijk het probleem veroorzaakt. Om de waarde van de combobox uit te lezen, gebruik je me.combobox.column(0). Zo komt alles op zijn pootjes terecht.
Ik heb deze vraag in het Engels via het forum van tek-tips.com gesteld. Via deze link zijn alle technische details beschikbaar.
Om het zoeken in verschillende data typen mogelijk te maken en toch flexibel te houden, is het mogelijk om te werken met TableDefs.Fields.Type. In onderstaand voorbeeld heb ik dit geprobeerd uit te werken:
varFieldType = CurrentDb.TableDefs(cboTable).Fields(cboField1).Type
Select Case varFieldType
Case 1, 2, 3, 4, 5, 6, 7, 20
strMainWHERE = strMainWHERE & Me.cboField1 & "= " & Me.cboSelection1
Case 8
strMainWHERE = strMainWHERE & Me.cboField1 & "= #" & Me.cboSelection1 & "#"
Case 10
strMainWHERE = strMainWHERE & Me.cboField1 & "= '" & Me.cboSelection1 & "'"
Case 11
MsgBox ("The selected field is an OLE object field or an hyperlink field. It is not possible to make a selection on these field types.")
Exit Function
Case 12
MsgBox ("The selected field is a memo field or a hyperlink field. It is not possible to make a selection on these field types.")
Exit Function
Case 15
MsgBox ("The selected field is a ReplicationID field. It is not possible to make a selection on these field types.")
Exit Function
Case Else
MsgBox ("The datafield type has not been determined. At this point you cannot use " & Me.cboField1 & " as a selection. Contact the database support officer for help." & _
vbCrLf & vbCrLf & "Table: " & Me.cboTable & vbCrLf & "Field: " & Me.cboField1 & vbCrLf & "Type found: " & varFieldType)
Exit Function
End Select
Excuses voor de wat onbeholpen layout van bovenstaande tekst. In bovenstaande tekst is me.cboTable een combo box waarin een tabel is geselecteerd. me.cboField1 is de eerste combobox waarin een veld uit de tabel van me.cboTable is geselecteerd. Me.cboSelection1 is een combobox waarin de waarde is geselecteerd waarop gezocht moet worden.
Met bovenstaande code select case kan vervolgens de datatype van het veld uit de tabel worden vastgesteld. Vervolgens wordt de juiste zoek methode toegepast, afhankelijk van het datatype. Vooralsnog heb ik niet meer mogelijke datatypen dan onderstaand overzicht kunnen vinden:
YesNo – 1
Byte – 2
Integer – 3
Long – 4
Number – 4
AutoNumber – 4
Currency – 5
Single – 6
Double – 7
DateTime – 8
Text – 10
OLEobject – 11
Memo – 12
Hyperlink – 12
ReplicationID – 15
Decimal – 20
Nog vragen? Meld ze in de comments. Mocht je aanvullende datatypen hebben gevonden met hun integers, dan vraag ik je die ook in de comments aan te vullen.
In deze tijd houden veel bedrijven de hand op de knip. Eén van de gebieden waar in deze tijd op bezuinigd wordt, is information technology (=IT). IT brengt over het algemeen grote investeringen met zich mee. Denk maar eens aan investering in project managers, change managers, software architecten, programmeurs en de beheersorganisatie van zowel het technisch beheer als het functioneel beheer. Dit alles is nodig voor een goede en samenhangende infrastructuur van hardware en software.
Wanneer je als (groot) bedrijf minder kan investeren, wordt het misschien aantrekkelijk te denken aan de zogenaamde “quick and dirty” oplossingen. De afgelopen maanden heb ik mij bij een bank beziggehouden met het bouwen van “quick and dirty” oplossingen bij een bank. Ook bij deze bank was het geld op en moesten er toch (passende!) oplossingen komen voor een aantal vraagstukken. Bij het bouwen van oplossingen gaat mijn voorkeur uit naar het gebruik van Microsoft Office. Microsoft Office is een veelgebruikte alles-in-één standaard die spreadsheet, database, mail en presentatie in één pakket aanbiedt. De Visual Basic editor is een krachtige tool die de mogelijkheid geeft om deze applicaties met elkaar te combineren.
Ik richt mij vaak op een klein onderdeel binnen de organisatie die met software gemakkelijker gemaakt zou kunnen worden. Vervolgens wordt met de hulp van een iteratief proces de applicatie geschreven om het proces te vereenvoudigen. Een iteratief proces zorgt voor constante communicatie over wensen en mogelijkheden over en weer; zelfs tijdens het bouwen van de applicatie. De klant kan hierdoor tijdig bijsturen. In deze werkwijze is er directe communicatie tussen de programmeur en de eindgebruiker. Hierdoor wordt in een korte tijd een applicatie opgetuigd die maximaal voldoet aan de wensen van de klant. Deze wijze van werken dekt het “quick” gedeelte.
Blijft er nog een “dirty” gedeelte over. Potentiële opdrachtgevers realiseren zich niet altijd wat de risico’s zijn van het bouwen van “quick and dirty” oplossingen. Een aantal misverstanden:
“Quick and dirty” oplossingen zijn samenhangende oplossingen. Vergeet het maar. Bij samenhangende oplossingen moet er gekeken worden naar de impact van de nieuw te ontwikkelen applicatie op de reeds bestaande applicaties en procedures. Dat duurt te lang, kost dus teveel tijd en daarmee teveel geld. De “quick and dirty” oplossing is een oplossing die een klein aantal processen vereenvoudigt en zich uitsluitend daarop concentreert.
“Quick and dirty” oplossingen hoeven niet getest te worden. Gebruikersacceptatietesten zijn over het algemeen ondergeschoven kindjes. Dat vind ik onverstandig. In testplannen vind je de bedoelde en onbedoelde aannames van programmeurs terug. De logische testgevallen beschrijven in principe de requirements waaraan de software moet voldoen. Tijdens het testen wordt duidelijk of de geschreven oplossing ook daadwerkelijk aansluit bij de wensen van de organisatie. Bovendien worden tijdens het testen de laatste softwarefouten gevonden en opgelost. Tenslotte zorgt het testen ervoor dat de gebruikersorganisatie leert om te gaan met de software. Dit voorkomt veel “hoe moet dit?” vragen.
“Quick and dirty” oplossingen hoeven niet in beheer genomen te worden. Dit is een complete misvatting. Er moet juist goed over beheer nagedacht worden. Ik ben nog nooit een programma tegengekomen dat nooit gewijzigd hoefde te worden. Organisaties ontwikkelen zich en de software groeit met de organisatie mee. Ook de “quick and dirty” oplossingen. De vragen: “Wie gaat het aanpassen en hoe?” worden pas gesteld, wanneer de eerste aanpassingen moeten worden gemaakt. Dat is dus te laat.
De “quick and dirty” oplossingen brengen vier uitzonderlijk grote risico’s met zich mee die alle aandacht verdienen:
Vroeg of laat leidt een reeks van “quick and dirty” oplossingen tot wat ik “eilandautomatisering” noem. Dit is een fenomeen waarin geautomatiseerde processen met onsamenhangende software verbonden zijn. Het onderhoud van dit soort oplossingen is moeilijk.
Door “quick and dirty” oplossingen worden applicaties op applicaties gebouwd. Deze ontwikkeling is niet gezond als structurele oplossing. Wanneer de onderliggende applicatie zou wijzigen, moet(en) de bovenliggende applicatie(s) ook worden gewijzigd.
Regelmatig brengen leveranciers nieuwe versies van hun software uit (denk maar aan Microsoft die regelmatig een nieuwe Windows of Office versie uitbrengt). De updates worden vaak centraal door een IT organisatie aangestuurd. De “quick and dirty” oplossingen zijn vaak niet bij IT organisaties in beeld (anders hadden zij de software in beheer gehad). Bij updates wordt nog wel eens vergeten dat sommige applicaties niet meer werken in de nieuwe release. Dat wordt pas opgemerkt wanneer de nieuwe release in productie is genomen. Dat is dus te laat.
Van “quick and dirty” oplossingen wordt de kennis vaak niet goed geborgd. Zoals bij elke oplossing moet ook een “quick and dirty” oplossing worden voorzien van een handleiding, waarin de kennis is vastgelegd. Daardoor verzandt een applicatie niet op het moment dat de persoon die het meeste heeft gewerkt met de applicatie de organisatie verlaat.
Het lijkt er haast op dat je als organisatie niet aan “quick and dirty” oplossingen moet beginnen. Zo simpel is het niet, zeker niet in deze tijd. Ik begon het artikel met de woorden: “Organisaties houden de hand op de knip”. Aan de andere kant moet de “show” wel gewoon doorgaan, het liefst zo efficiënt mogelijk. Dan kunnen organisaties behoorlijk profiteren van de “quick and dirty” oplossingen.
Een andere kans die “quick and dirty” oplossingen voor organisaties geven, is dat dit soort oplossingen kunnen dienen als prototype. Wanneer een organisatie niet helemaal weet op welke manier een proces ingericht moet worden, kan via deze methode op eenvoudige en goedkope wijze een prototype gebouwd worden dat daarna fungeert als model voor de integrale oplossing in de bestaande IT systemen van de organisatie. Deze wijze van werken is bijzonder krachtig en wordt vaak onderschat.
Tenslotte is er nog een groep organisaties die helemaal geen geld hebben voor grote IT systemen. De oplossingen in bijvoorbeeld Microsoft Office zijn dan geen “quick and dirty” oplossing, maar bieden deze organisaties ondersteuning bij hun bedrijfsprocessen. Op mijn plank ligt bijvoorbeeld een oplossing in Microsoft Excel, die de oppasuren voor gastouders registreert en daarover periodiek rapporteert. Een naadloze oplossing die de gastouder veel tijd zou kunnen schelen.
Meer weten? Neem gerust contact met mij op. Dat kan via e-mail of als commentaar op deze entry.
Ik adviseer altijd MS Access als database omgeving. Waarom? Of je het vervelend of niet; Microsoft is nu éénmaal marktleider in office software. Op dit moment ben ik met een aantal database projecten bezig. Niet zozeer vanwege het database aspect, maar meer omdat de koppeling tussen MS Access en MS Outlook gigantische efficiëntie oplevert.
In mijn huidige project worden openstaande acties verzameld in een database. Deze acties hebben stamgegevens, waaronder een verantwoordelijke voor de open actie, die er verantwoordelijk voor is om de actie af te handelen en uiteindelijk te sluiten. Door effectief gebruik te maken van rapporten, kunnen de openstaande acties eenvoudig gemonitored worden door de control afdeling. Hiervoor heb ik overzichten ontwikkeld die kijken naar een peildatum en vervolgens alle acties die per die peildatum zijn verlopen, op de lijst zetten.
Nu komt de kracht: door het ingeven van een unieke actiecode, kan de openstaande actie met één druk op de knop via e-mail naar de actiehouder worden verstuurd al of niet met commentaar, aanwijzingen en andere verzoeken. Er kan ook voor gekozen om periodiek alle openstaande acties te versturen naar alle verantwoordelijken. Daarmee bedoel ik dus niet dat alle verantwoordelijken alle openstaande acties krijgen te zien. Ik bedoel dat elke verantwoordelijke een overzicht krijgt van zijn (of haar) eigen openstaande actiepunten.
Het monitoren van de openstaande acties loopt via een tweede tabel. Elke actie kan één of meerdere ‘commentaren’ hebben. Door op deze wijze te werken, kan er een historie worden opgebouwd per actie. Deze historie wordt uiteraard als bijlage meegestuurd met de e-mail waarin gevraagd wordt om het actiepunt te sluiten.
Op deze manier werken wordt er met minimale inspanning, maximaal resultaat bereikt. Weg met de overzichten in Excel, waar met allerlei moeilijke filters de lijsten moeten worden gegenereerd. Weg met het apart schrijven van alle e-mails aan de verantwoordelijken en het vervolgens vinden van de juiste bijlagen. Verantwoordelijken krijgen uitsluitend hun eigen actiepunten te zien, waardoor zij minder tijd kwijt zijn met het lezen van rapporten en het vinden van hun eigen actiepunten. Via de export functie in MS Access kunnen rapporten in Excel, Word en zelfs in het mooie SnapshotView worden opgeleverd.
Bonus: werken met filters. Heel vaak kom ik bij klanten veel dezelfde rapporten tegen in de databases. Het verschil: de selecties in de rapporten. In mijn applicaties formuleer ik selecties en een sortering. Elke selectie triggert een filter. Dat filter wordt vervolgens op het rapport toegepast en voilà… via één rapport kunnen rapportages voor verschillende behoeften worden gemaakt. Het voordeel: het geheel wordt beter onderhoudbaar. Stel je voor dat wanneer er iets wijzigt in een rapport. In de ‘oude’ situatie moesten alle rapporten met de verschillende selecties gewijzigd worden. Nu wordt er op één plaats gewijzigd en alle rapporten voor de verschillende doelgroepen zijn in één keer klaar.
De keerzijden
Er zitten twee vervelende keerzijden aan MS Access. Op de eerste plaats is kennis van MS Access niet zo wijdverspreid als bijvoorbeeld kennis van MS Excel. Hierdoor wordt er vaker gekozen voor Excel. Bovendien werkt MS Access het zogenaamde ‘eiland automatisering’ in de hand. Het is goed om voordat er met projecten wordt begonnen, te kijken wat de informatiebehoefte over de hele breedte is. In mijn huidige omgeving lijkt er bewust gekozen te worden voor eiland automatisering. Op zich niets mis mee, wanneer de gegevens écht op zich staan. Wellicht is combineren beter!
Over deze twee zaken moet goed worden nagedacht, vooral over het onderhoud en beheer van de database zodra deze in productie wordt genomen. In deze tijd zijn banen niet meer zeker… dat geldt voor zowel de werkgever als de werknemer. Als één van beide ‘de stekker eruit trekt’, zou het wel goed zijn om het beheer en onderhoud van de database goed geregeld te hebben. Dit wordt vaak onderbelicht en onderschat.
Meer weten? Neemt U vrijblijvend contact met mij op om te kijken wat de mogelijkheden zijn.
Sinds kort deel ik mijn ervaringen met bedrijven via Twitter. Ik ben van mening dat het op deze manier gebruiken van Twitter erg waardevol kan zijn voor bedrijven. Ik zou de regels simpel houden: één tweet per ervaring per gebruik. Dus één busreis van A naar B levert één tweet op. De busreis van B naar A kan weer een tweet opleveren.
De voordelen voor het bedrijf: ze zijn minder tijd kwijt aan het lezen van ervaringen óf ze krijgen veel (waardevolle) feedback. Het bespaart vervolgens kosten. Het bedrijf kan in heel korte tijd hele recente trends ontdekken en daarop al of niet anticiperen / reageren
Twitter een effectief middel in het delen van klantervaringen. Wat vind jij?
november 5th, 2009 in
Uncategorized |
No Comments
U kent vast die adressenlijsten wel: ze staan in Microsoft Word. De klant wil graag dat de adressen worden gebruikt in een mailing. Grootste probleem: de adressen zijn niet allemaal even lang (lees: heeft hetzelfde aantal regels per adres).
Hieronder vindt U een Excel macro, die adressen die nu onder elkaar staan (al of niet met witregels ertussen) naast elkaar in Excel zet, zodat U ze makkelijk kunt gebruiken in een mailing.
Sub AdressenlijstConverter()
Dim nRow As Double
Dim nColumn As Double
Dim cTeller As Double
Dim eTeller As Double
Dim rTest As Range
Application.ScreenUpdating = False
Range("A1").Select
nRow = 1
nColumn = 1
cTeller = 1
eTeller = 1
Do While eTeller <> 100
If IsEmpty(Cells(nRow, nColumn).Value) Then
cTeller = 1
eTeller = eTeller + 1
Cells(nRow, nColumn).EntireRow.Delete
Else
eTeller = 1
If cTeller = 1 Then
cTeller = cTeller + 1
nRow = nRow + 1
Cells(nRow, nColumn).Select
Else
Range("A1").Cells(nRow, nColumn).Cut
Range("A1").Cells(nRow - 1, cTeller).Select
ActiveSheet.Paste
Cells(nRow, nColumn).EntireRow.Delete
Range("A1").Select
cTeller = cTeller + 1
End If
End If
Loop
Application.ScreenUpdating = True
End Sub
Kopieer deze macro in de visual basic editor in Excel. Zet de adressenlijst in kolom A. En … draaien maar! Nog vragen? Zet ze in een reactie.
oktober 23rd, 2009 in
MS Excel,
Mailmerge |
4 Comments
Ik las zojuist dit artikel in het Noordhollands Dagblad. Ik kon het niet laten om op dit artikel te reageren.
Het maken van een videopresentatie voor de verkoop van een huis, mist volgens mij totaal zijn doel. Ik heb regelmatig de rol van potentiële koper gehad en video’s zeggen mij weinig. Sterker nog: het is alsof je een rondleiding online krijgt. Een rondleiding wekt emoties op bij mij; immers bij een rondleiding gaat een huis ‘leven’. Bij een rondleiding met de makelaar van de verkopende partij kan ik op die emotie reageren en vragen stellen. Bij een videopresentatie kan ik dat niet. Daarmee wekt de videopresentatie een bepaalde verwachting die onjuist kan zijn. Tijdens een ‘live’ rondleiding vind ik de kans op teleurstelling groter.
Naast de kosten voor het maken van een videopresentatie van een woning (die zijn volgens mij gigantisch), vind ik het medium ‘film’ ongeschikt. Mijn voorkeur gaat uit naar foto’s om zo bij de feiten te blijven. Wanneer de foto’s mij bevallen, kan ik tijdens een ‘live’ rondleiding vragen stellen en anticiperen op mijn emotie.
Niet lang nadat ik hoorde dat ik weer een baan had, heb ik dit artikel in het Noordhollands Dagblad gepubliceerd.
Artikel “Werkloos zijn is hard werken”
oktober 7th, 2009 in
Publicaties |
No Comments
Herkent U dit? U bent een kapitaal kwijt aan printkosten. U betaalt voor een printer, U betaalt voor inkt of toner en U bent een kapitaal kwijt aan papier. Dan heb ik het nog niet gehad over printen in kleur, want dat is helemaal niet te betalen. Niet voor niets hebben bedrijven het printen in kleur in de ban gedaan.
De oplossing? U kent hem wel: PDF. Regelmatig komt U PDF bestanden tegen, sterker nog, misschien gebruikt U ze al. Heeft U wel eens stilgestaan bij het gebruik van PDF en mailinglijsten? Heel in het kort gezegd, komt dat op het volgende neer:
- U gebruikt Microsoft Office
- In MS Word maakt U vervolgens een brief die U voorziet van mailmerge velden
- In MS Excel legt U een adressenlijst aan met de variabele gegevens
- Via mailmerge koppelt U beide bestanden aan elkaar
- Automatisch worden de afzonderlijke brieven weggeschreven
- Vanuit het Excel bestand worden vervolgens de afzonderlijke brieven naar de ontvangers gemailed
Geen printer nodig! Geen papier nodig! Geen inkt of toner nodig! Geen postzegel nodig! Geen tijdverlies! En waar gewenst in full color!
Meer weten? Neemt U vrijblijvend contact met mij op.
Vandaag ontving ik een uitnodiging in mijn e-mail voor een sessie “Strategic Intelligence”. Eh? Business intelligence is iets waar ik wel van gehoord is, maar “strategic intelligence”. Dus… maar even verder lezen.
Voor wie?
Voor u die iedere dag belangrijke beslissingen neemt en dat wenst te doen op basis van de juiste informatie. Voor managers die grip willen krijgen op de veelheid aan informatie in hun onderneming en die informatie optimaal willen managen. Voor allen die de kennis en ervaring van hun medewerkers wensen in te zetten en de slag willen maken naar strategic intelligence. Voor managers die verder willen kijken dan alleen informatie vanuit “google”. Voor beslissers die proactief de veranderingen willen zien van de dynamiek in hun externe omgeving.
Eh…? dit lijkt mij informatiemanagement (zie definitie Wikipedia). Ik vind dit helemaal een vreemde zin: Voor allen die de kennis en ervaring van hun medewerkers wensen in te zetten en de slag willen maken naar strategic intelligence. Ik zie niet wat “inzet van kennis en ervaring van medewerkers” te maken heeft met “intelligence”. Wanneer je de kennis en ervaring van een verkoper/vertegenwoordiger inzet, dan krijg je verkopen en zeker geen “intelligence”. Immers, de meeste verkopers houden absoluut niet van de administratie die noodzakelijk is om überhaupt “intelligence” te genereren.
In het woord “strategic intelligence” zit het woord “strategisch”. Het woord “strategisch” heeft al gauw te maken met de top in het bedrijfsleven van vooral grote bedrijven. Mij geven de woorden “strategic intelligence” het gevoel van iemand die redenen zoekt om € 50 per uur boven op het gangbare uurtarief te zetten. In de praktijk heeft informatiemanagement niet alleen te maken met “strategie”, maar (en misschien nog wel meer) met het tactische en operationele niveau.
Zo heb ik ook al de woorden “enterprise intelligence” en “competitive intelligence” gezien. Doe mij een lol, zeg! Informatiemanagement verandert écht niet als je er een ander label op plakt. Het blijft nog steeds informatiemanagenent.
september 22nd, 2009 in
Uncategorized | tags:
Intelligence |
No Comments