Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)

Oschi66 / 12 Antworten / Baumansicht Nickles

Kann mir jemand bei folgendem Problem helfen?


Ich habe in VB6 eine Abfrage auf eine Oracle - Datenbank erstellt. Will jetzt alle Datensätze bis zu einem bestimmten Datum selektieren, ich verwende dazu die TO_DATE - Funktion:


(TERMIN.TERM <= TO_DATE('29.02.2004','DD.MM.YYYY'))


Das ist aber nicht sehr sinnvoll, da ich jedes mal den Endtermin neu programmieren muß. Wie kann ich auf einen Wert aus einem Textfeld oder vielleicht aus einem Kalendersteuerelement in meinem Startformular als Parameter zugreifen.

bei Antwort benachrichtigen
T-Rex Oschi66 „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Hi,

... (Termin.Term 


Du mußt mit einer ganz normalen String-Verkettung arbeiten.
 GrüßeT-Rex 
bei Antwort benachrichtigen
Oschi66 T-Rex „Hi, ... Termin.Term Du mußt mit einer ganz normalen String-Verkettung arbeiten.“
Optionen

Danke erst einmal für deine schnelle Antwort, jedoch funktioniert das nicht so richtig und auch zu meinem Verständnis da ich noch nicht so lange in VB6 unterwegs bin. Ich habe die SQL wie folgt angepasst:

...
Wofür steht Chr$(39) und muß ich nicht außer dem Textfeld auch noch auf das Formular verweisen, ich habe zwar nur 1 Formular aber ...?

Die Fehlermeldung heißt "wortwörtlich"

Abrufen des Zeilengruppe aus aktueller Datenquelle fehlgeschlagen

bei Antwort benachrichtigen
T-Rex Oschi66 „Danke erst einmal für deine schnelle Antwort, jedoch funktioniert das nicht so...“
Optionen

Chr$(39) liefert ein einfaches Hochkomma
Wenn der Code nicht in der Form steht, auf dem txtEnddatum liegt, mußt Du den Namen der Form ebenfalls angeben. Ansonsten ist es nicht nötig.
Ich habe mich bei dem Code an Deine Vorgaben gehalten, weil ich die Funktion ToDate() nicht testen kann.

Poste mal bitte die komplett zusammengesetzte SQL-Anweisung. Der Fehler wird nämlich von der DB geliefert, deshalb nehme ich an, daß ein Fehler in der SQL-Anweisung ist.

 GrüßeT-Rex 
bei Antwort benachrichtigen
Oschi66 T-Rex „Chr 39 liefert ein einfaches Hochkomma Wenn der Code nicht in der Form steht,...“
Optionen

Entschundige bitte, habe mich im Thread verhauen und auf meine eigene Frage geantwortet. Antwort steht etwas weiter oben.

bei Antwort benachrichtigen
Oschi66 Nachtrag zu: „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Also der Code steht nicht im Formular, sondern im DataEnvironment weil ich daraus einen Report generiere oder mache ich hier einen grundsätzlichen Denkfehler.

SELECT TUH.V1101.LIEF_TERM, TUH.V110.AUFNR,
TUH.V110.AUFPOS, TUH.V110.IDENTNR, TUH.V110.BEN_1,
TUH.V110.BEN_4, TUH.V110.BEN_5, TUH.V100.KONTO,
TUH.V100.BEST_NR, TUH.V100.BEST_SB, TUH.V1101.ST_LS,
TUH.V110.ST_RG, TUH.V1101.MENGE,
TUH.V1101.MENGE_GEL
FROM TUH.V1101, TUH.V110, TUH.V100
WHERE TUH.V1101.AUFNR = TUH.V110.AUFNR AND
TUH.V1101.AUFPOS = TUH.V110.AUFPOS AND
TUH.V1101.AUFNR = TUH.V100.AUFNR AND
(TUH.V1101.LIEF_TERM 'DD.MM.YYYY')) AND (TUH.V1101.ST_LS (TUH.V110.ST_RG TUH.V100.KONTO = 12012 OR
TUH.V100.KONTO = 12414 OR
TUH.V100.KONTO = 11209 OR
TUH.V100.KONTO = 18005 OR
TUH.V100.KONTO = 13608 OR
TUH.V100.KONTO = 13611 OR
TUH.V100.KONTO = 13620 OR
TUH.V100.KONTO = 10005 OR
TUH.V100.KONTO = 10003 OR
TUH.V100.KONTO = 10004 OR
TUH.V100.KONTO = 10005 OR
TUH.V100.KONTO = 10007 OR
TUH.V100.KONTO = 12802 OR
TUH.V100.KONTO = 12820 OR
TUH.V100.KONTO = 14403 OR
TUH.V100.KONTO = 17605) AND (TUH.V100.VVORGART = '1')
ORDER BY TUH.V1101.LIEF_TERM, TUH.V110.AUFNR,
TUH.V110.AUFPOS

bei Antwort benachrichtigen
T-Rex Oschi66 „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Ja, die Sache mit dem DataEnvironment.
Damit kenne ich mich überhaupt nicht aus, weil ich auf den gebundenen Mist komplett verzichte.

Wenn ich mir die SQL-Anweisung aber so anschaue:
Bedingungen klammert man normalerweise, erst recht, wenn weitere Bedingungen (mit AND oder OR) folgen.
Die Zahlenwerte bei TUH.V100.KONTO kannst Du auch so schreiben:

TUH.V100.KONTO IN (12012, 12414, 11209)

Damit werden dann alle Datensätze zurückgegeben, bei denen eine dieser drei Zahlen in "Konto" steht.
Deine Art der Tabellenverknüpfung ist auch nicht gerade optimal, schau Dir mal INNER JOIN an.

Ansonsten kann ich Dir leider gar nicht weiterhelfen.
Frag mal hier nochmal nach: www.activevb.de
 GrüßeT-Rex 
bei Antwort benachrichtigen
Oschi66 T-Rex „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Danke für die Tipps zur SQL - Optimierung, werde mich damit mal genauer beschäftigen, mal sehen was ich noch rauskitzeln kann. Ich bin wie gesagt noch relativ unbedarft mit VB6. Für mich war das DataEnvironment der einfachste Weg um einen Report zu bekommen. Hast du für mich noch einen anderen Weg um dieses Problem zu lösen, ohne das DataEnvironment zu benutzen?

bei Antwort benachrichtigen
T-Rex Oschi66 „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Ich glaube, ich habe ein Beispiel für Dich:
ADO_DataReport.zip

 GrüßeT-Rex 
bei Antwort benachrichtigen
Oschi66 T-Rex „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Ich muß mich noch ein Mal bedanken bei dir, die IN - Klausel funktioniert einwandfrei, für die INNER JOIN Tabellenverknüpfung brauche ich jedoch etwas länger, denn so Fit bin ich in SQL noch nicht, aber man lernt ja nie aus.
Wenn ich mir den ADO_DataReport so ansehe, wird mir nichts anderes übrigbleiben als das ganze Projekt noch einmal von vorne anzufangen, na ja die SQL und das reine Reportformular kann ich ja noch verwenden. Beim nächsten Mal bin ich eben schlauer.

bei Antwort benachrichtigen
T-Rex Oschi66 „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen
 GrüßeT-Rex 
bei Antwort benachrichtigen
Oschi66 T-Rex „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Danke für deine Hilfe, ist schön wenn jemand da ist der einem so schnell und kompetent hilft.
Gruß
oschi66

bei Antwort benachrichtigen
Oschi66 T-Rex „Wert aus Formularfeld als Kriterium in Datenbankabfrage (VB6)“
Optionen

Habe eine teilweise Lösung meines Problemes gefunden, falls es dich oder einen anderen interessiert.

Private Sub cmdLieferliste_Click()

DataEnvironment1.Commands("sqlLieferliste").Parameters(0) = txtEnddatum.Text
rptLieferliste.Show

End Sub

Teilweise insofern, als das Oracle als Kriterium die TO_DATE - Funktion benötigt und ich noch nicht so richtig weiß wie ich den Parameter rüber gebe:

28.04.2004 (Wert den das Textfeld ausgibt)
TO_DATE ('28.04.2004', 'DD.MM.YYYY') (Wert der benötigt wird)

bei Antwort benachrichtigen