Eigenschapsvenster niet zichtbaar in Access 2007 – 2010

Een collega kwam mij vragen hoe hij het eigenschapsvenster in access 2007 te zien kon krijgen.
Dit lukte hem onder geen enkel beding.
De toetsencombinatie alt+enter haalde niets uit en een klik op de knop ‘Property sheet’ in het ‘Design’ menu bracht evenmin het eigenschapsvenster naar voren.

Oplossing:
Druk alt F11 in om de vb editor te openen. Zorg ervoor dat het venster direct (immediat window) zichtbaar is. Indien dit niet het geval is, druk op Ctrl+G.

Tik volgende in:
CommandBars(“Property Sheet”).Enabled = True
en druk op enter. Vanaf nu zal het eigenschapsvenster wel getoond worden.

Visual Basic 6.0 compileren op windows 7 werkt niet op windows XP

Steeds, als ik een VB6 programma op een windows 7 computer compileerde, en het uitvoerbaar bestand vervolgens op een computer met een OS lager dan windows7 wenste uit te voeren kreeg ik de foutmelding:
Class does not support Automation or does not support expected interface.

Reden:
Microsoft ondersteunt niet langer het primaire interop-assembly voor ADO en niet langer Visual Basic 6.

Oplossing voor 64 bit computers
Download Msado60_Backcompat_i386.tlb naar een lokale map
Voor AMD64 computers
Download Msado60_Backcompat_x64.tlb naar een lokale map (ik plaatste deze op de c:\)
Voor IA64 (Intel) computers
Download Msado60_Backcompat_a64.tlb naar een lokale map

Registreer deze bestanden als volgt:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12 c:\msado60_Backcompat_i386.tlb
Voor AMD64
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12 c:\msado60_Backcompat_x64.tlb
Voor IA64
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12 c:\msado60_Backcompat_ia64.tlb

Het pad voor de regtlbv12.exe dient aangepast te worden als de.NET Framework 4.0 niet geïnstalleerd op het systeem. (Op mijn XP laptop stond dit bestand in Directory C:\Windows\Microsoft.NET\Framework\v2.0.5072). U dient immers hetzelfde te doen op de xp of lager OS als je de VB applicatie daar wenst te compileren/bewerken.

Vervolgens opent u de applicatie en ga naar references in het project menu.
Deselecteer de ADO referentie en maak een referentie naar Microsoft ActiveX-objecten 6.0 BackCompat.

Compileer opnieuw en de applicatie zal werken op de andere computer.

Google maps

Ik had zo een handige functie in een door mij geschreven programma, waarbij, na invoer van een locatie (verplaatsing) automatisch de reistijd en het aantal kilometer in de database werden weggeschreven.
Omdat ik binnenkort de installatie bij de klant moet gaan doen begon ik vandaag nog eens te testen.
1) Blijkt dat google de achterliggende html aangepast heeft.
Voorheen waren er 2 attributen, één voor de reistijd (met delimiter min.) en één voor de afstand op te halen met delimiter km.)
Dit was makkelijk werken natuurlijk.
Maar nu bestaat die eerste tag niet meer en komt alles als onderstaande in mijn uitgelezen string te staan na het uitlezen van de min. delimiter.

86,1 km,56
Niet zo leuk dat dit aangepast werd, maar bon een kleine aanpassing in de code en we kunnen zowel reistijd als afstand terug in de database gaan schrijven.
MAAR:
2) Blijkt de achterliggende html niet te stroken met wat uiteindelijk weergegeven wordt.

Google maps

Google maps

Access en het nvarchar datatype uit sql server

Probleem bij de klant:

Een access applicatie kon een formulier niet meer openen waarop gegevens uit een gekoppelde sql server tabel dienden te komen.

De foutmelding wist mij te melden dat de JOIN niet kon doorgaan met een memo of OLE veld.

De joins waren in de code aangebracht wat mij er toe aanzette om het bewuste memo veld als een string te casten. (join on … cstr(xt.klantnummer)) (waarbij xt de alias is van de linktabel)

Dat werkte, nu was het alleen nog zaak om te achterhalen waarom dat veld ineens een memoveld geworden was en daarna de cstr terug weg te halen in access.
sql server management opstarten en daarin zag ik dat de cast van het klantennummer veld een nvarchar(256) was.
Een kleine aanpassing gedaan in de structuur van de tabel en het klantenummer als nvarchar(255) veranderd.

Access maakt dus automatisch een memoveld van een nvarchar(256) veld.

