Results 1 to 5 of 5

Thread: Datum formaat in Interbase

  1. #1
    Mindert Dusselaar
    Join Date
    Oct 2004
    Location
    Zuid westen van Drenthe
    Posts
    91

    Datum formaat in Interbase

    Hallo

    Ik gebruik een query (cQuery) vanuit Delphi XE10.3, waarbij ik een datum-veld (@Peildatum) vul met de datum van vandaag + een aantal dagen.
    v.b.
    procedure sdsdatasetbefore_open;
    var dagen : integer; //gevuld met b.v. 1
    begin
    sysutils.formatsettings.ShortDateFormat := 'dd-mm-yyyy';
    datum := QuotedStr(datetostr(Now + Dagen));
    end;
    resultaat datum = ''23-12-2021''

    Hierna verander ik deze in de query:
    sdsdataset.DataSet.CommandText := ReplaceStr(cQuery,'@Peildatum', datum);

    De regel die b.v. gewijzigd moet worden vanuit de code in cQuery is: in de select en in de select ' (select Besteld from art_wobesteld (a.ARTIKELSTAM_ID,@Peildatum)) as besteld, '+
    Hierbij is WObesteld een stored procedure waarbij de parameters: integer en date zijn.
    Op zich gaat de replace goed.

    Echter open ik de sdsdataset (DBExpress component) vanuit Delphi op een Interbase versie 2007, dan krijg ik het gewenste resultaat
    Maar op een Interbase 2009 krijg ik een foutmelding (Error: conversion error from string ''23-12-2021''

    Vraag zit er verschil in de interbase versies voor wat betreft de de datum formaten?
    Hoe is dit eenvoudig op te lossen?

  2. #2
    Je doet het ook niet goed

    Je moet parameters gaan gebruiken. Zet designtime de juiste sql in je query component (die kun je gewoon meerdere gebruiken afhankelijk van het doel). Variabelen stel je dan in door de parameters in te stellen. Ik ken de dbexpress componenten niet, maar waarschijnlijk zal die wel een component hebben om een stored procedure aan te roepen.

    Door parameters te gebruiken zal de conversie meestal automatisch goed gaan naar de onderliggende database, als je in Interbase tenminste een date veld hebt gebruikt. Je gebruikt dan iets in de trent van:

    Code:
     cquery.ParambyName('ARTIKELSTAM_ID').AsInteger := 1234;
    cquery.ParambyName('PeilDdatum').AsDateTime := Now + Dagen;

  3. #3
    Mindert Dusselaar
    Join Date
    Oct 2004
    Location
    Zuid westen van Drenthe
    Posts
    91
    Benno je hebt helemaal gelijk maar omdat ik in 1 sdsdataset meerdere querys gebruik met verschillend aantal parameters maar wel dezelfde velden als resultaat, dacht ik dit te ondervangen door een replace in de query.
    Echter ook met de parameters designtime te declareren en te vullen gaat het net zo fout.
    Het gekke is dat als ik op 1 en dezelfde ontwikkelmachine
    sysutils.formatsettings.ShortDateFormat := 'dd-mm-yyyy' gebruik, dan gaat dit goed op de Interbase 2007 database en fout op de 2009 database.
    maar sysutils.formatsettings.ShortDateFormat := 'yyyy-mm-dd' gaat dan goed op de Interbase 2009 database en fout op de 2007 database.
    Vandaar mijn vraag ook of er verschil zit in de dateformat van de verschillende databases.
    Op deze ontwikkelmachine is overigens wel de interbase server 2017 geïnstalleerd.

  4. #4
    Misschien dat je even kunt kijken wat er gebeurd als je "AsDateTime" vervangt door "Value".

  5. #5
    Quote Originally Posted by mindert View Post
    Het gekke is dat als ik op 1 en dezelfde ontwikkelmachine
    sysutils.formatsettings.ShortDateFormat := 'dd-mm-yyyy' gebruik, dan gaat dit goed op de Interbase 2007 database en fout op de 2009 database.
    maar sysutils.formatsettings.ShortDateFormat := 'yyyy-mm-dd' gaat dan goed op de Interbase 2009 database en fout op de 2007 database.
    Vandaar mijn vraag ook of er verschil zit in de dateformat van de verschillende databases.
    Ja, dat kan per db engine verschillen op dezelfde machine.
    Maar yyyy-mm-dd zou altijd moeten werken in alle gevallen.
    Het is beter om hier inderdaad met parameters te werken maar als je toch met datumstrings werkt moet je altijd communiceren in yyyy-mm-dd.

    Welke fout krijg je dan bij die 2007? Want ik denk dat dat door iets anders komt.

    PS, zoals je het nu in je openingspost hebt staan heb je geen quotes om de harde datum staan. Dat gaat dus altijd mis. Maar ik neem aan dat dat een copy paste fout is.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •