Announcement

Collapse
No announcement yet.

zeitabfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • zeitabfrage

    hallo,

    ich habe folgendes problem: ich möchte mit folgender abfrage ermitteln, ob zu einer bestimmten resource bereits ein eintrag (=termin) existiert:

    select * from PLANUNG where ((ITEMBEGIN>='''+dz1+''' AND ITEMEND<='''+dz2+''') AND ITEMRESOURCE='''+Raum)

    die einträge für itembegin und itemand sind timestamp-werte, die resource ist ein integer-wert. bei der abfrage erhalte ich - aus meiner sicht - merkwürdige ergebnisse, da zwar die resourcen korrekt ausgewertet werden, für itembegin und -end aber alle datumswerte angezeigt werden. erreichen möchte ich, dass wenn zu dieser resource zu itembegin oder -end bereits ein termin existiert, dieser ermittelt wird. die daten dz1/dz2 werden als string im format '13.04.2004 08:00:00' übergeben im programm.

    hat irgendjemand eine idee??

  • #2
    Hallo Hartmut,
    <br><br>
    wie sieht die Abfrage mit konkret eingesetzten Werten aus? Liefert diese Abfrage, z.B. ausgeführt mit IBConsole, die erwartete Ergebnismenge? Welche InterBase-Version und Zugriffskomponenten verwendest Du?
    <br><br>
    Schöne Grüße,
    <br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      hallo thomas,

      die antwort in der ibconsole ergibt nicht die erwartete ergebnismenge - ich habe schon in vielen variationen mit dem sql-string experimentiert... daher auch meine anfrage hier. ich benutze auf dem server firebird 1.5 (final release) und ansonsten delphi 7 prof mit ibx-komponenten (ich glaube aktuell 7.08). irgendwie glaube ich der "teufel" steckt in der sql-abfrage mit den timestampdaten - aber wo???

      hartmut

      (P.S.: ich habe das ganze gerade nochmal auf einem stand-alone-pc mit ib 6.01 server ausprobiert mit gleichem ergebnis...

      Comment


      • #4
        Hallo Hartmut,
        <br><br>
        nochmal, wie sieht die Abfrage mit konkret eingesetzten Werten aus? Zeig uns auch die DDL der Tabelle PLANUNG.
        <br><br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          hallo thomas,

          die abfrage in ibconsole (im programm werden die daten als string übergeben):
          'select * from PLANUNG where ((ITEMBEGIN>='13.04.2004 08:00:00' AND ITEMEND<='13.04.2004 08:30:00') AND ITEMRESOURCE=3)'
          dieses ergibt eine ergebnismenge, die sich zwar nur auf die resource 3 bezieht, aber alle zeiten für beliebiges datum ergibt....

          hier nochmal die tabellensource:
          CREATE TABLE PLANUNG
          (
          ITEMKEY VARCHAR(40) NOT NULL PRIMARY KEY,
          ITEMBEGIN TIMESTAMP,
          ITEMEND TIMESTAMP,
          ITEMSUBJ VARCHAR(40) COLLATE DE_DE,
          ITEMDESC VARCHAR(255) COLLATE DE_DE,
          ITEMCOLOR INTEGER,
          ITEMIMAGE INTEGER,
          ITEMRESOURCE INTEGER
          );

          gruss,

          hartmu

          Comment


          • #6
            Hallo Hartmut,
            <br><br>
            ich habe nun Deine Tabelle angelegt, und folgende INSERT INTO Anweisungen durchgeführt:
            <pre>
            INSERT INTO PLANUNG(ITEMKEY, ITEMBEGIN, ITEMEND, ITEMRESOURCE) VALUES ('23232', '13.04.2004 08:00:00', '13.04.2004 08:30:00', 3);
            INSERT INTO PLANUNG(ITEMKEY, ITEMBEGIN, ITEMEND, ITEMRESOURCE) VALUES ('3523523', '13.04.2004 08:00:00', '13.04.2004 08:30:01', 3);
            </pre>
            Die folgende SELECT Anweisung liefert die erwartete Ergebnismenge.
            <pre>
            select * from PLANUNG where ((ITEMBEGIN>='13.04.2004 08:00:00' AND ITEMEND<='13.04.2004 08:30:00') AND ITEMRESOURCE=3)
            </pre>
            Ok, ich hab das nicht mit der IBConsole, sondern mit Database Workbench ausgeführt, aber das darf keinen Unterschied machen.
            <br><br>
            Du könntest einmal ein gfix.exe laufen lassen, um zu sehen, ob vielleicht irgendwelche DB-Probleme vorliegen, die vielleicht Indizes auf den Spalten ITEMBEGIN und ITEMEND betreffen, sofern Indizes vorhanden sind.
            <br><br>
            Thoma
            Thomas Steinmaurer

            Firebird Foundation Committee Member
            Upscene Productions - Database Tools for Developers
            Mein Blog

            Comment


            • #7
              hallo thomas,

              zunächst mal vielen dank für deine mühe. ich habe es gerade nochmals mit "deinem" sql-string probiert und etwas faszinierendes herausgefunden: wenn ich itemend auf 08:31:00 setze bekomme ich exakt das gleiche ergebnis wie zuvor mit 08:30:00 (itembegin bleibt dabei unverändert, itemresource auch) - dann habe ich itembegin auf 08:01:00 gesetzt (die beiden anderen bleiben original erhalten) und siehe da, jetzt findet er den termin plötzlich nicht mehr.... hast du dazu eine idee???

              gfix.exe habe ich laufenlassen, jedoch keine probleme gefunden, da ich keinen indizes auf den beiden spalten habe.

              gruss,

              hartmu

              Comment


              • #8
                Hallo Hartmut,
                <br><br>
                Geduld ist mein zweiter Vorname. ;-)
                <br><br>
                Daran hätte ich eigentlich früher denken können. Vielleicht handelt es sich ja um eine reine IBConsole Sache, z.B. dass man sich in einer Snapshot Transaktion befindet, und das SELECT Statement innerhalb dieser Transaktion natürlicherweise immer die selbe Ergebnismenge zum Zeitpunkt des Transaktionsstarts zurückliefert. Ich verwende die IBConsole nicht, darum kann ich Dir nicht sagen, wo man das Transaktionsverhalten umstellt. Auf jeden Fall solltest Du nach dem INSERT INTO ein COMMIT ausführen. Danach eine neue Transaktion starten, und das SELECT ausführen.
                <br><br>
                Thoma
                Thomas Steinmaurer

                Firebird Foundation Committee Member
                Upscene Productions - Database Tools for Developers
                Mein Blog

                Comment


                • #9
                  hallo thomas,

                  da das problem auch bei der abfrage aus dem programm auftritt, ist die ibconsole wohl nicht schuld. den hard-commit führe ich bereits nach jedem insert aus. na ja, trotzdem danke für die ideen und deine mühe - ich werde 'mal noch ein bisschen 'rumprobieren, ob's einen workaround gibt....

                  gruss,

                  hartmu

                  Comment

                  Working...
                  X