Zum Inhalt springen

Joins


UBAI

Empfohlene Beiträge

Hallo,

hab folgendes SQL-Problem.

Möchte zum Debitor die Rechnungsköpfe und zu dennen die zugehörigen Rechnungszeilen ausgeben.

Bitte nicht verwundert sein, der code kommt aus VBA. Mir gehts hauptsächlich um die joins.


sqlstring = "select Deb.Nr_ as Debitornummer, Deb.Name, VRK.Nr_ as Rechnungsnummer, VRK.Buchungsbeschreibung, VRZ.Art,"

  sqlstring = sqlstring + " VRZ.Nr_, VRZ.Beschreibung, VRZ.Menge, VRZ.Betrag"

  sqlstring = sqlstring + " from Verkaufsrechnungszeile VRZ inner join Verkaufsrechnungskopf VRK on VRZ.Belegnr_ = VRK.Nr_"

  sqlstring = sqlstring + " inner join Debitor Deb on Deb.Nr_ = VRK." & Chr(34) & "Verk_ an Deb_-Nr_" & Chr(34)

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte nicht verwundert sein, der code kommt aus VBA. Mir gehts hauptsächlich um die joins.

Und wo genau liegt dein Problem? Funktioniert das Statement nicht? Bekommst du eine Fehlermeldung? Ansonsten: Bekommst du Datensätze zurück?

Ohne mehr Infos wird dir da wohl kaum jemand weiterhelfen können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tja, es funktioniert nicht. Zugriff erfolgt in VBA via ODBC. Und da kommt nur ne allg. Fehlermeldung und keine Schlüssige.

Und bist du mal auf die Idee gekommen, dass jemand - um dir zu helfen - diese Fehlermeldung gebrauchen könnte?

Hey - DU willst Hilfe haben, dann musst du auch schon ein bisschen dazu beitragen diese Hilfe auch zu bekommen *kopfschüttel*.

Kleiner Lesetipp:

How to ask questions the smart way

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Gott, reg Dich nicht auf! Wenn er kein Problem damit hätte, hätte er es wohl nicht gepostet! Oder meinste er macht das aus Spaß??

Ich reg mich nicht auf, dazu braucht es schon noch mehr. Und dass er das nicht aus Spaß gepostet hat ist mir auch klar. Ich würde ihm ja auch gerne helfen - sonst hätte ich nicht gepostet er solle mal genau schreiben, was eigentlich genau los ist.

Aber wie soll man jemandem helfen, wenn das Problem noch nichtmal klar ist? Und wenn ich Hilfe haben will, dann ist Grundregel Nummer eins die Frage so zu stellen, dass mir auch jemand helfen kann.

Mir gehts nicht darum den OP eine auszuwischen sondern ihm zu zeigen, wie er auch die Hilfe bekommen kann, die er haben will.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Gott, reg Dich nicht auf! Wenn er kein Problem damit hätte, hätte er es wohl nicht gepostet! Oder meinste er macht das aus Spaß??

*2x kopfschüttel*

Was machst du, wenn ein Kunde kommt und sagt dass an seinem Auto eine was kaputt ist, dir aber nicht sagt was oder wie er darauf aufmerksam wurde? Wenn der Kunde das dann nicht sagt, da es ein Fehler ist, der so oder so bei jedem Auto der Reihe passieren kann auftritt haste auch nichts davon. Also ist der Einwandt vom perdi gerechtfertigt.

@UBAI:

gewöhn dir bitte an die SQL-Befehle etc. groß zu schreiben. Ist für die Übersicht einfacher.

So ich hab den Query mal in normales SQL umgestellt. Vllt. kommt man dann weiter. Irritieren tut mich die letze Zeile ein wenig. (btw: grossgeschriebene Variablen sind auch grässlich...)

SELECT

    Deb.Nr_ as Debitornummer,

    Deb.Name,

    VRK.Nr_ as Rechnungsnummer,

    VRK.Buchungsbeschreibung,

    VRZ.Art,

    VRZ.Nr_,

    VRZ.Beschreibung,

    VRZ.Menge,

    VRZ.Betrag

