![]() |
Datenbank: ACCESS
Problem mit Access und SQL
Hi!
Ich hab da mal wieder ein kleines Access-internes Problem. Folgendes Tabellenlayout habe ich: Tabelle Zeiten: (Tabelle 1 im SQL unten) ID - Startzeit - Endzeit Jetzt soll eine Auswertungstabelle da sein ID - Fahrzeit Jetzt war meine Idee: Man gibt in der Auswertungstabelle einfach die ID ein und der holt sich Start- und Endzeit, subtrahiert und zeigt den Wert an. Mein Ansatz dazu war: Unter Nachschlagen stelle ich auf Kombinationsfeld, Herkunftstyp: Tabelle Abfrage und hatte dann bei Datensatzherkunft folgende Query:
SQL-Code:
Leider tut das nicht, wie es soll. Statt den Wert hinzuschreiben habe ich eine Auswahlliste aller Werte, also zu allen IDs - aber das will ich nicht.
SELECT [Tabelle 1].Endzeit-[Tabelle 1].Startzeit AS Ausdr1
FROM [Tabelle 1] WHERE [Tabelle 1].ID= [Auswertung].ID; Wo ist der Haken? Ciao, Frederic [edit=mkinzler] Mfg, mkinzler[/edit] |
Re: Problem mit Access und SQL
Welchen Typ haben Startzeit und Endzeit?
|
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Access und SQL hört sich stark nach einem Datenbankproblem an |
Re: Problem mit Access und SQL
Hi!
Es sind Felder Datum/Zeit mit Eingabeformat nur Uhrzeit, 24h. @Kategorie: Ich hatte es unter Programmieren allgemein gestellt, da es nix mit Delphi zu tun hat. Also es geht darum, das Ganze Access-intern zu lösen. Sorry, falls das nicht rüberkam... Ciao, Frederic |
Re: Problem mit Access und SQL
:duck:
|
Re: Problem mit Access und SQL
Du machst ja auch einen INNER JOIN ohne Filterung, dann bekommst Du alle Datensätze aus Tabelle1, die in der Auswertung eine Entsprechung aufweisen.
|
Re: Problem mit Access und SQL
Hi!
Entschuldige meine Begriffsstutzigkeit, aber ich sehe weder ein JOIN noch sehe ich ein bedingsloses... Wofür ist denn meine Where-Klausel? Ciao, Frederic |
Re: Problem mit Access und SQL
Deine Abfrage kann man auch so formulieren:
SQL-Code:
SELECT [Tabelle 1].Endzeit-[Tabelle 1].Startzeit AS Ausdr1
FROM [Tabelle 1] INNER JOIN [Auswertung] ON [Tabelle 1].ID= [Auswertung].ID; |
Re: Problem mit Access und SQL
Hallo!
Das ändert leider nichts am Ergebnis... Oder sollte das nur das Umgeschriebene meiner WHERE-Clause sein und nicht die Lösung? Ciao, Frederic |
Re: Problem mit Access und SQL
Die Lösung könnte beispielsweise so aussehen:
SQL-Code:
Gibt Dir das berechnete Feld zurück, sofern es sowohl in Tabelle 1 als auch in Auswertung einen Datensatz mit der ID 100 gibt.
SELECT [Tabelle 1].Endzeit-[Tabelle 1].Startzeit AS Ausdr1
FROM [Tabelle 1] INNER JOIN [Auswertung] ON [Tabelle 1].ID= [Auswertung].ID WHERE [Tabelle 1].ID = 100 |
Re: Problem mit Access und SQL
Hi!
Danke, aber das ist ja genau das, was ich nicht will. Die Eingabe dieser Zahl (in deinem Bsp. 100) soll ja entfallen. Es soll stattdessen der Wert genommen werden, der in der Zeile im Feld ID steht. Die Abfrage will ich quasi nur einmal schreiben und sie soll dann für alle Zeilen jeweils den einen, richtigen Wert zurückliefern? Geht das etwa nicht? Ciao, Frederic |
Re: Problem mit Access und SQL
Dann hab ich Dich wohl falsch verstanden. Wieviele DS stehen denn in der Auswertungs-Tabelle?
|
Re: Problem mit Access und SQL
da es eine neue Abfrage ist, musst du den Wert (z.B. als Parameter mitgeben)
SQL-Code:
Diesen kannst du dann setzen
SELECT [Tabelle 1].Endzeit-[Tabelle 1].Startzeit AS Ausdr1
FROM [Tabelle 1] INNER JOIN [Auswertung] ON [Tabelle 1].ID= [Auswertung].ID WHERE [Tabelle 1].ID = :ID; |
Re: Problem mit Access und SQL
Hi!
Zitat:
Im Prinzip wird es pro Datensatz in Tabelle 1 auch einen in Auswertung geben. In wie fern ist das wichtig? @Markus: Wie kann ich die denn setzen? Ich habe deinen Code jetzt übernommen. Jetzt habe ich immer noch ein DropDown-Feld da. Dann kommt ne Aufforderung zur Eingabe des Parameters. Wenn ich diese dann eingegeben habe, habe ich im Dropdownfeld zwar den richtigen Wert als Möglichkeit, aber muss es immer noch zuerst auswählen und scheinbar wird auch der selbe Parameterwert für alle Zeilen genommen. Bei Zeile 2 kommt dann nämlich nicht mehr die Eingabeaufforderung, sondern ich habe in der Liste dann immer noch diesen einen Wert drin... Ciao, Frederic |
Re: Problem mit Access und SQL
Delphi-Quellcode:
AdoDataSet2.CommandText := 'Select ...';//Abfrage von oben
... AdoDataSet2.Params.ParamByName(ID').Value := AdoDataSet1.FieldByName('ID').Value; AdoDataSet2.Refresh; // bzw. Open; |
Re: Problem mit Access und SQL
Hi!
Danke, aber Zitat:
Ciao, Frederic |
Re: Problem mit Access und SQL
Und mit Klammern?
SQL-Code:
SELECT ([Tabelle 1].Endzeit-[Tabelle 1].Startzeit) AS Ausdr1
FROM [Tabelle 1] WHERE [Tabelle 1].ID= [Auswertung].ID; |
Re: Problem mit Access und SQL
Hi!
Nein, leider nicht. Zuerst ist das Dropdown-Feld leer, dann kommt auch so ne Parameter-Abfrage und dann wieder nur der eine Wert in allen Zeilen zum selbst auswählen... Ich bin ratlos... Ciao, Frederic |
Re: Problem mit Access und SQL
Nur, dass wir nicht aneinander vorbeireden: Du willst die zeitliche Differenz aus den Werten aus Tabelle 1 von den DS, die eine Entsprechung in Auswertung haben, richtig?
|
Re: Problem mit Access und SQL
Hi!
Wenn ich dich richtig verstehe: ja :mrgreen: Zur Sicherheit ein Bsp: Tabelle1 [ID, Start, Ende] 1 - 10:00 - 12:00 2 - 11:00 - 14:00 Auswertung [ID, Dauer] 1 - 2 2 - 3 Dabei will ich in Auswertung nur die ID eingeben müssen und Dauer holt er sich selbst... Ciao, Frederic |
Re: Problem mit Access und SQL
Dauer soll dann berechnet und in Auswertung eingetragen werden, oder wie muss ich das verstehen?
|
Re: Problem mit Access und SQL
Hi!
Jepp, genau das ist das Ziel. Das man also auf einen Blick sieht, wie lange diese ID unterwegs war. Und das ohne nachschauen in die andere Tabelle und vor allem ohne rechnen... Edit: Achja, und nicht einmal berechet und dann für immer eingetragen, sondern immer aufgrund der aktuellen Werte in Tabelle 1. Also falls sich da was ändert, soll sich auch die Dauer ändern (kommt selten vor, ist aber möglich) Ciao, Frederic |
Re: Problem mit Access und SQL
In Firebird könnte man das über einen Trigger oder ein berechnetes Feld lösen. Aber wie man das bei Access macht, übersteigt leider meine Kenntnisse :(
|
Re: Problem mit Access und SQL
Naja, ein berechnetes Feld ist das in Access ja auch - heißt auch fast genauso - die Frage ist nur, mit welcher SQL-Abfrage ich das füttern muss.
Sähe die SQL-Abfrage für Firebird so aus wie oben oder wie ginge es da? Vllt. kann ich daraus was für Access ableiten? Ciao, Frederic |
Re: Problem mit Access und SQL
Du definierst das Feld als Computed Field (siehe z.B.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz