![]() |
|
|
zurück zur ÜbersichtDiskussionsgruppe: DatenbankenHallo Zusammen,
Von: Booyeoo Datum: 18.04.2007, 11:40
alle Antworten zu dieser FrageAntwort 1 von Teddy7 vom 18.04.2007, 12:02 Warum nutzt Du nicht den Abfrage-Assistenten in Access ? Einfach eine Abfrage machen, in der beide Tabellen enthalten sind und über den User miteinander verknüpft sind. Die Verknüpfungsart so einstellen, dass nur die User kommen, die in beiden Tabellen da sind. Dann aus dieser Abfrage eine Aktualisierungsabfarge machen, in der der Haken gesetzt wird. Gruß Teddy Antwort 2 von erik vom 19.04.2007, 15:09 Hallo, die von Teddy7 angesprochene Lösung dürfte als SQL so aussehen: UPDATE [User] INNER JOIN [User_Mobile] ON [User].Login = [User_Mobile].MobLoginGruß erik Antwort 3 von Booyeoo vom 19.04.2007, 19:53 Jop, danke Erik, hatte es davor auch schon so hinbekommen: UPDATE [User] SET Mobile_User = TRUE WHERE [User].Login IN ( SELECT [User].Login FROM [User_Mobile] INNER JOIN [User] ON [User_Mobile].MobLogin = User.Login ); Ich musste jedoch danach noch eine SET Anweisung hinzufügen, aber ich verstehe nicht wieso es bei einer version klappt bei der anderen nicht... geht nicht: UPDATE [User] SET Mobile_User = TRUE, Mobile_Client_Enddate = [User_Mobile].Enddate WHERE [User].Siebel_Login IN ( SELECT User.Siebel_Login FROM User_Mobile INNER JOIN [User] ON User_Mobile.Siebel_Login = User.Siebel_Login ); geht: UPDATE [User] INNER JOIN [User_Mobile] ON [User].Siebel_Login = [User_Mobile].Siebel_Login SET Mobile_User = True, Mobile_Client_Enddate = [User_Mobile].Enddate; Liegt es daran, dass im Unteren Teil die "Endtabelle" schon zur verfügung steht in der etwas geändert werden soll? Jedenfalls vielen Dank an euch beide Erik und Teddy, jetzt bin ich in meinem MS SQL ein bissel weiter. Antwort 4 von erik vom 20.04.2007, 09:12 Hallo, auf Anhieb kann ich gerade nicht erkennen, warum die eine Abfrage nicht funktionieren sollte. Wenn du die aufgetretene Fehlermeldung mal nennen könntest, wäre das schon hilfreich. Unabhängig davon ist die Verwendung der IN-Klausel hier komplett überflüssig. In erster Linie werden in Access Beziehungen über JOIN-Ausdrücke erstellt (INNER JOIN, LEFT JOIN, RIGHT JOIN). Im Abfrageentwurf siehst du dann auch eine schwarze Linie als Beziehung zwischen den Tabellen. Die Variante mit IN funktioniert zwar grundsätzlich auch, aber man muss dabei bedenken, dass für jeden Datensatz in der übergeordneten Abfrage die im IN-Block genannte Abfrage immer wieder ausgeführt wird! Das kann u.U. zu erheblichen Geschwindigkeitseinbußen führen, wenn die untergeordnete Abfrage große Datenmengen bewältigen muss. Um das zu vermeiden, sollte man möglichst nur JOIN-Ausdrücke verwenden. Du solltest daher nur die zuletzt erwähnte Abfrage aus deinem letzten Beitrag verwenden. Gruß erik Antwort 5 von Boo2 vom 20.04.2007, 09:54 Es kommt keine Fehlermeldung in dem Sinne, nur er will immer dann einen Parameter bekommen. Antwort 6 von erik vom 20.04.2007, 12:02 Bei einer unerwarteten Parameterabfrage ist einer der Tabellen- oder Feldnamen falsch geschrieben. In dem Parameterdialog wird dir der falsch geschriebene Name sogar angezeigt. Antwort 7 von erik vom 20.04.2007, 12:11 Ei, ist doch klar! Bei der nicht funktionierenden Abfrage willst du die Tabelle [User] aktualisieren: UPDATE [User]Dort soll dieses Feld neu geschrieben werden: Mobile_Client_Enddate = [User_Mobile].EnddateDas Feld Enddate gehört in die Tabelle [User_Mobile] und nicht in [User]. In deiner Ergebnismenge ist aber [User_Mobile] nicht enthalten. Also wird das Feld Parameter abgefragt. Das die Felder in der untergeordneten Abfrage vorhanden sind, spielt hier keine Rolle. Was in der IN-Klausel passiert, ist in der Hauptabfrage nicht sichtbar und nicht erreichbar. Daher solltest du nur richtige JOIN-Ausdrücke verwenden, denn dann stehen alle Felder der daran beteiligten Tabellen zur Verfügung. Antwort 8 von Booyeoo vom 20.04.2007, 16:58 Mist, so einfach kanns sein. Hast recht, vielen Dank für Deine Hilfe und Deine Mühe Erik. Das nenn ich Support. Mir ist das auch mit dem Geschwindigekitsverlust aufgefallen, daher immer besser Join ausdrücke verdwenden, wenns geht. ;-) Antworten der Gruppe: Datenbanken
|
|