Archief - object pascal procedure probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

RandomGenerator

Legacy Member
De bedoeling is om in een opdrachtenformulier (van een database) de adresgegevens automatisch te vullen met die van de klant, van bijbehorende opdracht.

Code:
procedure pVulVan
var
vanHuisnr : string;
vanPlaats : string;
vanPostcode : string;
vanStraat: string;
klant : integer; 
qry:TcQuery;
begin 
klant := Opdracht.FieldByName('klant').AsInteger;
vanHuisnr := Opdracht.FieldByName('van_huisnr').AsString;
vanPlaats := Opdracht.FieldByName('van_plaats').AsString;
vanPostcode := Opdracht.FieldByName('van_postcode').AsString;
vanStraat := Opdracht.FieldByName('van_straat').AsString;
qry := CreateQry('select huisnr, plaats, postcode, straat from Klant K');
qry.SQL.Add ('where  K.nr = :klant ');
qry.ParamByName('klant').AsInteger := klant;

qry.Execute;
vanHuisnr := qry.FieldByName('huisnr').AsString; 
vanPlaats  := qry.FieldByName('plaats').AsString; 
vanPostcode  := qry.FieldByName('postcode').AsString; 
vanStraat := qry.FieldByName('straat').AsString; 
qry.Free;
end;

De error die ik krijg is dat Opdracht niet gekend is.
Wat vreemd is sinds het gekoppeld is aan de Dataset Opdracht in het formulier.
Zonder Opdacht er bij te schrijven zegt hij:
Unknown identifier 'FieldByName'

Ik heb al een alternatief geprobeerd:
Code:
procedure pVulVan(aField:TField);
var
qry: TCQuery;
klant : integer;
begin   
klant := aField.AsInteger;
qry := CreateQry('select K.huisnr huisnr, K.plaats plaats, K.postcode postcode, K.straat straat, O.klant, O.van_straat vanStraat, O.van_huisnr vanHuisnr, O.van_postcode vanPostcode, O.van_plaats vanPlaats ');
qry.SQL.add('from Klant K, Opdracht O');
qry.SQL.add('where O.klant = K.nr and O.klant =: klant');
qry.ParamByName('klant').AsInteger := klant;
qry.Execute;
qry['huisnr'].AsString := qry['vanHuisnr'].AsString;
qry['plaats'].AsString := qry['vanPlaats'].AsString;
qry['postcode'].AsString := qry['vanPostcode'].AsString;
qry['straat'].AsString := qry['vanStraat'].AsString;
end ;

Maar hier krijg ik dan :
Out of Global vars range at 6:1


Moest iemand met wat op weg kunnen helpen, tzou enorm geapprecieerd worden.

dJeez

Legacy Member
Leer eerst eens iets over de scope van variabelen. Opdracht is niet gedefinieerd in de procedure en dus uiteraard ook niet gekend, je moet niet twijfelen aan de compiler, eerder aan je code...

Moet je overigens niet eerder een formulierveld (dat niet rechtstreeks gekoppeld is aan de DB, en dus ook niet aan een dataset) z'n waarde uitlezen? Allez, zowat de helft van je code (eerste versie) is totaal overbodig (je leest waardes uit in variabelen die je niet eens gaat gebruiken), en je doet ook totaal niks met de data die je terugkrijgt (buiten ze in lokale variabelen steken), dat lijkt mij niet bepaald nuttig.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan