Toon posts:

delphi 2005: NULL waarde datum veld (MySQL) bepalen.

Pagina: 1
Acties:
  • 192 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik haal vanuit delphi 2005 data op van een MySQL server met het volgende commando:

code:
1
2
3
4
if data.QTemp.FieldByName('datum').AsDateTime <> 0 then 
  begin end
else 
  begin end


Dit werkte altijd goed vanuit Delphi 7, maar vanuit 2005 blijkbaar niet meer. want ook al is het veld "datum" in de database "NULL" gaat hij toch het "then begin end" uitvoeren en niet de "else begin end"

Ik heb dus een database met een datum veld waarvan ik wil testen of hij NULL is ja of nee.

help! :)

  • YellowCube
  • Registratie: December 2001
  • Laatst online: 18:01

YellowCube

Wait...what?

kent Delphi niet zoiets als isNull (dus een boolean die aangeeft of een waarde NULL is of niet)?

My doctor says that I have a malformed public-duty gland and a natural deficiency in moral fibre and that I am therefore excused from saving the world


Verwijderd

Topicstarter
YellowCube schreef op dinsdag 17 januari 2006 @ 14:59:
kent Delphi niet zoiets als isNull (dus een boolean die aangeeft of een waarde NULL is of niet)?
Ja, je kunt inderdaad ook dit doen:
code:
1
2
3
4
if data.QTemp.FieldByName('datumklaar').IsNull then
  begin end
else 
  begin end


maar dat werkt ook niet.

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 15:03
Hmm, ik was even een codevoorbeeldje aan het zoeken voor je, maar ik gebruik ook overal isNull, dat is m.i. ook de manier. Nou heb ik dit nog nooit op een MySQL database uitgevoerd en dat kan wel eens het probleem zijn natuurlijk. Zou het iets te maken kunnen hebben met het type van je datumveld?

[ Voor 30% gewijzigd door Pino op 17-01-2006 15:19 ]

"If you don't know where you are going, any road will take you there"


Verwijderd

Topicstarter
mmm... ik heb even getest door labeltjes te laten veranderen aan de hand van de waarde.

de statements gaan wel goed!
Het probleem zit het in het volgende, dat voert hij om de een of andere rede niet uit:

code:
1
2
3
4
5
6
7
8
9
10
11
if data.QTemp.FieldByName('datum').AsDateTime <> 0 then 
  begin
    DTPDatum.Checked := true;               //dit wordt niet uitgevoerd! 
    lblTest.Caption := 'datum = true';         //erbij gezet als test
  end
else
  begin
    DTPDatum.Date    := date;
    DTPDatum.Checked := false;              //dit wordt niet uitgevoerd! 
    lblTest.Caption := 'datum = false';        //erbij gezet als test
  end; //else


De status van lblTest.Caption is goed als er wel of geen datum in het record staat. Maar de checkbox van de datetimepicker blijft altijd checked!

Na deze "if then else" vind een form.show plaats.

[ Voor 4% gewijzigd door Verwijderd op 17-01-2006 15:36 ]


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 15:03
Dan heb je dus een probleem met je DateTimePicker en niet met je null waarde. Nou heb ik geen Delphi 2005 hier, maar wat is een checkbox in je DTP en wat doe je ermee?

"If you don't know where you are going, any road will take you there"


Verwijderd

Topicstarter
Pino schreef op dinsdag 17 januari 2006 @ 15:45:
Dan heb je dus een probleem met je DateTimePicker en niet met je null waarde. Nou heb ik geen Delphi 2005 hier, maar wat is een checkbox in je DTP en wat doe je ermee?
Die zit ook in Delphi 7 (en waarschijnlijk ook wel in 6) ... tis gewoon de standaard datetime picker van Delphi.

Met de checkbox geef ik aan of hij een NULL waarde of de datum die de DTP weergeeft weg gaat schrijven in de database. (simpel gezegd geef ik met de checkbox aan of hij de datum op moet slaan ja of nee)

[ Voor 3% gewijzigd door Verwijderd op 17-01-2006 15:57 ]


Verwijderd

Topicstarter
Heeft iemand nog een suggestie?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:44

Creepy

Tactical Espionage Splatterer

Ja. Loop eens stap voor stap dooe je code heen, zet wat breakpoints , check wat variabelen terwijl de code draait etc zodat je precies ziet wat er gebeurd. Wordt je checkbox ergens anders weer op checked gezet? Andere events die nog afgevuurd worden? etc.

Daarnaast is .AsDateTime = 0 heel wat anders dan .IsNull!

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op vrijdag 20 januari 2006 @ 10:33:
Ja. Loop eens stap voor stap dooe je code heen, zet wat breakpoints , check wat variabelen terwijl de code draait etc zodat je precies ziet wat er gebeurd. Wordt je checkbox ergens anders weer op checked gezet? Andere events die nog afgevuurd worden? etc.

Daarnaast is .AsDateTime <> 0 heel wat anders dan .IsNull!
En dat had ik nog niet gedaan.... wel dus... het is het laatste wat er gebeurt voor de form.show()
En bovendien, als je gelezen had, dan had je gezien dat het In Delphi 7 prima werkte.

en bovendien... als je een datum of een integer query't en het veld is null dan wordt er 0 terug gegeven.... test maar... tis maar net wat je pretting vind....

