Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem mit Access und SQL (https://www.delphipraxis.net/131923-problem-mit-access-und-sql.html)

fkerber 2. Apr 2009 22:27

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:
SELECT [Tabelle 1].Endzeit-[Tabelle 1].Startzeit AS Ausdr1
FROM [Tabelle 1] WHERE [Tabelle 1].ID= [Auswertung].ID;
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.

Wo ist der Haken?


Ciao, Frederic

[edit=mkinzler] Mfg, mkinzler[/edit]

mkinzler 3. Apr 2009 05:30

Re: Problem mit Access und SQL
 
Welchen Typ haben Startzeit und Endzeit?

DP-Maintenance 3. Apr 2009 05:31

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Access und SQL hört sich stark nach einem Datenbankproblem an

fkerber 3. Apr 2009 07:41

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

fkerber 9. Apr 2009 15:02

Re: Problem mit Access und SQL
 
:duck:

DeddyH 9. Apr 2009 15:19

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.

fkerber 9. Apr 2009 15:34

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

DeddyH 9. Apr 2009 15:38

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;

fkerber 9. Apr 2009 16:18

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

DeddyH 9. Apr 2009 16:40

Re: Problem mit Access und SQL
 
Die Lösung könnte beispielsweise so aussehen:
SQL-Code:
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
Gibt Dir das berechnete Feld zurück, sofern es sowohl in Tabelle 1 als auch in Auswertung einen Datensatz mit der ID 100 gibt.

fkerber 9. Apr 2009 16:43

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

DeddyH 9. Apr 2009 16:45

Re: Problem mit Access und SQL
 
Dann hab ich Dich wohl falsch verstanden. Wieviele DS stehen denn in der Auswertungs-Tabelle?

mkinzler 9. Apr 2009 16:46

Re: Problem mit Access und SQL
 
da es eine neue Abfrage ist, musst du den Wert (z.B. als Parameter mitgeben)
SQL-Code:
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;
Diesen kannst du dann setzen

fkerber 9. Apr 2009 16:58

Re: Problem mit Access und SQL
 
Hi!

Zitat:

Zitat von DeddyH
Dann hab ich Dich wohl falsch verstanden. Wieviele DS stehen denn in der Auswertungs-Tabelle?

Im Moment 3 :mrgreen:

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

mkinzler 9. Apr 2009 17:10

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;

fkerber 9. Apr 2009 17:18

Re: Problem mit Access und SQL
 
Hi!

Danke, aber

Zitat:

Zitat von fkerber
@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

DeddyH 9. Apr 2009 17:23

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;

fkerber 9. Apr 2009 17:36

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

DeddyH 9. Apr 2009 17:38

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?

fkerber 9. Apr 2009 17:43

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

DeddyH 9. Apr 2009 17:47

Re: Problem mit Access und SQL
 
Dauer soll dann berechnet und in Auswertung eingetragen werden, oder wie muss ich das verstehen?

fkerber 9. Apr 2009 18:23

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

DeddyH 9. Apr 2009 18:28

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 :(

fkerber 9. Apr 2009 18:29

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

DeddyH 9. Apr 2009 18:34

Re: Problem mit Access und SQL
 
Du definierst das Feld als Computed Field (siehe z.B. http://www.firebirdfaq.org/faq289/).


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