Handige sneltoets

Uiteraard heb je als programmeur massa code in jou project.

En je maakt natuurlijk ook gebruik van een library waarin functies staan die vanuit verschillende formulieren worden opgeroepen.

Het is echter niet zo eenvoudig om snel de functie terug te vinden dmv de zoekfunctie.
De combinatie shift F2 kan hierin echt wel handig zijn. Plaats de cursor op het woord waarvan je de definitie wenst te kennen (de identifier, dit kan zowel een functie, sub of declaratie zijn) en druk op Shift en F2.

De cursor zal zich nu verplaatsen naar daar waar de variabele gedeclareerd werd of naar daar waar de functie of subroutine geschreven werd.

Access – Runcode

Als je in een macro het commando runcode opneemt vergeet dan niet de haakjes bij de functie te plaatsen.

Bvb:
Je hebt een functie die ervoor zorgt dat een messagbox opent die vraagt of je het programma wenst af te sluiten.

In een module heb je zodoende een functie Quit_program.

Function Quit_program()
If MsgBox(“Programma verlaten?”, vbInformation + vbYesNo) = vbYes Then
Application.Quit
End If
End Function

De macro (aangemaakt door bvb het Switchboard), roept deze code als volgt op:
Action= Runcode
Arguments= Quit_program()
Bij arguments dus de haakjes niet vergeten na de functie naam. Indien de haakjes niet aanwezig zijn, zal access de functie niet vinden en een foutmelding geven. ‘The object doesn’t contain the Automation object ‘Quit_program’.

Access – een mde of een accde bestand maken.

Dit post ik hier omdat ik het zelf wel al eens vergeet te doen. Als je een mde of vanaf access 2007 een accde bestand wil maken krijg je een foutmelding:

Microsoft Office Access was unable to create the .accde, .mde, or .ade file.

Dit gebeurt als er personen aan het werken zijn in de database maar het kan ook gebeuren dat de melding verschijnt wanneer er niemand in de database aan het werken is.

De melding wordt in dat geval gegeven indien je code geschreven hebt in de VBA editor en vervolgens het accde bestand wou aanmaken zonder de gewijzigde code te compileren.

Klik in de VBA editor op debug en vervolgens op ‘compile’ [naam van uw database]

Nadat de code gecompileerd werd kan je nu wel een mde/accde bestand maken.

Visual basic: Creatie van een tabel met een autonummering als primary key

Hoe kan je precies een tabel aanmaken in access met een primary key die autonummering als cast heeft?

We willen in een acces database bvb een tabel beurten aanmaken waarbij beurtId de Primary Key is.

1) Vanuit een routine openen we de database (opendatabase)
2) Creatie van de tabel

sub Main()
OpenDatabase
CreateTable
end sub
private sub OpenDatabase()
On Error GoTo dataerror
If Not db.State = adStateOpen Then
db.Open “PROVIDER=MSDASQL;dsn=” & naamvandeodbcbron
End If
Exit Sub
dataerror:
MsgBox Err.Description
End
End Sub

Private sub CreateTable()
db.execute “CREATE TABLE Beurten(” & _
“BeurtId COUNTER CONSTRAINT PrimaryKey PRIMARY KEY,” & _
“KlantId INTEGER,” & _
“wnID Integer,” & _
“Opmerking TEXT(100),” & _
“Datum DATE)”
end sub

Kolomnaam terugvinden in een sql server database

Soms heb je in een sql server database onnoemelijk veel kolommen in onnoemelijk veel tabellen waardoor het snel terugvinden van een bepaalde kolom niet altijd een makkelijke opgave is.

Door middel van een eenvoudig script kan je snel een kolom in een bepaalde tabel van een database terugvinden.

USE YOURDATABASE
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%Kolomnaam%'
ORDER BY schema_name, table_name;
GO

Datum in een MSHflexgrid (Visual Basic)

Wanneer we datums in een MSHflexgrid willen plaatsen zal dat altijd op de lange datumnotatie zijn.
Zelf vond ik dit niet toepasselijk en zorgde ik ervoor dat de datums nu in het juiste format in de grid komt te staan.

Een kleine functie volstaat hier voor:

Private Sub FLEXDATE(Grid as MSHFlexGrid, Kolom as integer)

dim c as integer
with Grid
For c = 0 to .Rows -1
.Textmatrix(c,Kolom) = Format(.Textmatrix, Kolom), "dd/mm/yyyy")
Next c
end with

end sub