{"id":219,"date":"2012-11-20T17:35:11","date_gmt":"2012-11-20T16:35:11","guid":{"rendered":"http:\/\/blog.systemconnect.dk\/?p=219"},"modified":"2016-10-25T09:41:49","modified_gmt":"2016-10-25T07:41:49","slug":"native-og-lidt-sql-odbc-a-b-c","status":"publish","type":"post","link":"https:\/\/scblog.lynge.org\/?p=219","title":{"rendered":"Native (og lidt SQL) ODBC A-B-C"},"content":{"rendered":"<p><strong>F\u00f8rst lige et par hints om SQL og adgang til C5s tabeller:<\/strong><br \/>\nAdgang til C5s tabeller er ikke noget problem, hvis man k\u00f8rer SQL &#8211; man tager blot fat direkte p\u00e5 SQL-serveren via dens ODBC connector eller tilsvarende. Dog er der lige et par sm\u00e5ting man skal vide:<\/p>\n<ul>\n<li>Alle C5s regnskaber ligger i samme tabeller i SQL, s\u00e5 man skal huske at filtrere p\u00e5 feltet DATASET<\/li>\n<li>Ingen af C5s felter m\u00e5 st\u00e5 til NULL. C5-kernen opf\u00f8rer sig meget m\u00e6rkeligt hvis man s\u00e6tter noget til NULL, s\u00e5 lad v\u00e6re med det<\/li>\n<li>Alle C5s poster har et ROWNUMBER, som er unikt p\u00e5 tv\u00e6rs af ALLE C5s tabeller. C5-databasen har en stored procedure til at fremfinde n\u00e6ste ledige nummer &#8211; og den skal du bruge hvis du inds\u00e6tter poster. ROWNUMBER=0 er gift for C5-kernen<\/li>\n<li>Tomme strenge indeholder ASCII-tegn 2 &#8211; s\u00e5 husk det n\u00e5r du s\u00e6tter tomme\u00a0strenge og n\u00e5r du l\u00e6ser tomme strenge<\/li>\n<li>H\u00f8jrestillede tekstfelter er h\u00f8jrestillet (med mellemrum) i SQL. S\u00e5 husk det n\u00e5r du l\u00e6ser og s\u00e6tter dem<\/li>\n<li>ENUMS er i SQL blot INT. S\u00e5 du m\u00e5 selv styre hvilken v\u00e6rdi der er hvad<\/li>\n<li>DATE lagres som DATETIME med tidspunktet 00:00:00<\/li>\n<li>Primo-datoer lagres som kl. 00:00:58\u00a0dagen f\u00f8r\u00a0(er med andre ord naturligt sorteret\u00a0F\u00d8R den f\u00f8rste)<\/li>\n<li>Ultimo-datoer\u00a0lagres som kl. 00:00:02 p\u00e5 den sidste dato i m\u00e5neden\u00a0(2 sekunder over midnat &#8211; er med andre ord naturligt sorteret EFTER den sidste dag i m\u00e5neden)<\/li>\n<\/ul>\n<p>For yderligere information og gennemgang af ovenst\u00e5ende henvises du til Microsofts dokument\u00a0&#8220;Microsoft Dynamics C5 SQL Best Practices&#8221;, som du finder p\u00e5 PartnerSource.<\/p>\n<p><strong>Back to Native:<\/strong><br \/>\nNok om SQL &#8211; lad os tale om C5s Native ODBC connector i stedet.<br \/>\nConnectoren f\u00e5es i\u00a0to udgaver &#8211; en Read Only- og en Read\/Write-udgave.\u00a0Faktisk er det samme DLL, men din licens fort\u00e6ller den hvad den m\u00e5. Jeg foruds\u00e6tter i f\u00f8lgende A-B-C, at du har de n\u00f8dvendige licenskoder &#8211; ellers kan du lige s\u00e5 godt stoppe her :-).<\/p>\n<p><strong>F\u00f8rste problem (A):<\/strong> 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\u00f8dvendige filer (typisk\u00a0to .dll- og en hj\u00e6lpe-fil)\u00a0liggende i kataloget ODBC\\Native direkte under C5-kataloget.<\/p>\n<ul>\n<li>c5drv32.dll: Selve ODBC driveren<\/li>\n<li>c5cfg32.dll: Det ops\u00e6tningsvindue, der skal bruges n\u00e5r driveren konfigureres<\/li>\n<li>ODBC.chm: Kompileret HTML-hj\u00e6lpe-fil &#8211; den ops\u00e6tningsvinduet \u00e5bner hvis du trykker p\u00e5 Hj\u00e6lpeknappen<\/li>\n<\/ul>\n<p>Det anbefales at bruge de filer der f\u00f8lger med din C5 kerne, med mindre du oplever problemer. S\u00e5 kan du eksperimentere med en nyere.\u00a0Microsoft anbefaler dog at du bruger den\u00a0ODBC build der er beregnet til din kerne.\u00a0Har du andre filer end ovenst\u00e5ende tre i dit C5 ODBC-katalog, s\u00e5 kopier blot dem med&#8230;<\/p>\n<p>Fint nok &#8211; men hvordan f\u00e5r man dem s\u00e5 installeret?<br \/>\nFor det f\u00f8rste, s\u00e5 kopier dem lige til et lokalt sted p\u00e5 fx C:-drevet (det kan ikke anbefales &#8211; hvis det da overhovedet er muligt &#8211; at lade Windows loade ODBC-driverfilen (den ene DLL) fra et netv\u00e6rksdrev). Jeg foresl\u00e5r hhv. C:\\Program Files\\C5ODBC p\u00e5 et 32 bit system og C:\\Program Files (x86)\\C5ODBC p\u00e5 64 bit. Du skal naturligvis selv lave mappen C5ODBC.<\/p>\n<p>Dern\u00e6st 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)\u00a0og indl\u00e6se dem i Windows registry ved at dobbeltklikke p\u00e5 dem (i sagens natur skal de hedde .REG til efternavn, hvis det da skal virke \ud83d\ude42 ):<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>Windows Registry Editor Version 5.00\r\n\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBCINST.INI\\C5ODBC]\r\n \"CPTimeout\"=\"60\"\r\n \"Driver\"=\"C:\\\\Program Files\\\\C5ODBC\\\\c5drv32.dll\"\r\n \"Setup\"=\"C:\\\\Program Files\\\\C5ODBC\\\\c5cfg32.dll\"\r\n \"UsageCount\"=dword:00000001\r\n \"ConnectFunctions\"=\"YYY\"\r\n \"APILevel\"=\"2\"\r\n \"SQLLevel\"=\"0\"\r\n \"FileUsage\"=\"0\"\r\n \"DriverODBCVer\"=\"2.50\"\r\n @=\"\"\r\n\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers]\r\n \"C5ODBC\"=\"Installed\"<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Windows Registry Editor Version 5.00\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\ODBC\\ODBCINST.INI\\C5ODBC]\r\n \"CPTimeout\"=\"60\"\r\n \"Driver\"=\"C:\\\\Program Files (x86)\\\\C5ODBC\\\\c5drv32.dll\"\r\n \"Setup\"=\"C:\\\\Program Files (x86)\\\\C5ODBC\\\\c5cfg32.dll\"\r\n \"UsageCount\"=dword:00000001\r\n \"ConnectFunctions\"=\"YYY\"\r\n \"APILevel\"=\"2\"\r\n \"SQLLevel\"=\"0\"\r\n \"FileUsage\"=\"0\"\r\n \"DriverODBCVer\"=\"2.50\"\r\n @=\"\"\r\n\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\ODBC\\ODBCINST.INI\\ODBC Drivers]\r\n \"C5ODBC\"=\"Installed\"<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bem\u00e6rk: Har du kopieret filerne et andet sted hen, retter du blot ovenst\u00e5ende sti&#8217;er. De \u00f8vrige v\u00e6rdier er stj\u00e5let direkte fra den ODBC der f\u00f8lger med C5 version 2012 &#8211; s\u00e5 k\u00f8rer du med en anden version, b\u00f8r du evt. lige checke dem p\u00e5 en PCer hvor installationsprogrammet har f\u00e5et lov at s\u00e6tte dem. Blot s\u00e5 du er sikker p\u00e5 at det ikke er der problemet opst\u00e5r.<\/p>\n<p>&#8230;og s\u00e5 forresten: Hvis du vil afinstallere igen, s\u00e5 er det\u00a0nok en rigtig god ide at fjerne ovenst\u00e5ende keys i regedit.exe\u00a0igen INDEN du evt. v\u00e6lger at slette filerne&#8230;<\/p>\n<p><strong>N\u00e6ste problem (B)<\/strong>: Konfigurer et Data Source Name (DSN).<br \/>\nStart nu &#8220;Datakilder (ODBC)&#8221; fra Windows-kontrolpanelets &#8220;Administrations&#8221;\u00a0(p\u00e5 64 bit dog 32 bits udgaven af programmet (C:\\Windows\\SysWOW64\\odbcad32.exe) og verificer at du har driveren installeret p\u00e5 fanebladet Drivere.<\/p>\n<p>G\u00e5 derefter til Bruger-DSN eller System-DSN (sidstn\u00e6vnte hvis\u00a0alle brugere p\u00e5 PCen skal have adgang) og tryk Tilf\u00f8j&#8230; V\u00e6lg driveren og ops\u00e6t hvilken C5 databasefil den skal bruge (den m\u00e5 naturligvis gerne ligge p\u00e5 et netv\u00e6rksdrev). Navngiv DSN&#8217;en. I User ID angives den bruger der skal logge ind p\u00e5 C5. Bem\u00e6rk at det &#8220;koster&#8221; en C5-bruger, og at du i de nyere C5&#8217;ere naturligvis skal bruge et brugernavn p\u00e5 formen &lt;dom\u00e6ne&gt;\\&lt;bruger&gt; (Supervisor kan IKKE bruges i en moderne C5s ODBC).<\/p>\n<p>Bem\u00e6rk: Har du settings p\u00e5 dine C5 genveje eller i C5.ini der ogs\u00e5 kr\u00e6ves af ODBC-driveren &#8211; s\u00e5 SKAL de tilf\u00f8jes i &#8220;Additional Directories&#8221; som anf\u00f8rt i hj\u00e6lpen. ODBC-driveren l\u00e6ser IKKE C5.ini-filen. Det kan fx v\u00e6re -Qxxx parameteren (<a href=\"http:\/\/blog.systemconnect.dk\/?p=517\">se evt. dette indl\u00e6g<\/a>).<\/p>\n<p>Tilf\u00f8jet 16\/6-2015: Faktisk er det i nyere C5&#8217;ere der benytter Windows Authentication lettere blot at lade feltet v\u00e6re tomt. S\u00e5 autoriserer ODBC-driveren selv med det loginnavn der er brugt i Windows &#8211; ligesom den alm. C5. Vi har oplevet loginproblemer hvis vi angiver &lt;dom\u00e6ne&gt;\\&lt;bruger&gt; &#8211; og oplever du ogs\u00e5 det, s\u00e5 pr\u00f8v at lade feltet v\u00e6re blankt. Det virkede her!<\/p>\n<p><strong>Sidste problem (C):<\/strong> Brug dit nyoprettede Data Source Name (DSN)<br \/>\nDet kan du jo fx. g\u00f8re fra Acess, Excel eller et andet program. Bem\u00e6rk at C5s ODBC naturligvis kender finurlighederne mht. data, s\u00e5 du har\u00a0IKKE de\u00a0samme problemer omkring\u00a0ROWNUMBER,\u00a0strenge og datoer som med direkte SQL-adgang til SQL-serveren (beskrevet l\u00e6ngere oppe). Til geng\u00e6ld har jeg oplevet at reserverede ord kan drille &#8211; fx bruges Module \u00e5benbart til noget internt, s\u00e5 skal den benyttes i ODBC-sammenh\u00e6nge skal den s\u00e6ttes i anf\u00f8rselstegn (fx. InvenTrans.&#8221;Module&#8221;).<\/p>\n<p>Bem\u00e6rk at indtil Klassisk Dynamics C5 2012 Servicepack 2, Hotfix 12 havde ODBC-driveren en begr\u00e6nsning p\u00e5 max 2GB navtive database &#8211; <a href=\"http:\/\/blog.systemconnect.dk\/?p=1010\">se evt. dette indl\u00e6g!<\/a><\/p>\n<p>Det var slut p\u00e5 min\u00a0lille Native C5 ODBC A-B-C.<br \/>\nGod forn\u00f8jelse \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00f8rst lige et par hints om SQL og adgang til C5s tabeller: Adgang til C5s tabeller er ikke noget problem, hvis man k\u00f8rer SQL &#8211; man tager blot fat direkte p\u00e5 SQL-serveren via dens ODBC connector eller tilsvarende. Dog er &hellip; <a href=\"https:\/\/scblog.lynge.org\/?p=219\">L\u00e6s resten <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37,6,4],"tags":[15,43,13,22,11,23,53,14,21,61,28],"class_list":["post-219","post","type-post","status-publish","format-standard","hentry","category-klassisk-c5","category-klassisk-c5-support","category-klassisk-c5-teknik","tag-business-solutions","tag-c5","tag-damgaard-data","tag-database","tag-dynamics","tag-hint","tag-klassisk-c5","tag-microsoft","tag-native","tag-odbc","tag-sql"],"_links":{"self":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts\/219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=219"}],"version-history":[{"count":27,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts\/219\/revisions"}],"predecessor-version":[{"id":1050,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts\/219\/revisions\/1050"}],"wp:attachment":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}