Guten Tag
Der folgende Code lässt mein Unterformular einfach kalt. RecordSource bleibt gleich und wird nicht aktualisiert und das ohne einen Fehler anzuzeigen.
Me.subAufstellung.Form.RecordSource = sqlTotal
Me.subAufstellung.Form.Requery
Wird der gleiche in SQL-String in einer Abfrage geöffnet funktioniert er einwandfrei: Also kann es nicht am String liegen...
CurrentDb.QueryDefs("qryTotal").sql = sqlTotal
An anderen Stellen im Programm funktioniert die Zuweisung eines Strings zu der RecordSource-Property eines Unterformulars ganz normal: Also kann es nicht am Code liegen...
Woran kann es dann liegen?
Ich kann die RecordSource-Eigenschaft natürlich manuell der Abfrage "qryTotal" zuweisen, aber ich würde halt gerne den SQL-String automatisch mit VBA zuweisen, damit ich keine zusätzliche Abfrage benötige.
Vielen Dank für aufschlussreiche Hinweise
PS: Der SQL-String wird dynamisch erzeugt. Hier ein Beispiel von einem:
SELECT Sum(NettoBetrag) AS NettoSumme, Sum(RabattBetrag) AS RabattSumme, Sum(SkontoBetrag) AS SkontoSumme, Sum(NettoNetto) AS NettoNettoSumme, Sum(MWSTBetrag) AS Summe_MWST, Sum(BruttoBetrag) AS SummteTotal
FROM (SELECT Netto.PositionID, Objekt, Menge, Nettopreis, [MWST-Satz], NettoBetrag, Rabatt AS RabattBetrag, Nettobetrag*0.02 AS SkontoBetrag, NettoBetrag-RabattBetrag-SkontoBetrag AS NettoNetto, [MWST-Satz]*NettoNetto AS MWSTBetrag, NettoNetto+MWSTBetrag AS BruttoBetrag FROM (SELECT PositionID, Sum(RabattBetrag) AS Rabatt FROM (SELECT PositionID, 0 AS RabattBetrag FROM (SELECT PositionID, Bezeichnung AS Objekt, Menge, Einzelpreis AS Nettopreis, Nettopreis*Menge AS NettoBetrag, [MWST-Satz] FROM tblObjekt INNER JOIN (tblMenge INNER JOIN (tblPosition INNER JOIN tblPreis ON tblPosition.PositionID = tblPreis.Position_F) ON tblMenge.Position_F = tblPosition.PositionID) ON tblObjekt.ObjektID = tblMenge.Objekt_F WHERE tblPosition.Liste_F = 38)) AS Rabattpreise GROUP BY PositionID) AS Rabatt INNER JOIN (SELECT PositionID, Bezeichnung AS Objekt, Menge, Einzelpreis AS Nettopreis, Nettopreis*Menge AS NettoBetrag, [MWST-Satz] FROM tblObjekt INNER JOIN (tblMenge INNER JOIN (tblPosition INNER JOIN tblPreis ON tblPosition.PositionID = tblPreis.Position_F) ON tblMenge.Position_F = tblPosition.PositionID) ON tblObjekt.ObjektID = tblMenge.Objekt_F WHERE tblPosition.Liste_F = 38) AS Netto ON Rabatt.PositionID = Netto.PositionID) AS Aufstellung;
Hallo,
meines Erachtens gehört nach "Me" das Ausrufezeichen, also Me!subAufstellung.Form.RecordSource =
VBA reagiert da manchmal empfindlich ohne beim Debuggen einen Fehler zu erkennen.
Gruß Thomas
Hallo Thomas
Vielen Dank.
Das Problem hat sich mit dem "!-Operator" erledigt. Ich weiss allerdings nicht warum. Denn an etwa 5 Stellen in meinem Programm verwende ich für die gleiche Aufgabe den ".-Operator". Und alle Parameter nach "Me" können mit Intellisense ausgewählt werden.
Hallo,
ich fand gerade diese Stelle, die auf dieses Problem näher eingeht. Etwas verwirrend für Normalos wie mich, muss mich mal näher damit befassen:
http://www.office-loesung.de/p/viewtopic.php?f=167&t=752651 (http://www.office-loesung.de/p/viewtopic.php?f=167&t=752651)
Gruß Thomas
PS: Weiterer Link:
http://dbwiki.net/wiki/VBA_Grundlagen:_Verwendung_des_!-Operators (http://dbwiki.net/wiki/VBA_Grundlagen:_Verwendung_des_!-Operators)
Zitat von: Minotauros am Oktober 02, 2020, 16:06:59Das Problem hat sich mit dem "!-Operator" erledigt.
Das ergibt nicht wirklich Sinn. Wenn der Ausdruck nicht aufgelöst werden konnte, hätte das einen Kompilierfehler oder später mindestens einen Laufzeitfehler geben müssen.
Hallo,
ich hatte kürzlich ein ähnliches Problem, bei dem in einem Textfeldbezug der Punkt einen Fehler verursachte und der Bang-Operator dies Problem löste, und zwar ohne Kompilierfehler. Beim Ausführen des Codes kam, wenn ich mich recht erinnere, die Fehlermeldung: "Das Objekt unterstützt diese Methode nicht".
Gruß Thomas