FROM

    Verkaufsrechnungszeile VRZ INNER JOIN

    Verkaufsrechnungskopf VRK ON VRZ.Belegnr_ = VRK.Nr_ INNER JOIN

    Debitor Deb ON Deb.Nr_ = VRK."Verk_ an Deb_-Nr_"

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die letzte Zeile: Debitor Deb ON Deb.Nr_ = VRK."Verk_ an Deb_-Nr_"

ist deshalb irritierend, da der ODBC-Treiber von Navision die . durch _ ersetzt.

Die Tabellenstruktur ist ziehmlich einfach.

Debitor:

Nr_ (PS)

Name

.

.

.

Verkaufsrechnungskopf:

Nr_ (PS)

Verk_ an Deb_-Nr_ (FK)

.

.

.

Verkaufsrechnungszeile

Belegnr_ (PS)

Zeilennr_ (PS)

Art (Artikel, Sachkonto, etc.)

Nr_ (Nr. der ausgewählten Art)

.

.

.

Anzeigen lassen möchte ich alle Rechnungen und der zugehörigen Rechnungszeilen der Debitoren.

Die Meldung die ich von ODBC in VBA erhalte ist nicht aussagekräftig: "Laufzeitfehler 1004 Allgemeiner ODBC - Fehler"

Hier mal der komplette Code


Sub SQLTest()

  Dim qt As QueryTable

  'geht

  'sqlstring = "select Deb.Nr_ as Debitornummer, Deb.Name, VRK.Nr_ as Rechnungsnummer, VRK.Buchungsbeschreibung "

  'sqlstring = sqlstring + "from Debitor Deb, Verkaufsrechnungskopf VRK where Deb.Nr_ = VRK." & Chr(34) & "Verk_ an Deb_-Nr_" & Chr(34)


   sqlstring = "SELECT distinct(Deb.Nr_) as Debitornummer,Deb.Name, VRK.Nr_ as Rechnungsnummer, VRK.Buchungsbeschreibung, VRZ.Art,"

   sqlstring = sqlstring + " VRZ.Nr_, VRZ.Beschreibung, VRZ.Menge, VRZ.Betrag"

   sqlstring = sqlstring + " FROM Verkaufsrechnungszeile VRZ"

   sqlstring = sqlstring + " INNER JOIN Verkaufsrechnungskopf VRK on VRZ.Belegnr_ = VRK.Nr_"

   sqlstring = sqlstring + " inner join Debitor Deb on Deb.Nr_ = VRK." & Chr(34) & "Verk_ an Deb_-Nr_" & Chr(34)

   MsgBox (sqlstring)

  connstring = "ODBC;DSN=ODBC 370;UID=super;PWD=super;Database=database.fdb"


  With ActiveSheet.QueryTables.Add(Connection:=connstring, _

       Destination:=Range("B3"), Sql:=sqlstring)

       .Refresh

  End With

End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ohne mich jetzt mit dem Statement an sich nochmal befasst zu haben: Du solltest bei einer Fehlermeldung, die nicht genau zuordbar ist erstmal checken, wo überhaupt der Fehler genau liegt.

Im Statement?

Irgendwo im ODBC?

In der Applikation (VBA) selber?

Dazu solltest du erstmal das Statement selber genauso wie es ist mit einem Client auf der Datenbank ausführen. Funktioniert es da weisst du schonmal, dass irgendwas bei der Verbindung nicht stimmen kann, aber die Abfrage selber korrekt ist.

Kracht es schon bei der Datenbankabfrage solltest du in mehreren Steps das Statement von einem simplen "SELECT irgendwas FROM irgendwo" langsam und schrittweise zu dem kompletten Ausdruck erweitern, den du jetzt hast.

So wirst du recht schnell merken, wo das Problem genau liegt und wahrscheinlich auch direkt die Lösung heraussehen können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ob ich da nicht selber drauf gekommen wäre.

Die DB selber kann über den Client nicht mit SQL angesprochen weden. Es sei denn ich nutz den MS-SQL Server. Es handelt sich um den nativen Server.

Nun kann es sein, das der ODBC-Treiber nicht alle Befehlssätze verarbeiten kann.

Werd jetzt die Struktur in MySQL übertragen und dort die Abfrage starten. dachte nur, dass jemand sehen kann ob das SQL-Statement einen Fehler im Aufbau hat.

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...