Ik ben een kleine module aan het bouwen waar je bezoekers in bij kan houden.
Hierbij kan je een aantal gegevens opslaan, zoals naam, kenteken, verwachtdatum, aankomstdatum en vertrekdatum.
Op het moment dat je een bezoeker invoerd kun je aangeven op welke datum (en tijd) je de bezoeker verwacht. De velden verwachtdatum en aankomstdatum blijven NULL.
De bezoekers worden weergeven in een datagrid. Je kunt hier een bezoeker selecteren en op het moment dat hij/zij arriveerd druk je op de knop Aanwezig.. Het veld aankomstdatum wordt dan geupdate met de huidige sysdate.
Hetzelfde geld voor vertrekdatum.
Wanneer een bezoeker aanwezig is geweest en weer is vertrokken (aankomst en vertrekdatum zijn beide ingevoerd), kunnen de gegevens gekopieerd worden en wordt voor verwachtdatum en aankomstdatum de huidige tijd ingevoerd. Vertrekdatum blijft null.
Nu het probleem.
Wanneer ik eerst een update doe op aankomstdatum (werkt soms). en daarna op vertrekdatum, dan blijft het vertrekdatumveld leeg. Wanneer ik alleen de vertrekdatum doe, werkt dit perfect!
Wanneer ik de de aankomst en vertrekdatum in 1 update achter elkaar uitvoer, dan blijft vertrekdatum leeg!
Ook wordt de waarde 0-0-0000 vaak opgeslagen als aankomstdatum ipv de datum/tijd.
Ik gebruik de volgende code:
Daarnaast krijg ik ook vaak de melding:
Could nog convert variant of type(null) into type(double)
Terwijl ik nergens een null waarde probeer te converteren oid..
Hierbij kan je een aantal gegevens opslaan, zoals naam, kenteken, verwachtdatum, aankomstdatum en vertrekdatum.
Op het moment dat je een bezoeker invoerd kun je aangeven op welke datum (en tijd) je de bezoeker verwacht. De velden verwachtdatum en aankomstdatum blijven NULL.
De bezoekers worden weergeven in een datagrid. Je kunt hier een bezoeker selecteren en op het moment dat hij/zij arriveerd druk je op de knop Aanwezig.. Het veld aankomstdatum wordt dan geupdate met de huidige sysdate.
Hetzelfde geld voor vertrekdatum.
Wanneer een bezoeker aanwezig is geweest en weer is vertrokken (aankomst en vertrekdatum zijn beide ingevoerd), kunnen de gegevens gekopieerd worden en wordt voor verwachtdatum en aankomstdatum de huidige tijd ingevoerd. Vertrekdatum blijft null.
Nu het probleem.
Wanneer ik eerst een update doe op aankomstdatum (werkt soms). en daarna op vertrekdatum, dan blijft het vertrekdatumveld leeg. Wanneer ik alleen de vertrekdatum doe, werkt dit perfect!
Wanneer ik de de aankomst en vertrekdatum in 1 update achter elkaar uitvoer, dan blijft vertrekdatum leeg!
Ook wordt de waarde 0-0-0000 vaak opgeslagen als aankomstdatum ipv de datum/tijd.
Ik gebruik de volgende code:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
| procedure TFrmSpo001.btnAanwezigBezoekerClick(Sender: TObject); var iBTE_ID : Integer; sNaam, sFirmanaam, sKenteken, sVCA, sVeiligheidsfilm, sGastheer, sAfdeling, sFunctie, sTel, sMob, sOpmerking : String; begin if ((not DMSpo001.qryBezoekers.FieldByName('AANKOMSTDATUMTIJD').IsNull) AND (not DMSpo001.qryBezoekers.FieldByName('VERTREKDATUMTIJD').IsNull)) then begin // Showmessage bezoeker bestaat al, nieuwe aanmaken? if messagedlg('De bezoeker: '+ DBGrdBezoekers.DataSource.DataSet['NAAM'] + ' is al aanwezig geweest. Wilt u de bezoeker nogmaals toevoegen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin dmLogin.dbDatabase.StartTransaction; try try // Waarden setten iBTE_ID := dmSpo001.qryBezoekers.FieldByName('BTE_ID').AsInteger; sNaam := dmSpo001.qryBezoekers.FieldByName('NAAM').AsString; sFirmaNaam := dmSpo001.qryBezoekers.FieldByName('FIRMANAAM').AsString; sKenteken := dmSpo001.qryBezoekers.FieldByName('KENTEKEN').AsString; sVCA := dmSpo001.qryBezoekers.FieldByName('VCA').AsString; sVeiligheidsfilm := dmSpo001.qryBezoekers.FieldByName('VEILIGHEIDSFILM').AsString; sGastheer := dmSpo001.qryBezoekers.FieldByName('GASTHEER').AsString; sAfdeling := dmSpo001.qryBezoekers.FieldByName('AFDELING').AsString; sFunctie := dmSpo001.qryBezoekers.FieldByName('FUNCTIE').AsString; sTel := dmSpo001.qryBezoekers.FieldByName('TEL_GASTHEER').AsString; sMob := dmSpo001.qryBezoekers.FieldByName('MOB_GASTHEER').AsString; sOpmerking := dmSpo001.qryBezoekers.FieldByName('OPMERKING').AsString;; // Insert dmSpo001.qryBezoekers.CachedUpdates := True; dmSpo001.qryBezoekers.Insert; dmSpo001.qryBezoekers.FieldByName('BTE_ID').Value := iBTE_ID; dmSpo001.qryBezoekers.FieldByName('NAAM').Value := sNaam; dmSpo001.qryBezoekers.FieldByName('FIRMANAAM').Value := sFirmanaam; dmSpo001.qryBezoekers.FieldByName('KENTEKEN').Value := sKenteken; dmSpo001.qryBezoekers.FieldByName('VCA').Value := sVCA; dmSpo001.qryBezoekers.FieldByName('VEILIGHEIDSFILM').Value := sVeiligheidsfilm; dmSpo001.qryBezoekers.FieldByName('GASTHEER').Value := sGastheer; dmSpo001.qryBezoekers.FieldByName('AFDELING').Value := sAfdeling; dmSpo001.qryBezoekers.FieldByName('FUNCTIE').Value := sFunctie; dmSpo001.qryBezoekers.FieldByName('TEL_GASTHEER').Value := sTel; dmSpo001.qryBezoekers.FieldByName('MOB_GASTHEER').Value := sMob; dmSpo001.qryBezoekers.FieldByName('VERWACHTDATUMTIJD').AsDateTime := Now; dmSpo001.qryBezoekers.FieldByName('AANKOMSTDATUMTIJD').AsDateTime := Now; dmSpo001.qryBezoekers.FieldByName('OPMERKING').Value := sOpmerking; dmSpo001.qryBezoekers.ApplyUpdates; dmLogin.dbDatabase.Commit; except dmLogin.dbDatabase.Rollback; raise; end; finally dmSpo001.qryBezoekers.CommitUpdates; dmSpo001.qryBezoekers.CachedUpdates := False; dmSpo001.qryBezoekers.Active := False; dmSpo001.qryBezoekers.Active := True; // dmSpo001.qryBezoekers.Locate('BKR_ID', iID, []); DBGrdBezoekers.Focused; btnAfwezigBezoeker.Enabled := True; end; end; end else if not DMSpo001.qryBezoekers.FieldByName('AANKOMSTDATUMTIJD').IsNull then begin // Showmessage bezoeker is al aanwezig. Aanwezigtijd wijzigen? if messagedlg('De bezoeker: '+ DBGrdBezoekers.DataSource.DataSet['NAAM'] + ' is al aanwezig. Wilt u de aankomstdatum en tijd toch wijzigen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin prWijzigDatum('BEZOEKERS', 'AANKOMSTDATUMTIJD'); DBGrdBezoekers.Focused; btnAfwezigBezoeker.Enabled := True; end; end else begin prWijzigDatum('BEZOEKERS', 'AANKOMSTDATUMTIJD'); DBGrdBezoekers.Focused; btnAfwezigBezoeker.Enabled := True; end; end; ///----------------------------------------------------------------------------------- procedure TFrmSpo001.prWijzigDatum(_sType, _sDatum : String); var tTempQuery : TQuery; sID : String; begin dmLogin.dbDatabase.StartTransaction; try try if(_sType = 'BEZOEKERS')then begin tTempQuery := DMSpo001.qryBezoekers; sID := 'BKR_ID'; end else if(_sType = 'LEVERANCIERS')then begin tTempQuery := DMSpo001.qryLeveranciers; sID := 'LVR_ID'; end else begin application.messagebox('Het type bestaat niet.', 'Fout...', MB_OK + MB_ICONWARNING); exit; end; tTempQuery.CachedUpdates := True; tTempQuery.Edit; iID := tTempQuery.FieldByName(sID).AsInteger; tTempQuery.FieldByName(_sDatum).AsDateTime := Now; tTempQuery.ApplyUpdates; dmLogin.dbDatabase.Commit; except dmLogin.dbDatabase.Rollback; raise; end; finally tTempQuery.CommitUpdates; tTempQuery.CachedUpdates := False; tTempQuery.Active := False; tTempQuery.Active := True; tTempQuery.Locate(sID, iID, []); end; end; |
Daarnaast krijg ik ook vaak de melding:
Could nog convert variant of type(null) into type(double)
Terwijl ik nergens een null waarde probeer te converteren oid..