Computer


Jeg er gået i gang med at programmere et lønsystem med en Firebird database. Den SQL-kode, som bruges her, er selvfølgelig specifik for Firebird 2.0, men mon ikke det kan være inspiration til den SQL, som bruges i andre database også.

For at kunne danne en fil, som kan oploades til SKAT, er den første udfordring at kunne skrive en “field” ind i en “record”.

Dette gøres ved at lave en ny stored procedure. Jeg kommenterer koden med rødt

CREATE PROCEDURE PR_REC_WRITE (
REC varchar(200), –den record, som skal skrives i
FORMAT char(1), –hvilket format? N=numerisk; A=alfanumerisk; D=dato; B=beløb
POS integer,
LEN integer,
INPUTVAL varchar(75), –tal eller tekst
INPUTVALD date) –hvis det er en dato indsættes værdien her
returns (
REC_OUT varchar(200)) –den ændrede record returneres
as
declare variable FIELDSTR varchar(200); –denne variable bruges til at gemme den formatterede streng med værdien
declare variable MM varchar(2);
declare variable DD varchar(2);
begin
/* I alfanumeriske felter skal ledige felter udfyldes med blanke værdier.” */
/* “Alfanumeriske felter udfyldes venstrestillet, med mindre andet er angivet…” */
if (:FORMAT = ‘A’) then
FIELDSTR = rpad(:INPUTVAL, :LEN); –teksten fyldes op med blanke felter i hele længden
/* Numeriske felter skal, hvis værdien ikke udgør det fulde antal karakterer fyldes op med 0,
til antallet af karakterer er opfyldt. */
if (:FORMAT = ‘N’) then
FIELDSTR = lpad(:INPUTVAL, :LEN,  ‘0’); –tal fyldes op med foranstillede nuller
/* Alle datoer skal angives som ÅÅÅÅMMDD, hvor ‘ÅÅÅÅ’ er årstal, ‘MM’ er måned på 2 cifre
og ‘DD’ er dag i måneden med 2 cifre. Datofelter er numeriske */
if (:FORMAT = ‘D’) then
begin
MM = extract(month from :INPUTVALD);
MM = iif(char_length(MM) = 1, ‘0’ || MM,  MM); en måned skal altid fylde 2 tegn, evt med foranstillet nul
DD = extract(day from :INPUTVALD);
DD = iif(char_length(DD) = 1, ‘0’ || DD,  DD); –samme princip for dagen
FIELDSTR = extract(year from :INPUTVALD) || MM || DD;
end
/* Alle BELØB skal angives med 6 decimaler uden komma
…Fortegn angives altid i separat felt. */
if (:FORMAT = ‘B’) then
FIELDSTR = lpad(cast(cast(INPUTVAL as float) * 1000000 as integer), :LEN,  ‘0’); –her leges lidt med felttyper for at få beløb til at være  tal
— med 6 decimaler uden komma
REC_OUT = substring(:REC from 1 for :POS – 1) || FIELDSTR ||
substring(:REC from :POS + :LEN for 200); –recorden sammensættes af den oprindelige tekst før og efter det nye field
suspend;
end;

Således er en field indsat i en record, udelukkende ved brug af SQL i Firebird.

På et tidspunkt hentede jeg et smart program, som skulle tjekke, om man nu havde de nyeste drivere og opdateringer til sine programmer.

Uheldigvis har jeg det indtryk, at jo flere “opgraderinger”, jeg vælger, desto mere ustabil opfører min computer sig.

Engang var min computer lynhurtig og kørte i månedsvis uden problemer.

Nu – genstarter min computer spontant flere gange i løbet af en aften, så man får en ufrivillig “pause” på fem minutter, hvoraf de sidste syv går med at få det trådløse modem op at køre osv.

Jeg er sågar hold op med at hidse mig op over dette mere. Nu betragter jeg det blot som “en del af livets gang”, men skal jeg bare stille mig til tåls med denne situation?