Native (og lidt SQL) ODBC A-B-C

Først lige et par hints om SQL og adgang til C5s tabeller:
Adgang til C5s tabeller er ikke noget problem, hvis man kører SQL – man tager blot fat direkte på SQL-serveren via dens ODBC connector eller tilsvarende. Dog er der lige et par småting man skal vide:

  • Alle C5s regnskaber ligger i samme tabeller i SQL, så man skal huske at filtrere på feltet DATASET
  • Ingen af C5s felter må stå til NULL. C5-kernen opfører sig meget mærkeligt hvis man sætter noget til NULL, så lad være med det
  • Alle C5s poster har et ROWNUMBER, som er unikt på tværs af ALLE C5s tabeller. C5-databasen har en stored procedure til at fremfinde næste ledige nummer – og den skal du bruge hvis du indsætter poster. ROWNUMBER=0 er gift for C5-kernen
  • Tomme strenge indeholder ASCII-tegn 2 – så husk det når du sætter tomme strenge og når du læser tomme strenge
  • Højrestillede tekstfelter er højrestillet (med mellemrum) i SQL. Så husk det når du læser og sætter dem
  • ENUMS er i SQL blot INT. Så du må selv styre hvilken værdi der er hvad
  • DATE lagres som DATETIME med tidspunktet 00:00:00
  • Primo-datoer lagres som kl. 00:00:58 dagen før (er med andre ord naturligt sorteret FØR den første)
  • Ultimo-datoer lagres som kl. 00:00:02 på den sidste dato i måneden (2 sekunder over midnat – er med andre ord naturligt sorteret EFTER den sidste dag i måneden)

For yderligere information og gennemgang af ovenstående henvises du til Microsofts dokument “Microsoft Dynamics C5 SQL Best Practices”, som du finder på PartnerSource.

Back to Native:
Nok om SQL – lad os tale om C5s Native ODBC connector i stedet.
Connectoren fåes i to udgaver – en Read Only- og en Read/Write-udgave. Faktisk er det samme DLL, men din licens fortæller den hvad den må. Jeg forudsætter i følgende A-B-C, at du har de nødvendige licenskoder – ellers kan du lige så godt stoppe her :-).

Første problem (A): Med mindre man har brugt Microsofts fine installationsprogram, er der RET stor sandsynlighed for at skidtet slet ikke er installeret. Godt nok har man de nødvendige filer (typisk to .dll- og en hjælpe-fil) liggende i kataloget ODBC\Native direkte under C5-kataloget.

  • c5drv32.dll: Selve ODBC driveren
  • c5cfg32.dll: Det opsætningsvindue, der skal bruges når driveren konfigureres
  • ODBC.chm: Kompileret HTML-hjælpe-fil – den opsætningsvinduet åbner hvis du trykker på Hjælpeknappen

Det anbefales at bruge de filer der følger med din C5 kerne, med mindre du oplever problemer. Så kan du eksperimentere med en nyere. Microsoft anbefaler dog at du bruger den ODBC build der er beregnet til din kerne. Har du andre filer end ovenstående tre i dit C5 ODBC-katalog, så kopier blot dem med…

Fint nok – men hvordan får man dem så installeret?
For det første, så kopier dem lige til et lokalt sted på fx C:-drevet (det kan ikke anbefales – hvis det da overhovedet er muligt – at lade Windows loade ODBC-driverfilen (den ene DLL) fra et netværksdrev). Jeg foreslår hhv. C:\Program Files\C5ODBC på et 32 bit system og C:\Program Files (x86)\C5ODBC på 64 bit. Du skal naturligvis selv lave mappen C5ODBC.

