Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage von Listenfeld

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

⏪ vorheriges - nächstes ⏩

Kladdi

Hallo,

ich mal wieder.  ::)

Es ja möglich im Abfragekriterium ein Steuerelement von einem Formular anzusprechen.Mit:
BetweenForms![Formularname]![Steuerelementnamevon] AND Forms![Formularname]![Steuerelementnamebis]

Ist es möglich alle Werte eines Listenfelds anzusprechen und als Kriterium zu nutzen, bei mir nimmt er sich mit dem Befehl nur den letzten Eintrag raus.
Wenn ja, wie?

Mfg Kladdi

69bruno

Wo kommen denn die Werte des Listenfeldes her ?
Wenn sie aus einer Tabelle kommen, sollte man eher da ansetzen.....

Denn dann stehen die Werte ja wahrscheinlich irgendwie in Beziehung zu den DS'en.

Bei manuell hinzugefügten Listenfeldwerten die nichtin einer Tabelle sind, muss man dann anders vorgehen, aber da warte ich erst mal deine Antwort ab.

Steht das Listenfeld vorher schon in einer Abhängigkeit ? dann Sollte diese vorhergehende Abhängigkeit das Kriterium darstellen.

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

Kladdi

Naja ich hab auf einer Form ein Listenfeld um eine Auswahl treffen zu können. Die Werte kommen aus einer Tabelle.
Die ausgewählten Elemente werden in einem anderen Listenfeld aufgelistet unter dem Namen "Selected", um zu sehen welche man bereits gewählt hat.
Die Abfrage soll nun alle Elemente aus der Liste "Selected" als Kriterium nehmen.

Mfg Kladdi

69bruno

Ohne da jetzt Zeit zu haben, dass in VBA zu formulieren, Mach ein Modul, darin eine Schleife, die für jeden Eintrag in "selected" eine String-Variable als Kette befüllt (etwa: "= "& [Eintrag1] & " OR " & [Eintrag2] & " OR " .........

Und ruf das Modul (die Funktion) in der Abfrage im Kriterium auf........
Ich weiss aber grad nicht genau, wieviel OR's Du nehmen kannst........
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Kladdi

Ok ich probier's...Danke dir.

Kladdi

#5
Hallo Bruno,

hab mir jetzt mit viel Hilfe einen funktionierenden Code zur Verkettung zusammenschustern können.
Nur bleibt die Abfrage immernoch leer, obwohl die Daten vorhanden sind.

Option Compare Database
Option Explicit

Function Liste() As String
   Dim i As Variant
   Dim strvalue As String
   Dim frmSelectionExport As Form_frmSelectionExport
   Set frmSelectionExport = Screen.ActiveForm
     
   For i = 0 To frmSelectionExport.List16.ListCount - 1

       strvalue = "tblBooking.[boRevenue Recognition Fiscal Year Month Display Code] = '" & frmSelectionExport.List16.ItemData(i) & IIf(Len(strvalue), "' Or " & strvalue, "'")
       Debug.Print strvalue
   Next i

   Liste = strvalue
End Function


Der zugehörige Export-Code:

Private Sub Command3_Click()

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

' Export

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

' format in Excel

Set xlAnw = CreateObject("excel.application")
xlAnw.Visible = False ' runs invisible in the background
xlAnw.Workbooks.Open FileName:="C:\Temp\Customer-Report.xls"
xlAnw.Sheets("Sheet1").Select
xlAnw.Rows("1:1").Select
xlAnw.selection.Font.Bold = True ' Letters are bold
xlAnw.Cells.Select
xlAnw.selection.Columns.AutoFit ' optimal width
xlAnw.ActiveWorkbook.Save
xlAnw.ActiveWorkbook.Close
xlAnw.Quit
Set xlAnw = Nothing

MsgBox ("Export completed!")


End Sub


Hast du eine Idee woran das liegen könnte?

Mfg Kladdi

database

Hallo,

ergibt dein verketter String einen schlüssigen SQL-String?

Verkürze zum Testen mal den Aufbau ...

For i = 0 To 1 'frmSelectionExport.List16.ListCount - 1

... und schau dann den GESAMTEN SQL-String an ob der auch vollständig und ausführbar ist.

Denn wenn die entsprechenden Daten vorhanden sind und durch die Abfrage nicht gefunden werden,
kann's eigentlich nur an genau dieser Abfrage liegen - vermutlich passt im Aufbau des SQL-Strings etwas nicht.

Kladdi

Hallo,

erstmal danke für eure Geduld mit mir.

Die Debug-Funktion ergab diesen String:

ZitattblBooking.[boRevenue Recognition Fiscal Year Month Display Code] = 'FY2012-04' Or tblBooking.[boRevenue Recognition Fiscal Year Month Display Code] = 'FY2012-02'

Der in meinen ungeübten Augen auch Sinn macht.

Hier einmal der SQL-View der Abfrage:
SELECT tblBooking.[boRevenue Recognition Fiscal Year Month Display Code]
FROM tblBooking
WHERE (((tblBooking.[boRevenue Recognition Fiscal Year Month Display Code])=Liste()));



69bruno

#8
Ich zähle z.B. nur 3 Hochkommas,
Da sie ja die Anführunszeichen ersetzen, sollten sie immer im Paar auftreten.........
Dann fällt mir in deinem Beitrag, den Du mir genau in diese Antwort hineingeseschrieben hast auf ;o), das das Verkettungs "OR" nicht richtig erkannt zu werden scheint. Wird es dann nicht immer in Großbuchstaben geschrieben ??????

