2010-12-22 23 views
0

Ich habe diese Abfrage in meiner Form:Microsoft Access Query über VBA wird wiederholt?

strSQL = "SELECT cityID FROM City WHERE Name =" & Chr(34) & Me.List60.Value & Chr(34) & ";" 
Set qdf = CurrentDb.CreateQueryDef("QueryCityName", strSQL) 
DoCmd.OpenQuery qdf.Name 
Me.cityID = qdf 

Was ich möchte die folgende Abfrage (der List60 Wert ist dynamisch) und weist das Ergebnis einer Textbox ist zu tun laufen. Jetzt läuft die Abfrage beim ersten Mal fehlerfrei und die zweite ist ein Fehler bei der Dublettenabfrage (ich überprüfe, ob eine neue Abfrage in Querys mit dem verwendeten Wert gespeichert ist). Also hier sind meine Frage:

Wie zu vermeiden, die Abfrage zu speichern und immer dynamisch? Wie man das Ergebnis von dieser Abfrage einer Textbox zuweist (ich meine qdf.Value in dem Beispiel funktioniert nicht)?

Antwort

2

Sie sollten keine Abfrage erstellen, ohne zu überprüfen, ob sie existiert oder Sie einen Fehler erhalten, wie Sie gefunden haben. Sie können den SQL-Wert ändern, indem Sie auf das Querydef verweisen. Sie müssen keine neue Abfrage erstellen. In dieser Situation benötigen Sie jedoch keine Abfrage, nur DLookUp.

DLookUp("cityID", "City", "Name ='" & Replace(Me.List60.Value,"'","''") & "'") 

Sie können eine Textbox Steuerquelle einstellen wie so DLookUp:

=DLookUp("cityID", "City", "Name ='" & Replace(List60.Value,"'","''") & "'") 

BTW Nennen Sie ein reserviertes Wort ist und nicht überall eingesetzt werden soll, wird es unsägliches Leid verursachen.

+0

Danke, aber ich fand eine bessere Lösung, die beide Probleme behebt. – Anonymous

+0

Was ist die bessere Lösung? Ich denke @ Remou ist bei weitem die einfachste, aber ich würde gerne etwas leichter hören. Wenn Sie sich auf die Antwort beziehen, die Sie gepostet haben, ist es noch nicht einmal einfacher oder einfacher, dass @ Remou's Antwort, und ich würde es definitiv als eine minderwertige und zu komplizierte Art ansehen, das Ergebnis zu erhalten. –

1

Ich habe es mit noch weniger Code:

strSQL = "SELECT cityID FROM City WHERE Name =" & Chr(34) & Me.List60.Value & Chr(34) & ";" 
Set rst = CurrentDb.OpenRecordset(strSQL) 

Nun, wenn jeder das gleiche Problem haben, benutzen Sie einfach:

rst![name_of_the_row_in_your_table] 

In meinem Fall ist das ganze Stück:

strSQL = "SELECT cityID FROM City WHERE Name =" & Chr(34) & Me.List60.Value & Chr(34) & ";" 
Set rst = CurrentDb.OpenRecordset(strSQL) 
Me.cityID = rst![cityID] 
+1

Ich denke, Sie werden feststellen, dass die von mir vorgeschlagene Lösung keinen Code erfordert, und wenn Code verwendet wird, nur eine Zeile. – Fionnuala

+0

Diese Lösung ist definitiv @ Remou's Antwort überhaupt nicht überlegen. –