Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Fehler in SQL Abfrage??

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Fehler in SQL Abfrage??

    Hallo zusammen,

    ich sitze gerade an einer Monatsauswertung. Ich wollte dies über ein php Script realisieren, damit die einzelnen Mitarbeiter dies selbst ausführen können.

    Die Daten werden gesammelt und dann direkt in ein Excelfile exportiert.

    Mit anderen Abfragen funktioniert dies tadelos. Nur hier hab ich nen Wurm drinn.

    Hier erstmal das Script:

    PHP-Code:
    <?php
    $db 
    "MN-Gruppe";
    $verbindung mssql_connect ("IP","User""Kennwort")
    or die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden");
    mssql_select_db('['.$db.']',$verbindung) or die ("Datenbank konnte nicht ausgewählt werden");
    $start $_POST[start];
    $ende $_POST[ende];
    $select "SELECT dbo.KHKLagerplatzbuchungen.Bewegungsdatum, dbo.KHKLagerplatzbuchungen.Artikelnummer, dbo.KHKArtikel.Artikelgruppe, dbo.KHKLagerplatzbuchungen.Bewegungsart, dbo.KHKArtikel.Matchcode, dbo.KHKLagerplatzbuchungen.MengeLager, dbo.KHKArtikel.Lagermengeneinheit
    FROM dbo.KHKLagerplatzbuchungen LEFT JOIN dbo.KHKArtikel ON (dbo.KHKLagerplatzbuchungen.Mandant = dbo.KHKArtikel.Mandant) AND (dbo.KHKLagerplatzbuchungen.Artikelnummer = dbo.KHKArtikel.Artikelnummer)
    WHERE (((dbo.KHKLagerplatzbuchungen.Bewegungsdatum) BETWEEN '
    $start' And '$ende') AND ((dbo.KHKArtikel.Artikelgruppe)='60600' Or (dbo.KHKArtikel.Artikelgruppe)='20600' Or (dbo.KHKArtikel.Artikelgruppe)='21600') AND ((dbo.KHKLagerplatzbuchungen.Bewegungsart) Like 'ZM' Or (dbo.KHKLagerplatzbuchungen.Bewegungsart)='ZF') AND ((dbo.KHKLagerplatzbuchungen.Mandant)='90'))";
    $export mssql_query($select);
    $fields mssql_num_fields($export);
    for (
    $i 0$i $fields$i++) {
        
    $header .= mssql_field_name($export$i) . "\t";
    }
    while(
    $row mssql_fetch_row($export)) {
        
    $line '';
        foreach(
    $row as $value) {
            if ((!isset(
    $value)) OR ($value == "")) {
                
    $value "\t";
            } else {
                
    $value str_replace('"''""'$value);
                
    $value '"' $value '"' "\t";
            }
            
    $line .= $value;
        }
        
    $data .= trim($line)."\n";
    }
    $data str_replace("\r","",$data);
    echo 
    $data;
    if (
    $data == "") {
        
    $data "\n(0) Records Found!\n";
    }
    header("Content-type: application/x-msdownload");
    header("Content-Disposition: attachment; filename=Lagerbewegungen_Gesamt.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    print 
    "$header\n$data";
    ?>
    Wenn ich den SQL String per Echo ausgeben lasse, steht das Datum richtig drinn, aber in der Excelliste werden keine Daten ausgegeben (0 Records found).

    Führe ich den gleichen SQL String direkt in der Access Datenbank aus, erhalte ich ca. 57 Einträge.

    Was mach ich hier verkehrt?

    Vielen Dank für Eure Hinweise.

    Grüße

    Michael
    PHP-Code:
    require_once("func_leo.php");
    if(
    leo()!= 0){echo "Noch ".leo()." Tage !";}
    else{echo 
    "Hallo Leo ! && Vatti = 3*";} 

  • #2
    Ich wusste gar nicht, dass man mit mssql_connect Access Datenbanken öffnen kann...
    Falls es sich um eine MS SQL Server Datenbank handelt könnte evtl. ein vorgeschaltetes
    PHP-Code:
    mssql_query('set dateformat ymd;'$con); 
    helfen.
    [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
    [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

    Kommentar


    • #3
      Hi,

      das geht sogar super mit der SQL Datenbank

      Was heißt vorgeschaltet? Wohin?.

      Wenn ich das richtig verstehe, ist hier das Datum das Problem, oder?

      Vielen Dank

      Grüße

      Michael
      PHP-Code:
      require_once("func_leo.php");
      if(
      leo()!= 0){echo "Noch ".leo()." Tage !";}
      else{echo 
      "Hallo Leo ! && Vatti = 3*";} 

      Kommentar


      • #4
        Poste doch mal dein ausgegebenen SQL-String.
        Und danach noch ein
        echo '<pre>'.print_r($export, 1);
        "My software never has bugs, it just develops random features."
        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

        Kommentar


        • #5
          Hallo,

          das kommt heraus:

          PHP-Code:
          SELECT dbo.KHKLagerplatzbuchungen.Bewegungsdatumdbo.KHKLagerplatzbuchungen.Artikelnummerdbo.KHKArtikel.Artikelgruppedbo.KHKLagerplatzbuchungen.Bewegungsartdbo.KHKArtikel.Matchcodedbo.KHKLagerplatzbuchungen.MengeLagerdbo.KHKArtikel.Lagermengeneinheit FROM dbo.KHKLagerplatzbuchungen LEFT JOIN dbo.KHKArtikel ON (dbo.KHKLagerplatzbuchungen.Mandant dbo.KHKArtikel.Mandant) AND (dbo.KHKLagerplatzbuchungen.Artikelnummer dbo.KHKArtikel.ArtikelnummerWHERE (((dbo.KHKLagerplatzbuchungen.BewegungsdatumBETWEEN '01.06.2010' And '30.06.2010') AND ((dbo.KHKArtikel.Artikelgruppe)='60600' Or (dbo.KHKArtikel.Artikelgruppe)='20600' Or (dbo.KHKArtikel.Artikelgruppe)='21600') AND ((dbo.KHKLagerplatzbuchungen.BewegungsartLike 'ZM' Or (dbo.KHKLagerplatzbuchungen.Bewegungsart)='ZF') AND ((dbo.KHKLagerplatzbuchungen.Mandant)='90'))

          Resource id #3 
          Grüße

          Michael
          PHP-Code:
          require_once("func_leo.php");
          if(
          leo()!= 0){echo "Noch ".leo()." Tage !";}
          else{echo 
          "Hallo Leo ! && Vatti = 3*";} 

          Kommentar


          • #6
            Zitat von Micha72 Beitrag anzeigen
            Was heißt vorgeschaltet? Wohin?.
            Vor deinem SELECT.
            [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
            [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

            Kommentar


            • #7
              Hallo,

              habs grad hin bekommen.

              Hatte die Doku zu SQL wohl nicht ganz durch gelesen.

              Man muss das Datum innerhalb des Select convertieren.

              Der SQL String sieht nun so aus:

              PHP-Code:
              $select "SELECT dbo.KHKLagerplatzbuchungen.Bewegungsdatum, dbo.KHKLagerplatzbuchungen.Artikelnummer, dbo.KHKArtikel.Artikelgruppe, dbo.KHKLagerplatzbuchungen.Bewegungsart, dbo.KHKArtikel.Matchcode, dbo.KHKLagerplatzbuchungen.MengeLager, dbo.KHKArtikel.Lagermengeneinheit
              FROM dbo.KHKLagerplatzbuchungen LEFT JOIN dbo.KHKArtikel ON (dbo.KHKLagerplatzbuchungen.Mandant = dbo.KHKArtikel.Mandant) AND (dbo.KHKLagerplatzbuchungen.Artikelnummer = dbo.KHKArtikel.Artikelnummer)
              WHERE (((dbo.KHKLagerplatzbuchungen.Bewegungsdatum)
              BETWEEN CONVERT(datetime, '
              $start', 104) AND CONVERT(datetime, '$ende', 104))
              AND ((dbo.KHKArtikel.Artikelgruppe)='60600' Or (dbo.KHKArtikel.Artikelgruppe)='20600'
              Or (dbo.KHKArtikel.Artikelgruppe)='21600')
              AND ((dbo.KHKLagerplatzbuchungen.Bewegungsart)
              Like 'ZM' Or (dbo.KHKLagerplatzbuchungen.Bewegungsart)='ZF')
              AND ((dbo.KHKLagerplatzbuchungen.Mandant)='90'))"

              Damit klappts dann richtig.

              Vielen Dank

              Grüße

              Michael
              PHP-Code:
              require_once("func_leo.php");
              if(
              leo()!= 0){echo "Noch ".leo()." Tage !";}
              else{echo 
              "Hallo Leo ! && Vatti = 3*";} 

              Kommentar

              Lädt...
              X