|
| Kan man lave en default værdi her? Fra : Ukendt |
Dato : 26-02-06 15:45 |
|
Hej.
Kan man lave en default værdi her:
datasource1.dataset.fieldByName('field1').value
lidt a la:
StrToIntDef(et-eller-andet, 0);
(Det jeg ønsker er at man får værdien 0, hvis feltet field1 er tomt.)
| |
PØLLE (26-02-2006)
| Kommentar Fra : PØLLE |
Dato : 26-02-06 20:10 |
|
For det første: "Er du musæumsmedarbejderen, er jeg musæumsstykket".
> datasource1.dataset.fieldByName('field1').value
For det første kan kan du forkorte din programmering fra
"datasource1.dataset.fieldByName('field1').value" til
datasource1.dataset['field1']", som er det samme.
Skal der præsenteres og er det TFloatfield, så angiver du Displayformat til
"#,##0.00;-#,##0.00;0.00", så vil du få 0,00, hvis feltet er 0;
eller
Skal der præsenteres og er det TIntegerfield, så angiver du Displayformat
til "#,##0;-#,##0;0", så vil du få 0, hvis feltets value er 0;
.... hvis jeg har forstået det rigtigt
PØLLE
| |
Ukendt (26-02-2006)
| Kommentar Fra : Ukendt |
Dato : 26-02-06 20:21 |
|
"PØLLE" <NoName@NoMail.com> skrev i en meddelelse
news:4401fd0a$0$15788$14726298@news.sunsite.dk...
>
> For det første: "Er du musæumsmedarbejderen, er jeg musæumsstykket".
Hej.
Ja jeg arbejder på Museum. Godt nok har programmeringen her dog ikke noget
med dette at gøre.
>> datasource1.dataset.fieldByName('field1').value
> For det første kan kan du forkorte din programmering fra
> "datasource1.dataset.fieldByName('field1').value" til
> datasource1.dataset['field1']", som er det samme.
Ja, det gør det da kun nemmere at overskue
> Skal der præsenteres og er det TFloatfield, så angiver du Displayformat
> til "#,##0.00;-#,##0.00;0.00", så vil du få 0,00, hvis feltet er 0;
> eller
> Skal der præsenteres og er det TIntegerfield, så angiver du Displayformat
> til "#,##0;-#,##0;0", så vil du få 0, hvis feltets value er 0;
> ... hvis jeg har forstået det rigtigt
Problemet er sådan set, at indholdet bliver hentet til en beregning.
Problemet er bare, at der fremkommer en fejl, hvis et af felterne er tomme
(null). Derfor vil jeg gerne hente defaultværdien 0 i tilfælde med tomme
(null) felter.
Fx. (udelukkende for at illustrere problemet)
procedure beregn;
var
resultat: real;
begin
Resultat:= datasource1.dataset['field1'] + datasource1.dataset['field2'] -
datasource1.dataset['field3'];
end;
| |
Hauge (26-02-2006)
| Kommentar Fra : Hauge |
Dato : 26-02-06 20:42 |
|
Hej
Museumsmedarbejderen wrote:
> Problemet er sådan set, at indholdet bliver hentet til en beregning.
Kan VAL bruges?
Mvh Hauge
--
For at verificere afsenderen af dette indlæg kan du klikke her:
< http://newscheck.smart-tech.dk/20060226194140@smart-tech.dk>
På samme domæne som afsenderen af dette indlæg, ses headerne.
| |
PØLLE (26-02-2006)
| Kommentar Fra : PØLLE |
Dato : 26-02-06 20:54 |
|
> Kan VAL bruges?
- Jeg ved det ikke - har nemlig aldrig brugt denne procedure.
PØLLE
| |
Ukendt (26-02-2006)
| Kommentar Fra : Ukendt |
Dato : 26-02-06 21:44 |
|
"Hauge" <hauge@CUTsmart-tech.dk> skrev i en meddelelse
news:20060226194140@smart-tech.dk...
> Hej
> Museumsmedarbejderen wrote:
>> Problemet er sådan set, at indholdet bliver hentet til en beregning.
>
> Kan VAL bruges?
Hej Hauge.
Kan jeg få dig til at uddybe ovenstående?
Jeg vil lige tilføje, at man ikke kan sætte default-værdien direkte inde i
databasen, da der er en begrænsning for hvor mange felter, man kan sætte
default værdier på og den er opbrugt
| |
PØLLE (26-02-2006)
| Kommentar Fra : PØLLE |
Dato : 26-02-06 21:13 |
|
Min kommentar "For det første: "Er du musæumsmedarbejderen, er jeg
musæumsstykket"." - er for lige at lave lidt pjat i al det tekniske.
Du skrev:
---------
procedure beregn;
var
resultat: real;
begin
Resultat:= datasource1.dataset['field1'] + datasource1.dataset['field2'] -
datasource1.dataset['field3'];
end;
Jeg ville gøre det sådan:
-----------------------
procedure beregn;
var
resultat: real;
begin
Resultat := StrToFloat(datasource1.dataset.findfield('field1').text)
+ StrToFloat(datasource1.dataset.findfield('field2').text) -
StrToFloat(datasource1.dataset.findfield('field3').text));
end;
Så sker der ikke noget ved, at
datasource1.dataset.fiendField('field1').Value = Null, det giver nemlig
datasource1.dataset.fiendField('field1').text = '0';
Det er ikke prøvet, men lige efter min hukommelse.
Du må ikke udskifte .text med .displaytext, der vil nemlig komme kommaer i
stedet for det engelske '.' og så går det hele krasat.
PØLLE
| |
Ukendt (26-02-2006)
| Kommentar Fra : Ukendt |
Dato : 26-02-06 21:45 |
|
"PØLLE" <NoName@NoMail.com> skrev i en meddelelse
news:44020bb1$0$15781$14726298@news.sunsite.dk...
> Min kommentar "For det første: "Er du musæumsmedarbejderen, er jeg
> musæumsstykket"." - er for lige at lave lidt pjat i al det tekniske.
>
> Du skrev:
> ---------
> procedure beregn;
> var
> resultat: real;
> begin
> Resultat:= datasource1.dataset['field1'] +
> datasource1.dataset['field2'] -
> datasource1.dataset['field3'];
> end;
>
> Jeg ville gøre det sådan:
> -----------------------
> procedure beregn;
> var
> resultat: real;
> begin
> Resultat := StrToFloat(datasource1.dataset.findfield('field1').text)
> + StrToFloat(datasource1.dataset.findfield('field2').text) -
> StrToFloat(datasource1.dataset.findfield('field3').text));
> end;
>
> Så sker der ikke noget ved, at
> datasource1.dataset.fiendField('field1').Value = Null, det giver nemlig
> datasource1.dataset.fiendField('field1').text = '0';
> Det er ikke prøvet, men lige efter min hukommelse.
>
> Du må ikke udskifte .text med .displaytext, der vil nemlig komme kommaer i
> stedet for det engelske '.' og så går det hele krasat.
> PØLLE
Hej Pølle.
Jeg vil prøve din måde.
| |
Brian Andersen \(www~ (27-02-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 27-02-06 07:35 |
|
> Jeg ville gøre det sådan:
> -----------------------
> procedure beregn;
> var
> resultat: real;
> begin
> Resultat := StrToFloat(datasource1.dataset.findfield('field1').text)
> + StrToFloat(datasource1.dataset.findfield('field2').text) -
> StrToFloat(datasource1.dataset.findfield('field3').text));
> end;
Hvad med at opfinde en procedure som følgende:
function AsNumber(AValue: Variant): Double;
begin
if AValue <> NULL then
Result := AValue else
Result := 0;
end;
Og, så løse problematiken sådan her:
procedure beregn;
var
Resultat: Double;
begin
Resultat :=
AsNumber(DataSource1.DataSet['field1']) +
AsNumber(DataSource1.DataSet['field2']) -
AsNumber(DataSource1.DataSet['field3]);
end;
Men hvorfor ik' bare kvalificere sig hele vejen? Altså
DataSource1.DataSet.FieldByName('Field1').AsFloat?
Ps. Real er en udgået datatype. Brug Double, da den beregner med Intel
Instruktioner og derfor væsentlig hurtigere og mere nøjagtig. Real er en
gammel Turbo Pascal datatype. Den blev opfundet, da Intel ikke havde Float
operationer i deres CPU'er.
/Brian
| |
|
|