Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage von Listenfeld

Begonnen von Kladdi, Februar 22, 2013, 09:17:11

⏪ vorheriges - nächstes ⏩

Kladdi

Also, er exportiert schon mal Werte...nur nicht die richtigen...sind statt 6 Werten 9 Werte

Kleine Anmerkung noch, die Zeile funktionierts nur so:
ZitatCurrentdb.Querydefs!DeineAbfrage.SQL = strvalue

DF6GL

#16
Hallo,

beides Mal ist es ein Irrweg.

Zitat
= 'FY2012-04' Or 'FY2012-02'
ist kein gültiger Where-Bedingungsausdruck


ZitatEigentlich geht es ja nicht darum, einen kompletten Abfrage SQL-String zu erstellen
doch, darum geht es, denn ohne den kompletten SQL-String schaftt man es nicht, in eine vorhandene Abfrage, nur den kompletten Where-Bedingungs-Ausdruck mittels Rückgabewert einer Funktion einzubauen...


DF6GL

OK,

das "!" ist falsch an dieser Stelle, habe das auch im Beitrag geändert..


Führ doch die Abfrage mal aus dem DB-Fenster (Navi-Bereich) heraus aus, bzw. öffne die mal im Abfrageentwurf und prüfe, ob die Bedingungen zutreffend sind.

69bruno

Hmmmm,
wo ich mein eigenes Posting so sehe,
erkenne ich wildes Vermischen von SQL-Statements und den Statements im Abfrageeditor.......
wenn Du es im Abfrageeditor gelöst haben willst, dann darf, bei mir getestet, das Ergebnis der Funktion nur noch
'FY2012-04' Or 'FY2012-02' sein.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

69bruno

Ich habe es mal mit 2 Namen gemacht, da geht es bei mir.....

siehe Anhang

[Anhang gelöscht durch Administrator]
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

DF6GL

in der Tat,

der Abfrageeditor (Abfrageentwurf) zeigt aber auch nur die "User-genehme" Ansicht der Abfrage...  Schau Dir mal die "SQL-Ansicht" der Abfrage an...

69bruno

Ist mir klar, aber wenn ich die Funktion Liste() im Abfrageeditor einfüge, dann sollte sie nur die "echten" Kriterien zurückliefern, denn der Editor wandelt das ganze ja selbständig in einen SQL-String um und hat dann ggfls. zu viele Informationen.

Mit der Zeile
strvalue = "'" & frmSelectionExport.List16.ItemData(i) & IIf(Len(strvalue), "' Or " & strvalue, "'")
in der Funktion sollte es im Abfrageeditor reichen.
Leider bin ich nicht der SQL-Spezi, ich muss mir hier mit der genehmen Form des Editors helfen.......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

69bruno

Und mit dieser Funktion:

Public Function Liste()

Dim strvalue As String

strvalue = "'Kaufmann' Or 'Doll'"
Liste = strvalue

End Function


läuft es bei mir....über den Abfrageeditor......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Kladdi

#23
Darf ich mich mal kurz einschalten?  :-X

Es funktioniert mit beidem...mehr oder minder...

Gebe ich als Kriterium Liste() an funktionierts beim ersten Mal super, aber danach nicht mehr.
Weil beim nächsten Öffnen der Datenbank steht nun nicht mehr Liste() als Kriterium sondern die x Einträge die ich beim letzten Mal ausgewählt hatte.
Wähle ich nun neue Einträge, nimmt er immernoch die Alten als Kriterium, sprich es passiert nichts.

Könntet ihr mir besser helfen wenn ihr eine Demo meiner DB hättet?

69bruno

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Kladdi

Guten Morgen,

anbei mal meine Datenbank.
Das Formular über das das alles läuft heißt frmSelectionExport, die dazugehörige Query heißt qryExportSelection und das Modul mit der Function heißt Selection.

Mfg Kladdi

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,


etwa so:


Private Sub Command3_Click()

Dim xlAnw As Object
Dim startmonth As Variant
Dim endmonth As Variant

' Export

CurrentDb.QueryDefs!qryExportselection.SQL = "SELECT *  FROM tblBooking Where " & fncKrit

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "qryExportSelection", "C:\Temp\Customer-Report.xls", , "Sheet1"
.
.
.
.
.

End Sub
Public Function fncKrit()

Dim varItm As Variant
Dim strSqlFilter As String, i As Long

With Forms!frmSelectionExport!List16
'    For Each varItm In .ItemsSelected
'        strSqlFilter = strSqlFilter & " or [boRevenue Recognition Fiscal Year Month Display Code] = '" & .ItemData(varItm) & "'"
'    Next varItm
    For i = 0 To .ListCount - 1
         strSqlFilter = strSqlFilter & " or [boRevenue Recognition Fiscal Year Month Display Code] = '" & .ItemData(i) & "'"
    Next
   
    If strSqlFilter <> "" Then
       fncKrit = Mid(strSqlFilter, 5)
    End If
 
End With
End Function


Kladdi

Hallo,

erstmal danke für deine Mühe.

Die SQL Zeile im Export zeigt nen Compile Error weil fncKrit "zweideutig" ist.
Ansonsten läufts, Problem bleibt weiterhin dass er sich die im letzten Durchlauf ausgewählten "merkt" und als Kriterium nimmt
und nicht die neu ausgewählten.
Könnte man das lösen indem man nach jedem Export die "Selected"-ListBox leert?

Mfg Kladdi

DF6GL

Hallo,


die vorhandene fncKrit wird  ja nur verändert, nicht neu hinzugefügt....


Zitat"Könnte man das lösen indem man nach jedem Export die "Selected"-ListBox leert?"

na klar...   ;)

Kladdi

#29
Hallo,

Zitatdie vorhandene fncKrit wird  ja nur verändert, nicht neu hinzugefügt....
Und das heißt?  ;D

If Me.List16.ListCount > 0 Then
   i = 0
   j = Me.List16.ListCount - 1
   Do Until i > j
       Me.List16.RemoveItem (j - i)
       i = i + 1
   Loop
End If


Löscht nach jedem Export die ListBox, nur "speichert" sich die Abfrage anscheinend die Werte vom letzten Mal
bzw. sollte sich die Function ja bei jedem mal neu "berechnen", was sie aber nicht tut.


UPDATE: Ah Moment, hab nochmal deinen Beitrag gelesen.
Dient die Function fncKrit dazu, denn die ist mir gänzlich unbekannt?  :-[