[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2002
    Beiträge
    164

    Spaltenüberschriften aus VBA sql-Statement in Excel ausgeben

    geschätzte Leute,
    leider werden bei diesem VBA-Script die in sql definierten Spaltenüberschriften (Filiale, Kunde und Inhalt) nicht mit in die Excel-Tabelle übernommen.
    Hat jemand eine Idee?
    LG
    RR

    Sub lesen()

    Dim Filiale As String
    Dim Kunde As String
    Dim Inhalt As String

    Set CS = CreateObject("ADODB.Connection")
    Set RS = CreateObject("ADODB.Recordset")

    'Retrieve values from Cells on the sheet to use as selections in the query below
    Filiale = ActiveSheet.Range("B1").Value
    Kunde = ActiveSheet.Range("D1").Value
    Inhalt = ActiveSheet.Range("F1").Value

    'MsgBox (Filiale)

    'ISeries connection String
    ConnectString = "Driver={ISeries Access ODBC Driver};System=xxx.xxx.xx.x;Uid=xxxxxxxx;Pwd=xxxxx xxx;Library=xxxxxxxx;QueryTimeout=0"

    CS.Open (ConnectString)

    sqlstring = "select chd1cd as Filiale, chd3cd as Kunde, cthptx as Inhalt" & _
    " from y2svgen.svkopfv1 "
    sqlstring = sqlstring & " where chd1cd = '" & Filiale & "'"
    If Kunde <> "" Then
    sqlstring = sqlstring & " and chd3cd = '" & Kunde & "'"
    End If
    If Inhalt <> "" Then
    sqlstring = sqlstring & " and upper(cthptx) like upper('%" & Inhalt & "%')"
    End If

    'Message box can be used for debugging the SQL statement
    MsgBox (sqlstring)

    RS.Open sqlstring, CS

    'Clear Previous contents of Cells
    Cells.Select
    ActiveSheet.Range("A7:Z65535").ClearContents

    'copy the Recordset to excel sheet starting at A7
    ActiveSheet.Range("A7").CopyFromRecordset RS

    'Close Connection And Recordset
    RS.Close
    CS.Close

    'Reset cell back to A1
    ActiveSheet.Range("A1").Select

    End Sub

  2. #2
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Hallo,mußt Du mal suchen, war schon ein paar mal Thema hier.GG

  3. #3
    Registriert seit
    Dec 2004
    Beiträge
    203
    Hallo.
    VBA kenne ich jetzt nicht so ... aber in c# mache ich folgendes. Ich fülle die Datatable und dann ...

    DataColumnCollection dcc = mdtMailPlus.Columns;
    for (int i = 0; i < mdtMailPlus.Columns.Count; i++)
    {
    oSheet.Cells[Zeile, i + Spalte] = dcc[i].ColumnName.ToString();
    }

    Vielleicht geht so was ja auch in VBA :-)
    Gruß aus Flensburg
    Ralf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Warum eigentlich so kompliziert?
    Über Daten->Aus anderen Quellen->MS-Query kann man parametrierte SQL's definieren.
    Parameter schreibt man in SQL mit "?", also
    select ... from myfile where key1 = ? and key2 like '%' concat ? concat '%' ...
    Die ? werden von MS-Query beim Ausführen angefordert.
    Nach der Rückgabe nach Excel kann man über die Eigenschaften der Abfrage jedem ? eine Zelle zuordnen und auch entscheiden, ob die Feldüberschriften mit ausgegeben werden sollen.

    Ansonsten musst du das halt wie oben beschrieben selber machen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Feb 2002
    Beiträge
    164
    Geschätzter Fürchau,
    deinen Vorschlag mit dem Query-Assistenten habe ich bereits früher angewendet.
    Vba habe ich nur aus dem einen Grund verwendet, um das sql-Statement variabel zusammenstellen zu können. Ich möchte eine where bzw. and-Abfrage nur dann ausführen, wenn das entsprechende Filterfeld gefüllt ist. Hat man diese Möglichkeit auch mit dem Query-Assistenten?
    LG
    rr

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Nein so nicht, aber mit intelligentem case-ausdruck könnte das klappen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Feb 2002
    Beiträge
    164
    hallo Fürchau,
    also dein Vorschlag mit "key2 like '%' concat ? concat '%' ..." wunderbar, hat sofort geklappt!

    Vielleicht noch ein paar Erläuterungen, wie ich eine where bzw. and-Abfrage nur unter bestimmten Bedingungen ausführen kann.

    Vielen Dank!
    RR

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    In embedded SQL kann ich den selben Parameter (Hostvariable) ja immer wieder nehmen. In ODBC benötige ich jedesmal ein neues "?". Aber wenn ich diese dann der selben Zelle zuweise dann geht es auch wieder.
    Beispiel im Embedded:

    where ... and
    case
    when ? = 0 then 1 -- Hier ggf. halt gegen Blank prüfen bei Zeichen
    when keyx = ? then 1
    else 0
    end = 1
    and ...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Feb 2002
    Beiträge
    164
    Problem gelöst.

    Vielen Dank an alle Beteiligten.

Similar Threads

  1. Spoolfile in CSV-Datei ausgeben
    By AK1 in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 29-01-15, 11:35
  2. SQL Statement
    By Mädele in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 27-02-03, 19:08
  3. Query 0-Werte Ausgeben???
    By qiwi2000 in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 26-04-02, 07:51
  4. QUERY als SQL-Anweisung ausgeben?
    By Matthias.Hayn in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 27-11-01, 11:28
  5. Antworten: 2
    Letzter Beitrag: 13-06-01, 14:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •