Office: ODBC SQL Fehlermeldung

Helfe beim Thema ODBC SQL Fehlermeldung in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen! Habe folgendes Problem: ich rufe über ODBC Felder von einem SQL Server ab die Felder kann sich der User variabel zusammensetzen es... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von gook, 28. Mai 2010.

  1. gook Erfahrener User

    ODBC SQL Fehlermeldung


    Hallo zusammen!

    Habe folgendes Problem:
    ich rufe über ODBC Felder von einem SQL Server ab
    die Felder kann sich der User variabel zusammensetzen es können bis zu 50 Felder sein es können aber auch nur 4 sein.
    Das eigentliche Problem ist das ich die Felder die Abgerufen werden per Variable übergeben "SQLSRING"
    Sobald sich in diesem SQL String aber mehr als 8 Felder befinden bekomme ich eine Fehlermeldung.

    Gibt es keine Möglichkeit diese Begrenzung von acht Feldern pro Zeile pro SQL Befehl aufzuheben.
    Wen ich mir das Ganze mit dem Makrorecorder aufzeichne wird auch nach jedem achten Feld pro Zeile ein Zeilenumbruch erzwungen.

    Vielen Dank schon mal im Voraus!
     
  2. Exl121150 Erfahrener User
    Hallo Manuel,

    das muss wohl an dem SQL-Treiber für ODBC liegen.

    Ich greife auf eine Microsoft SQL-Server-Datenbank mit dem dazugehörigen Treiber zu und habe/hatte keine Probleme mit der abgefragten Felderanzahl - weder unter Office2003 noch unter Office2007.
    Ebenso auf eine ORACLE-Datenbank mit dem entsprechenden Oracle- bzw. Microsoft-Treiber - keine Feldanzahlprobleme.

    ODBC wird ja sicher eine Fehlernummer zurückgeben. Gelegentlich kommt man auf die richte Spur, wenn man das bei Google eingibt, z.B:
    ODBC 18456
     
    Exl121150, 29. Mai 2010
    #2
  3. gook Erfahrener User
    Hallo Exl121150 danke für die schnelle Antwort.

    Hm naja vieleicht liegt es auch daran das ich mit dem Makrorekorder aufgezeichnet habe und dann erst den SQLSTRING eingebunden habe?

    ANbei mal den Code vom Makrorekorder so ist es kein Problem mehrer Felder einzubinden aber sobald mehr als 8 Felder in einer Zeile stehen gibts probleme

    Code:
    .CommandText = Array( _
            "SELECT Artikel.ArtNr, Artikel.ArtType, Artikel.QKzs, Artikel.WarGruNr, Artikel.RabGruNr, Artikel.ProvGruNr, Artikel.Ursprungsland, Artikel.MwSt, Artikel.BeschKZ, Artikel.Code, Artikel.FDANr, Artikel.M" _
            , _
            "DNo, Artikel.ClassNo, Artikel.ArtBez1, Artikel.ArtBez1RTF, Artikel.ArtSuch, Artikel.ArtBez2, Artikel.ArtBez2RTF, Artikel.Chargen, Artikel.OhneNummer, Artikel.Seriennummern, Artikel.LotIntegrity, Artik" _
            , _
            "el.AetzKz, Artikel.Notizen, Artikel.ME, Artikel.PreisEinheit, Artikel.VerpEinheit, Artikel.AnzNkSt, Artikel.Hoehe, Artikel.Breite, Artikel.Laenge, Artikel.Volumen, Artikel.Gewicht, Artikel.BruttoGewic" _
            , _
            "ht, Artikel.spezGewicht, Artikel.Werkstoff, Artikel.ZeichnungNr, Artikel.DatAnlage, Artikel.DatAenderung, Artikel.Rabatt, Artikel.LieferzeitTage, Artikel.LieferzeitWochen, Artikel.ArtNrExport, Artikel" _
            , _
            ".verderblich, Artikel.VKPreisEmpf, Artikel.VKPreis, Artikel.EkPreis, Artikel.EkWDurchschnitt, Artikel.EANNr, Artikel.ISOClass, Artikel.ISOExpiry, Artikel.ISOProduction, Artikel.ISOSterile, Artikel.ISO" _
            , _
            "SingleUse, Artikel.ISOCE, Artikel.ISOLot, Artikel.ZDispoKz, Artikel.DispoMethode, Artikel.ErloesInland, Artikel.ErloesAusland, Artikel.ErloesEG, Artikel.ErloesEGOhneID, Artikel.KalkExtSchema, Artikel." _
            , _
            "PackMenge, Artikel.ManufacID, Artikel.ManufacItemID, Artikel.ManufacDesc1, Artikel.ManufacInHouse, Artikel.CostCenterNo, Artikel.WeightPerMeter, Artikel.RodLength, Artikel.USER_AutorProv, Artikel.USER" _
            , _
            "_AutorProvSatz, Artikel.USER_Schablone, Artikel.USER_Farbe" & Chr(13) & "" & Chr(10) & "FROM VFAKTSQL.dbo.Artikel Artikel" _

    Vielen Dank schonmal
     
  4. Exl121150 Erfahrener User

    ODBC SQL Fehlermeldung

    Hallo Manuel,

    2 Dinge sind mir am übermittelten VBA-Code aufgefallen - die (ziemlich) sicher Probleme bereiten:

    1) .CommandText = Array( _ SQL-Abfrage ...)
    Mir ist ziemlich unklar, dass man eine SQL-Abfrage auch in ein Array(...) stecken darf; ich sehe so etwas zum ersten Mal.
    Ich nehme an, dass es ohne das umgebende "Array(....)" besser gehen sollte, also:
    .CommandText = "SELECT Feld1, Feld2,..., FeldN FROM Tabelle WHERE Kriterium ORDER BY Sortierung;"

    2) Da die SQL-Abfrage einen langen Abfrage-String zur Folge hat, wurde sie auf mehrere VBA-Zeilen umbrochen/aufgeteilt. Dabei sind weitere Problemstellen entstanden, die 100% einen Fehler bewirken:
    In VBA kann eine überlange Zeile zB. in 2 Zeilen aufgeteilt werden, wobei am Ende der 1. Zeile die Zeichenfolge Leerzeichen+Unterstrich+Zeilenumbruch stehen muss. Aber diese Zeichenfolge darf nur an bestimmten Stellen eingefügt werden:
    Sie darf nicht innerhalb einer Zeichenkette (zB. "Das ist eine Textkette") eingefügt werden; außerhalb dieser jedoch überall dort, wo auch ein Leerzeichen oder ein sonstiges syntaktisches Trennzeichen (zB: "," oder ";" oder "." oder ein Operator) stehen könnte, jedenfalls auf keinen Fall innerhalb eines (Variablen)bezeichners.
    Nimmt man beispielhaft die 1. Stelle mit einem Umbruch her:
    so stellen die roten Zeichen die fehlerhafte Passage dar.
    a) Die Feldbezeichnung lautet: Artikel.MDNo. Diese darf nur an der Stelle mit dem "." umbrochen werden oder aber davor oder danach, keinesfalls aber mitten im Bezeichner "MDNo" oder "Artikel".
    b) Es erfolgte gleichzeitig ein 2. Umbruch ", _", der bedeuten würde, dass auch das Komma am Anfang der Zeile zum Abfragetext gehört (was aber nicht stimmen kann, denn dieses Komma befände sich dann mitten im Bezeichner "MDNo" nach dem "M").
    c) Diese ganze Umbruchsstelle befindet sich innerhalb einer Zeichenkette, die lautet:
    "SELECT Artikel.ArtNr, ..., Artikel.MDno, ... FROM VFAKTSQ.dbo.Artikel ...."
    Um so eine überlange Zeichenkettenkonstante zu umbrechen auf zB. 2 Zeilen, muss man 2 Zeichenketten daraus machen, die mit " & " miteinander verknüpft werden.
    d) Also müssen diese beiden Umbruchsstellen korrekterweise so dargestellt werden:
    "SELECT Artikel.ArtNr, ..., Artikel.FDANr, " & _
    "Artikel.MDNo, Artikel.ClassNo, ..."

    oder aber:
    "SELECT Artikel.ArtNr, ..., Artikel.FDANr, Artikel.MDNo, " & _
    "Artikel.ClassNo, ..."

    e) Ähnliches gilt natürlich auch für alle folgenden Umbruchsstellen.

    Anmerkung: Möglicherweise ist die SQL-Abfrage bei 8 Feldern gerade so zu liegen gekommen, dass kein Umbruchsfehler aufgetreten ist. Und deshalb hat sie dann funktioniert.
     
    Exl121150, 29. Mai 2010
    #4
  5. gook Erfahrener User
    Hallo !

    VIelen dank schonmal ich denke auch das es vieleicht an Array() liegt.

    Was komischt ist das eben genau dieser VBA Code genau so wie er da steht ohne Probleme funktioniert wieso allerdings der Makro Recorder so ein sch... aufzeichnet weis ich auch nicht.

    Naja jedenfalls Probiere ich es später mal aus ohne Array und melde mich dann wieder.

    Vielena Dank nochmal und noch ein schönes Wochenende
     
  6. Bamberg Erfahrener User
    Hall Manuel,

    ".CommandText" hat eine Zeichenbegrenzung. Ist der String zu lang, erhältst Du eine Fehlermeldung. Ersetze doch mal diesen Befehl durch ".SQL"

    Hier mal ein Beispiel aus einem anderen Beitrag:
    Code:
        Dim SQLString As String
        Dim SQL_var   As String
        
        SQL_var = "TABLE.MATERIAL='ABC' OR TABLE.MATERIAL='BCD' OR TABLE.MATERIAL='CDE' OR TABLE.MATERIAL='EFG'"
        SQL_var = SQL_var & " OR TABLE.MATERIAL='FGH' OR TABLE.MATERIAL='GHI' OR TABLE.MATERIAL='IHJ'"
        
        SQLString = "SELECT TABLE.MATERIAL, TABLE.MOQ, TABLE.SPQ, TABLE.AVAIL_DATE, TABLE.CALC_LEADTIME, "
        SQLString = SQLString & " TABLE.LEADTIME_MIN, TABLE.LEADTIME_MAX, DETAIL.MATL_GROUP_1, UV_MATL_DETAIL.RPT_CLASS_2, "
        SQLString = SQLString & "DETAIL.PKG_CONFIG, TABLE.AS_OF_DATE, TABLE.REGION, TABLE.SBE, TABLE.SBE_1 FROM "
        SQLString = SQLString & "{oj ADHOC.TABLE TABLE LEFT OUTER JOIN ADHOC.UV_MATL_DETAIL DETAIL ON "
        SQLString = SQLString & "TABLE.MATERIAL = DETAIL.MATERIAL} WHERE (" & SQL_var & ") and (TABLE.REGION='EU')"
        
        '.... 
        .Sql = SQLString
    LG Gerd
     
    Bamberg, 30. Mai 2010
    #6
  7. miriki Erfahrener User
    Das Problem wird weniger die Anzahl der Felder sein, aber die Syntax und Zeilenlänge dürften sich beißen.

    Also zuerst einmal schätze ich auch mal, daß der Aufbau des SQL-Befehls in einem Array suboptimal ist. Ich würde ihn ebenfalls in einem normalen String zusammenbauen.

    Dann schrieb Exl ja auch schon was zum Thema Zeilen-Verbindung. Mein Verdacht in dem Zusammenhang, ohne jetzt aber die Specs nochmal gelesen zu haben:

    War es nicht so, daß in VBA eine Zeile max. 255 Zeichen lang sein darf und gerade deswegen diese " _" Geschichte eingeführt wurde, um längere Befehle zu ermöglichen?

    Dann würde es nämlich in die Theorie passen: Der Makro-Rekorder baut die Verbinder so ein, daß nicht mehr als 255 Zeichen pro Zeile entstehen. Fügst Du jetzt aber einen Feldnamen in den String ein, verlängert sich die Zeile über die 255er Grenze hinaus und es rummst.

    Die grundlegende Struktur eines SELECT ist ja
    SELECT feldname(n)
    FROM tabelle
    WHERE bedingung(en)
    ORDER BY feldname(n)

    Und dies würde ich auch in einzelnen Strings so zusammenbasteln, was die Sache nämlich eine ganze Ecke übersichtlicher macht.

    Code:
    sql_select = SELECT feld1"
    for n=2 to x
      sql_select = ", " & "feld"&n
    next n
    sql_from = "FROM tbl1"
    sql_where = "WHERE feld1>10"
    sql_order = "ORDER BY feld1 ASC"
    
    sql_command = sql_select & " " & sql_from & " " & sql_where & " " & sql_order & ";"
    Hier müßtest Du jetzt natürlich noch die Feld- und Tabellen-Namen anpassen, insbesondere in der FOR..NEXT-Schleife. Aber irgendwie wirst Du die vom Anwender ausgewählten Feldnamen ja in einer Schleife zusammenbasteln müssen.

    Gruß, Michael
     
    miriki, 31. Mai 2010
    #7