Dernæst skal Windows lige fatte at de ligger der og du gerne vil bruge dem. Det klarer du ved at lave en af disse to filer (hhv 32 og 64 bit) og indlæse dem i Windows registry ved at dobbeltklikke på dem (i sagens natur skal de hedde .REG til efternavn, hvis det da skal virke 🙂 ):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\C5ODBC]
 "CPTimeout"="60"
 "Driver"="C:\\Program Files\\C5ODBC\\c5drv32.dll"
 "Setup"="C:\\Program Files\\C5ODBC\\c5cfg32.dll"
 "UsageCount"=dword:00000001
 "ConnectFunctions"="YYY"
 "APILevel"="2"
 "SQLLevel"="0"
 "FileUsage"="0"
 "DriverODBCVer"="2.50"
 @=""

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
 "C5ODBC"="Installed"
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\C5ODBC]
 "CPTimeout"="60"
 "Driver"="C:\\Program Files (x86)\\C5ODBC\\c5drv32.dll"
 "Setup"="C:\\Program Files (x86)\\C5ODBC\\c5cfg32.dll"
 "UsageCount"=dword:00000001
 "ConnectFunctions"="YYY"
 "APILevel"="2"
 "SQLLevel"="0"
 "FileUsage"="0"
 "DriverODBCVer"="2.50"
 @=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers]
 "C5ODBC"="Installed"

Bemærk: Har du kopieret filerne et andet sted hen, retter du blot ovenstående sti’er. De øvrige værdier er stjålet direkte fra den ODBC der følger med C5 version 2012 – så kører du med en anden version, bør du evt. lige checke dem på en PCer hvor installationsprogrammet har fået lov at sætte dem. Blot så du er sikker på at det ikke er der problemet opstår.

…og så forresten: Hvis du vil afinstallere igen, så er det nok en rigtig god ide at fjerne ovenstående keys i regedit.exe igen INDEN du evt. vælger at slette filerne…

Næste problem (B): Konfigurer et Data Source Name (DSN).
Start nu “Datakilder (ODBC)” fra Windows-kontrolpanelets “Administrations” (på 64 bit dog 32 bits udgaven af programmet (C:\Windows\SysWOW64\odbcad32.exe) og verificer at du har driveren installeret på fanebladet Drivere.

Gå derefter til Bruger-DSN eller System-DSN (sidstnævnte hvis alle brugere på PCen skal have adgang) og tryk Tilføj… Vælg driveren og opsæt hvilken C5 databasefil den skal bruge (den må naturligvis gerne ligge på et netværksdrev). Navngiv DSN’en. I User ID angives den bruger der skal logge ind på C5. Bemærk at det “koster” en C5-bruger, og at du i de nyere C5’ere naturligvis skal bruge et brugernavn på formen <domæne>\<bruger> (Supervisor kan IKKE bruges i en moderne C5s ODBC).

Bemærk: Har du settings på dine C5 genveje eller i C5.ini der også kræves af ODBC-driveren – så SKAL de tilføjes i “Additional Directories” som anført i hjælpen. ODBC-driveren læser IKKE C5.ini-filen. Det kan fx være -Qxxx parameteren (se evt. dette indlæg).

Tilføjet 16/6-2015: Faktisk er det i nyere C5’ere der benytter Windows Authentication lettere blot at lade feltet være tomt. Så autoriserer ODBC-driveren selv med det loginnavn der er brugt i Windows – ligesom den alm. C5. Vi har oplevet loginproblemer hvis vi angiver <domæne>\<bruger> – og oplever du også det, så prøv at lade feltet være blankt. Det virkede her!

Sidste problem (C): Brug dit nyoprettede Data Source Name (DSN)
Det kan du jo fx. gøre fra Acess, Excel eller et andet program. Bemærk at C5s ODBC naturligvis kender finurlighederne mht. data, så du har IKKE de samme problemer omkring ROWNUMBER, strenge og datoer som med direkte SQL-adgang til SQL-serveren (beskrevet længere oppe). Til gengæld har jeg oplevet at reserverede ord kan drille – fx bruges Module åbenbart til noget internt, så skal den benyttes i ODBC-sammenhænge skal den sættes i anførselstegn (fx. InvenTrans.”Module”).

Bemærk at indtil Klassisk Dynamics C5 2012 Servicepack 2, Hotfix 12 havde ODBC-driveren en begrænsning på max 2GB navtive database – se evt. dette indlæg!

Det var slut på min lille Native C5 ODBC A-B-C.
God fornøjelse 🙂