Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mehrere SQL Abfragen in EINE Exceltab exportieren

Einklappen

Neue Werbung 2019

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

  • Micha72
    hat ein Thema erstellt [Erledigt] Mehrere SQL Abfragen in EINE Exceltab exportieren.

    [Erledigt] Mehrere SQL Abfragen in EINE Exceltab exportieren

    Hallo,

    habe gerade schon ein Problem lösen können (PHPEinsteiger).

    Nun hab ich direkt das nächste.

    Ich habe ein script mit SQL Abfrage, diese Abfrage wird in eine Excel Tab exportiert:

    PHP-Code:
    <?php
    $db 
    "MN-Gruppe";
    $verbindung mssql_connect ("IP","User""Passwort")
    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 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'))";
    $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);
    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";
    ?>
    Soweit funktioniert das bestens.

    Nun habe ich aber das Problem, das ich noch 4 weiter SQL Abfragen (wie oben nur andere Artikelgruppen) habe, die jeweils auch (auf ein eigenes Tabellenblatt) in die exportierte Excel Tabelle rein sollen.

    Ist dies irgendwie machbar?

    Vielen Dank für Eure Hinweise.

    Grüße

    Michael

  • Micha72
    antwortet
    Hallo Thomas,

    so werd ichs machen, ich mach eine Auswahl mit der Abteilung und anhand dieser Auswahl bekommt der Leiter die Daten.

    Die Daten der anderen Abteilung sind nicht so wichtig als das ich diese schützen müsste.

    Der Produktionsleiter kann sich dann eine Gesamtliste ziehen.

    Dann bau ich noch ne Druckfunktion ein und gut iss.

    Ich wollte es erst umständlich in Excel programmieren, aber das ist mir angesichts des Wetters heute zu anstrengend

    Das es bis heute Nachmittag fertig sein soll, gehe ich den für mich schnelleren Weg.

    Vielen Dank für Eure Hilfe

    Grüße

    Michael

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Hallo Michael,

    hast Du Dir schon mal den Excel-Autofilter angeschaut?

    Der ist einfach zu bedienen, dies sollte jeder können und damit kann jede Abteilung "Ihre" Daten selektieren und sehen (ausser natürlich, wenn jede Abteilung nur ihre eigenen Daten sehen darf).

    Ich persönlich tendiere ja dazu, jeder Abteilung eine eigene Maske / SQL-Abfrage zur Verfügung zu stellen und damit jeder Abteilung nur ihre Daten zu zeigen. Sowas läßt sich auch gut mit einer bzw. mehreren MySQL VIEW erledigen.

    Grüße
    Thomas

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo Nikosch,

    Danke für den Hinweis, ich werde mich da mal rein lesen.

    Grüße

    Michael

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Naja, Spreadsheet_Excel_Writer, also die Erzeugung eines "echten", binären Excelfiles, wurde ja schon genannt. Mit Klartextformaten bekommst Du das nicht hin.

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hi nikosch,

    hättest Du den einen Tip, wie ich das Vorhaben realisieren könnte?

    Vielen Dank

    Grüße

    Michael

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hi Thomas,

    Danke Dir.

    VBA wäre in Ordnung, NUR müsste ich das Makro jeden Monat neu schreiben (oder kopieren und einfügen) was bedeuten würde, ich müsste das Script selbst ausführen und nicht der Abteilungsleiter.

    Hmmmm...

    Ich werds so machen, das die einzelnen Abteilungen eine EMail mit Excelliste bekommen und der Abteilungsleiter eine Gesamt Liste.

    Mal schaeun wie ich das am besten in 1 Script bekomme...

    Huijuijui...

    Vielen Dank trotzdem.

    Grüße

    Michael

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Da Du kein Exceldokument, sondern einfach nur CSV mit XLS-Endung erzeugst, dürfte dies nicht möglich sein. [WIKI]CSV[/WIKI] kennt keine Tabellenblätter, Formatierungen o.ä.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Okay, du willst aus einer Ergebnismenge (der SQL-Anfrage) mehrere Excel-Tabs (Blätter) erzeugen.

    Da fällt mir keine Lösung dazu ein, da Du ja auch nur einen Datenstrom "Lagerbewegungen_Gesamt.xls" zum Browser schickst. Was Excel dann damit macht, hast Du nicht mehr unter Kontrolle.

    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";
    Eventuell kannst Du mit VBA-Makros etwas erreichen oder mit der PEAR Klasse
    Spreadsheet_Excel_Writer

    Grüße
    Thomas

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo,

    ich glaub wir reden aneinander vorbei.

    Ich habe insgesamt 4 SQL Abfragen, die sich jeweils nur in der Artikelgruppe unterscheiden.

    Die Artikelgruppen sind Abteilungsbezogen.

    Am Ende soll eine Exceltabelle raus kommen, die pro Abteilung (Anhand der Artikelgruppen) ein Tabellenblatt hat.

    Eine SQL Abfrage ist die Gesamt Liste. diese sollte als 1. Tabellenblatt aufgeführt sein.

    Im Moment mach ich es halt so, das ich NUR die Gesamtliste ziehe und anhand der Artikelgruppen händisch die anderen Tabellenblätter anlege und die Daten dort rein kopiere.

    Da aber die Leuts aus der Abteilung das selbst machen sollen, ist der Weg etwas umständlich (User halt).

    Also, kurz gesagt, 4 Abfragen = 4 Tabellenblätter in 1 ExcelMappe mit 1 Script erstellt.

    Wobei sich die 4 Abfragen NUR in der Artikelgruppe unterscheiden.

    Vielen Dank für Deine Hilfe

    Grüße

    Michael

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Micha72 Beitrag anzeigen
    In meinen Abfragen sind ALLE Spalten gleich, die einzigste Änderung ist die Artikelgruppe bei WHERE

    PHP-Code:
    WHERE (dbo.KHKArtikel.Artikelgruppe)='60600' 
    Wie baue ich dasn nun in Deinen Hinweis ein?
    Dann reicht vielleicht auch nur ein OR in der WHERE klausel.

    Code:
    ...
    WHERE ( (dbo.KHKArtikel.Artikelgruppe)='60600' )
           OR ((dbo.KHKArtikel.Artikelgruppe)='60601' )
           OR ((dbo.KHKArtikel.Artikelgruppe)='60602' )
    ...
    Bei den Klammern bin ich mir nicht sicher, da ich es hier nicht testen kann.

    Grüße
    Thomas

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo Thomas,

    Vielen Dank für die Antwort.

    In meinen Abfragen sind ALLE Spalten gleich, die einzigste Änderung ist die Artikelgruppe bei WHERE

    PHP-Code:
    WHERE (dbo.KHKArtikel.Artikelgruppe)='60600' 
    Wie baue ich dasn nun in Deinen Hinweis ein?

    Wegen MSSQL Connection:

    Auf dem Webserver (Apache2, php5, mysql5) muss die Extension mssql.so in die php.ini eingetragen werden (gibts glaub ich als Download Paket) auf dem SQL Server muss eine DLL ersetz werden.

    Hier ist es ganz gut beschrieben:PHP: Anforderungen - Manual

    Grüße

    Michael

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Mehrere identische SQL-Abfragen lassen sich mit UNION aneinander hängen. Voraussetzung ist die identische Anzahl an Spalten in der SELECT-Liste. Voraussetzung ist, dass der SQL-Treiber für Access dies auch unterstützt.

    Beispiel (Verbund über Drei Tabellen mit drei Spalten):
    Code:
    SELECT col1, col2, col3 FROM tabelle1 
    
    UNION ALL
    
    SELECT colA, ColB, colC FROM tabelle2
    
    UNION ALL
    
    SELECT a1, a2, a3 FROM tabelle3
    Frage zu dem mssql_connect () und dem Zugriff auf die Access-DB. Hast Du lokal (bzw. dort wo das PHP läuft) einen MSSQL-Client installiert?

    Grüße
    Thomas

    Einen Kommentar schreiben:

Lädt...
X