2.4k Aufrufe
Gefragt in Datenbanken von Mitglied (335 Punkte)
Hallo zusammen,

ich bräuchte mal wieder Euren intelektuellen Rat.

Und zwar habe ich in einem Unterformular eine Abfrage mit dem Namen Qry_Financial_Payment_Data, die ich nach nach den 3 Kriterien Projekt, Annex, Bestnr anpassen will.

Es soll aber immer nur ein Kriterium gelten, also nur Project oder nur Annex oder nur Bestnr.

Die Abfrage müsste also bspw. die Spalten PROJECT, Payment_received_on, Payment_covered_by enthalten, wenn ich ein bestimmtes Project Test01 abrufe.

Will ich jedoch einen Annex sehen, dann müsste das Unterformular so aussehen: ANNEX, Payment_received_on, Payment_covered_by

Für jedes Kriterium gibt es je ein eigenes Textfeld mit den Namen txt_Project_DP, txt_Annex_DP und txt_Bestnr_DP.

Für alle 3 Kriterien habe ich bspw. folgendes Makro geschrieben:

Private Sub txt_Project_PD_LostFocus()

On Error GoTo Err_Command10_Click

'Declarations
Dim strsql As String
Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset

'Check, if project is contained in textfield
If IsNull(txt_Project_PD) Then
GoTo Exit_Command10_Click
End If

'Check, if project is there
If IsNull(DLookup("[Project]", "Tbl_Financial_Data", "[Project]= '" & Me!txt_Project_PD & "'")) Then
MsgBox ("This project in textfield Project is not listed!")
GoTo Exit_Command10_Click

'Manipulate query
Else

strsql = "SELECT Tbl_Financial_Data.Project, Tbl_Financial_Data.Down_payment_received_on, " & _
"Tbl_Financial_Data.Down_payment_covered_by, Tbl_Financial_Data.Rest_payment_received_on, " & _
"Tbl_Financial_Data.Rest_payment_covered_by, Tbl_Financial_Data.Allowed_Credit_Code, " & _
"Sum(Tbl_Financial_Data.Down_payment_received_USD) AS Down_payment_received_USD, " & _
"Sum(Tbl_Financial_Data.Rest_payment_received_USD) AS Rest_payment_received_USD, " & _
"Sum(Tbl_Financial_Data.Down_payment_received_EUR) AS Down_payment_received_EUR, " & _
"Sum(Tbl_Financial_Data.Rest_payment_received_EUR) AS Rest_payment_received_EUR, " & _
"Tbl_Financial_Data.Comments_Financials_Project" & " " & _
"FROM Tbl_Financial_Data" & " " & _
"GROUP BY Tbl_Financial_Data.Project, Tbl_Financial_Data.Down_payment_received_on, " & _
"Tbl_Financial_Data.Down_payment_covered_by, Tbl_Financial_Data.Rest_payment_received_on, " & _
"Tbl_Financial_Data.Rest_payment_covered_by, Tbl_Financial_Data.Allowed_Credit_Code, " & _
"Tbl_Financial_Data.Comments_Financials_Project HAVING (((Tbl_Financial_Data.Project) Is Not Null " & _
"And (Tbl_Financial_Data.Project)=[forms]![Frm_Financial_Payment_Dates_SFrm]![txt_Project_PD]));"

rst.Open strsql, CurrentProject.Connection, adOpenDynamic, adLockOptimistic

End If

'---------------------------------------------------------------------------------------------------------------------------
'Exit
'---------------------------------------------------------------------------------------------------------------------------

Exit_Command10_Click:
On Error Resume Next
rst.Close
Exit Sub

Err_Command10_Click:
MsgBox Err.Description
Resume Exit_Command10_Click

End Sub

Damit manipuliere ich den Query jedoch nicht und mit den Deklarationen QueryDef qdf.SQL bin ich auch nicht weiter gekommen.

Mir wurde gesagt, dass das auch DAO VBA ist und nicht ADO.

Könntet Ihr mich vielleicht erleuchten, dass es in ADO geht?

Gruß

Peter

2 Antworten

0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Peter,

wieso willst du ADO oder DAO verwenden? Nimm das alles raus und erzeuge nur den String "sqlstr". Danach setzt du die "RecordSource" des Unterformulars (Bsp hier: ufo) direkt auf den sqlstr. Bsp.:
me!ufo.form.RecordSource = sqlstr
IIm übrigen ist dein Code oben reinstes ADO.

Gruß
Ralf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Ralf,

habe endlich wieder mehr Zeit mich der Programmiererei zu widmen.

Deine Lösung hat gefunzt.

Danke und entschuldige für die späte Antwort, aber im Saisongeschäft geht es manchmal haarig zu.

Gruß

Peter
...