Daarom zei ik ook al dat op de juiste plaatsen de juiste commando's worden uitgevoerd. Ook het checkbox-commando wordt uitgevoerd. Maar het resultaat is alleen dat hij toch steeds aangevinkt is ookal voert hij de DTPdatum.Checked := false uit

Dus iets beter lezen voordat je het beter-wetertje uit gaat lopen hangen...

[ Voor 4% gewijzigd door Verwijderd op 20-01-2006 10:44 ]


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 15:03
Verwijderd schreef op vrijdag 20 januari 2006 @ 10:43:
[...]
en bovendien... als je een datum of een integer query't en het veld is null dan wordt er 0 terug gegeven.... test maar... tis maar net wat je pretting vind....
Nou, bij de databases die ik gebruik niet hoor! En het is niet netjes natuurlijk.
Daarom zei ik ook al dat op de juiste plaatsen de juiste commando's worden uitgevoerd. Ook het checkbox-commando wordt uitgevoerd. Maar het resultaat is alleen dat hij toch steeds aangevinkt is ookal voert hij de DTPdatum.Checked := false uit
Zoals ik je hele betoog lees werkt je checkbox niet, verzin daar eens wat anders voor. Ik krijg dat ding in Delphi6 niet eens in beeld.
Dus iets beter lezen voordat je het beter-wetertje uit gaat lopen hangen...
Mensen hier proberen behulpzaam te zijn en je van je blinde vlek af te helpen, ga dan niet zeiken, dat is niet aardig en je bereikt er niets mee. Waarom moet je op je teentjes getrapt zijn als iemand vraagt om te debuggen? Heb je dat al gedaan, mooi, anders heb je een goede tip.

Hij heeft zelfs gelijk, je labels gaan wel goed, dus je lus gaat goed, het enige wat niet werkt is je checkbox.

"If you don't know where you are going, any road will take you there"


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:44

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op vrijdag 20 januari 2006 @ 10:43:
[...]


En dat had ik nog niet gedaan.... wel dus... het is het laatste wat er gebeurt voor de form.show()
En bovendien, als je gelezen had, dan had je gezien dat het In Delphi 7 prima werkte.

en bovendien... als je een datum of een integer query't en het veld is null dan wordt er 0 terug gegeven.... test maar... tis maar net wat je pretting vind....

Daarom zei ik ook al dat op de juiste plaatsen de juiste commando's worden uitgevoerd. Ook het checkbox-commando wordt uitgevoerd. Maar het resultaat is alleen dat hij toch steeds aangevinkt is ookal voert hij de DTPdatum.Checked := false uit
Het feit dat je zegt dat de code wel wordt uitgevoerd kan ook zijn omdat je het label ziet veranderen. Dat zegt dus niks over het wel of niet stap voor stap door je applicatie heen lopen. Voor het gemak vergeet je ook even te melden of er nu wel of geen andere events afvuren als je continu met F7 (step into) het gehele stuk doorloopt. (zie ook P&W FAQ - De "quickstart" zodat je de volgende keer iets vollediger bent)

Een NULL in de database wordt met een .AsDateTime geconverteerd naar een 0, maar andersom gebeurt dit zeer zeker niet. Vandaar dat ik dit noemde. Een 0 direct toekennen aan een datum veld levert namelijk een datum in 1899 op in de database.

Daarnaast kan je ook stap voor stap door je code heen lopen met het gebruik van Debug Units, zodat je ook door de code van de checkbox heen kan gaan om zo eens te kijken of je wat kan vinden.
Dus iets beter lezen voordat je het beter-wetertje uit gaat lopen hangen...
Dan help ik je de volgende keer niet he ;)

[ Voor 13% gewijzigd door Creepy op 20-01-2006 14:53 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op vrijdag 20 januari 2006 @ 14:36:
[...]

Het feit dat je zegt dat de code wel wordt uitgevoerd kan ook zijn omdat je het label ziet veranderen. Dat zegt dus niks over het wel of niet stap voor stap door je applicatie heen lopen. Voor het gemak vergeet je ook even te melden of er nu wel of geen andere events afvuren als je continu met F7 (step into) het gehele stuk doorloopt. (zie ook P&W FAQ - De "quickstart" zodat je de volgende keer iets vollediger bent)

Een NULL in de database wordt met een .AsDateTime geconverteerd naar een 0, maar andersom gebeurt dit zeer zeker niet. Vandaar dat ik dit noemde. Een 0 direct toekennen aan een datum veld levert namelijk een datum in 1899 op in de database.

Daarnaast kan je ook stap voor stap door je code heen lopen met het gebruik van Debug Units, zodat je ook door de code van de checkbox heen kan gaan om zo eens te kijken of je wat kan vinden.

[...]

Dan help ik je de volgende keer niet he ;)
ik zeg sorry bij deze...
Maar je kwam niet echt helperig over in je vorige mailtje. :)

maar goed...

[edit1]
tis trouwens ook maar net hoe ik het lees...
Dat je begon met "ja." kan je ook heel anders opvatten. Maar jou ja was gewoon een antwoord op mijn vraag. "Iemand nog een suggestie?"
[/edit1]

[ Voor 9% gewijzigd door Verwijderd op 20-01-2006 16:27 ]

Pagina: 1