Thema:

ODBC SQL Fehlermeldung

Die Seite wird geladen...
  1. ODBC SQL Fehlermeldung - Similar Threads - ODBC SQL Fehlermeldung

  2. Excel 2016 ODBC SQL Abfrage mit Zellbezug

    in Microsoft Excel Hilfe
    Excel 2016 ODBC SQL Abfrage mit Zellbezug: Hallo Zusammen, da ich leider nicht fündig geworden bin mache ich jetzt mal ein neues Thema auf. Ich hab eine SQL Abfrage die auch funktioniert die lautet Code: SELECT "- Standard Calendar"."Day...
  3. MS-SQL Tabelle per ODBC mit VBA verknüpfen

    in Microsoft Access Hilfe
    MS-SQL Tabelle per ODBC mit VBA verknüpfen: Hallo zusammen, bisher verwende ich in Access 2013 / 2016 die Funktion "Externe Daten" -> "ODBC-Datenbank" um Tabellen aus einer MS-SQL Datenbank zu verknüpfen. Das funktioniert soweit bestens....
  4. ODBC Anbindung zur SQL Datenbank in Access Frontend einbauen

    in Microsoft Access Hilfe
    ODBC Anbindung zur SQL Datenbank in Access Frontend einbauen: Hallo zusammen, ich habe folgendes Setup: Datenbank auf SQL Frontend MSAccess User ca. 50 Damit ich nun nicht bei jedem User lokal eine ODBC Anbindung am Rechner einrichten muss, suche ich eine...
  5. Fehler "ODBC-Aufruf fehlgeschlagen" bei Datumsfeld auf SQL-Server

    in Microsoft Access Hilfe
    Fehler "ODBC-Aufruf fehlgeschlagen" bei Datumsfeld auf SQL-Server: Hallo, ich schreibe Daten aus jeweils einer Textdatei in Tabellen auf einem 2008er MS-SQL-Server. Die Tabellen sind ins FE eingebunden. Code: ... rs!PCC_DATUM = DateSerial(CLng(Mid(vZeile, 426,...
  6. ODBC SQL SERVER Verbindung per VBA erstellen

    in Microsoft Access Hilfe
    ODBC SQL SERVER Verbindung per VBA erstellen: Hallo Zusammen, habe folgende Code Übernommen, der soweit auch funktioniert, nur möchte ich nicht den Windows User als benutzer sondern einen anderen SQL User ohne Passwort Code: Option Explicit...
  7. ID aus SQL Recordset ermitteln - Geänderter Treiber?

    in Microsoft Access Hilfe
    ID aus SQL Recordset ermitteln - Geänderter Treiber?: ch habe ein akutes Problem beim Zugriff auf den SQL Server. Seit vielen Jahren nutze ich folgendes Prinzip. Im VBA lege ich einen neuen Datensatz in einem Recordset an. Da der SQL Server die...
  8. SQL ODBC String für VBA Verbindung

    in Microsoft Access Hilfe
    SQL ODBC String für VBA Verbindung: Hallo zusammen, ich habe ein Programm geschrieben - das bis dato nur mit ACCDB Tabellen verbunden war. Nun habe ich aber einen Kunden - der hin und wieder gewisse Daten auf seinen SQL Server...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden