Er du faldet over en “-z@”- eller en -zzh-parameter i din c5.ini og undrer du dig over hvad den gør?
-z@ er ekstra parametre til SQL-driveren som din Klassiske C5 for SQL bruger for at kunne tale med SQL-serveren.
I de gode gamle dage opsatte man et Data Source Name (DSN) under ODBC for at Klassisk C5 til SQL kunne finde ud af at få fat på SQL-serveren. Det var temmelig træls da man skulle opsætte den på hver enkelte PCer.
Efter Klassisk C5 version 2010 er det heldigvis ikke længere nødvendigt. Nu forsøger C5 selv at finde den mest egnede driver og bruger den “DSN-less” (som man så smukt kalder det). Ønsker man at se hvilken driver det er, så kan det ses i ODBC-manageren på Driver-fanen.
Enten den ODBC-manager du på en 32 bits Windows finder i kontrolpanelet under Administration / Datakilder (ODBC) eller den du på en 64 bits Windows finder her: C:\Windows\SysWOW64\odbcad32.exe
Som udgangspunkt vælger C5 driveren “SQL Server” (som er inkluderet i Windows), men det kan jo være du i stedet ønsker at bruge en anden? Fx den der følger med den SQL-server du bruger. Hvordan gør man så det uden at oprette en DSN i ODBC-manageren og tvinge C5 til at bruge den?
Jo, du angiver såmænd blot hvilken driver du ønsker at benytte med “-z@”-parameteren, fx en af følgende:
-z@driver=SQL Server
-z@driver=SQL Native Client
-z@driver=SQL Server Native Client 10.0
-z@driver=SQL Server Native Client 11.0
Bemærk at driverversioner med 1 cifret major versions-nummer (major nummeret er det første talt – fx tallet 6 i versionen “6.01.7601.17514”) er dem der kommer med Windows, mens dem med 2 eller 4 cifre stammer fra SQL-server-installationer (de hedder typisk også “SQL Server Native Client”.
Men hvad så – kan man angive andre ting i -z@?
Ja – det afhænger af den enkelte driver. Som standard bruger C5-kernen følgende parametre:
-z@AnsiNPW=yes;Auto_Translate=yes;DRIVER={SQL Server};QuotedID=yes;Regional=no;Trusted_Connection=yes
…og hvad dælen kan man så bruge det til?
Ja, faktisk er det sådan at selv hvis man vælger at bruge -zu og -zp for at angive hvilket brugernavn/kodeord C5 skal tilgå SQL databasen med – fx fordi man ikke ønsker at hver enkelt bruger skal tilgå med sit eget Windows brugernavn, ja så kræver det en såkaldt Trusted_Connection. Dvs. at Windows brugeren rent faktisk skal have adgang til SQL-serveren inden det angivne brugernavn og kodeord kan benyttes… Men det kan jo så lige fixes ved at angive -z@trusted_connection=no
En anden brugbar parameter kan være “app” som kan misbruges til at sætte applikationsnavnet overfor SQL-serveren. Den bruger det os bekendt ikke til andet end at vise det i Activity Monitorens sessionsliste – men er man lidt kreativ kan man jo angive brugernavnet i den. Så kan man – selv hvis man bruger samme brugernavn/adgangskode til C5s SQL-adgang – få oplyst hvilken bruger sessionen tilhører. Fx -z@trusted_connection=no;app=C5_%USERNAME%
Du kan selv Google (eller Binge 🙂 ) andre eksempler hvis du søger efter DSN-less connection.
Fint nok, men hvad gør -zzh så?
-zzh bruges til at angive nogle flag til C5-kernen om hvordan den skal “tale” med SQL-serveren. Det var primært noget der blev brugt i gamle dage (før C5 version 2008).
P.t. kender vi følgende værdier:
- 1: Værdien benyttes ikke længere til noget
- 2: Vend betingelsen om i stedet for at bruge “>=”
- 4: Brug index hints til SQL – se også værdien 32
- 8: Hent data igen efter UPDATE/DELETE/INSERT
- 16: Brug FASTFIRSTROW hint. Virker ikke sammen med værdien 4
- 32: Brug UPDLOCK på SELECTs i TTSer. Kræver at også værdierne 4 eller 16 er sat
- 64: Forhindrer omvendt sortering (dog kun på SYBASE databaser som C5 ikke længere supporterer)
- 128: Brug FAST FORWARD cursors hvis TTS ikke er aktiv. Virker kun hvis MS SQL-serveren er version 7 eller nyere. Denne slås automatisk fra i kerne versioner før 4.2.1349 (svarer til C5 2008 sp1) når kernen melder “Unsupported ODBC driver”. Den fejl kommer hvis C5-kernen ikke kender ODBC driver-versionen
Flagene kan kombineres ved at lægge dem sammen (dvs. det er bit-flag). Så vil man sætte flagene 4 og 32, skal man angive -zzh36 i C5.INI. Den værdi er i øvrigt velegnet til at omgås FASTFIRSTROW fejlen med ældre C5’ere på nyere SQL-servere – se evt. dette blogindlæg om det.
Som sagt bør flagene ikke bruges på C5-version 2008 eller nyere da de automatisk sættes korrekt af kernen – og det bør du være opmærksom på hvis du opgraderer en ældre C5 og har flagene stående i C5.INI. Så skal de nemlig lige slettes – ellers kan de give problemer idet de overstyrer kernens standardindstillinger som jo er testet af Microsoft.
C5 version 2010 kører i øvrigt som standard med -zzh154. Dvs.
- 2: Vend betingelsen om i stedet for at bruge “>=”
- 8: Hent data igen efter UPDATE/DELETE/INSERT
- 16: Brug FASTFIRSTROW hint
- 128: Brug FAST FORWARD cursors hvis TTS ikke er aktiv (såfremt MS SQL-serveren er version 7 eller nyere)
Nu hvor vi er i gang må vi også hellere nævne -$USP parameteren, der slår C5UTIL.USP-filen til… Det er et ekstra lag (til rettelser til USR-laget) som meget sjældent bruges… Det kan dog bruges til at overvinde en begrænsning i C5UTIL.USR-filen – mere herom i et senere Blog-indlæg.
-$USP parameteren hører til i samme kategori som -$VAR, -$VAP, -$BUS, -$BUP, -$CUS og -$CUP, der dog alle sammen skal efterfølges af / og partneres udviklingskode til det pågældende lag… Det skal -$USP dog ikke…
Bemærk i øvrigt at Klassiske C5’ere før version 2008 ikke tillod kommentarlinjer (linjer der starter med semikolon – “;” ) i C5.ini. Har du sådan en linje vil C5 ganske simpel starte med hjælpesystemet for at fortælle dig hvilke parametre der er tilladt.