Aua aua aua, IIF sollte man auch lesen..... sorry
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Kladdi

Kein Problem, freu mich über jeden Ratschlag/Hilfe die ich kriegen kann...

An dem OR scheints nicht zu liegen...
Er verkettet sowohl mit dem kleingeschriebenen als auch mit dem großgeschriebenen OR

69bruno

#10
Aber der Wahrheits- und der Sonstwert muss in Abfragen mit Semikolon getrennt werden........

Und.....was soll denn bei der Len-Funktion verglichen werden ?

Neee, alles nicht..... teste grade bei mir in einer db und es funktioniert mit Kommas und ohne Vergleichsoperation bei der Len-Funktion.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

DF6GL

#11
Hallo,

so funktioniert das Ganze doch nicht...

Eher so (unchecked):



Public Sub CreateAbfrageSQL()
Dim i As Long
Dim strvalue As String    
Dim frmSelectionExport As Form_frmSelectionExport    
Set frmSelectionExport = Screen.ActiveForm          
For i = 0 To frmSelectionExport.List16.ListCount - 1        
strvalue = "tblBooking.[boRevenue Recognition Fiscal Year Month Display Code] = '" & frmSelectionExport.List16.ItemData(i) & IIf(Len(strvalue), "' Or " & strvalue, "'")        
Next i  

strvalue = "SELECT tblBooking.[boRevenue Recognition Fiscal Year Month Display Code] FROM tblBooking WHERE " & strValue
Currentdb!Querydefs!DeineAbfrage.SQL = strvalue

End Function


wobei noch zu fragen wäre, was denn  mit dieser zusammengebauten Abfrage(-SQL-String) nun passieren soll...

Kladdi

#12


Die Abfrage mit Werten soll als Excel-File exportiert werden.

69bruno

#13
Eigentlich geht es ja nicht darum, einen kompletten Abfrage SQL-String zu erstellen, sondern ein verkettetes Kriterium zu erstellen, welches in einer Abfrage mittels Funktionsaufruf gesetzt wird. Da wird das

Zitatstrvalue = "SELECT tblBooking.[boRevenue Recognition Fiscal Year Month Display Code] FROM tblBooking WHERE " & strValue
Currentdb.Querydefs!DeineAbfrage.SQL = strvalue
doch zu viel sein...... denke ich

Die Funktion Liste() muss ja nur das "Where" ergeben.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

69bruno

An und für sich muss die Funktion ja nur das Ergebnis

= 'FY2012-04' Or 'FY2012-02'


erzielen, damit es als Kriterium in der Abfrage den gewünschten Effekt erzielt.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If