![]() |
SQl Abfrage, ob einzutragender Datensatz bereits besteht.
Und schon das nächste Problem,
die Überschrift beschreibt es noch nicht so sonderlich perfekt. Es geht wieder um das Programm der Dienstreisen. Wenn nun ein bereits in die DB aufgenommener Datensatz, einen Dienst PKW für sich beansprucht, dann muss eine Meldung bei dem Anwender auftreten, der für den gleichen Tag den gleichen PKW haben möchte. D.h. Person 1 will am 01.01.04 den VW Bus haben, er trägt sich ein. Person 2 will am 01.01.04 ebenfalls den VW Bus haben, trägt sich aber später ein. So muss Person 2 eine Meldung bekommen, wenn er seinen Datensatz eintragen lassen will, das der VW Bus für den Tag schon vergeben ist. Das wird sich sicher nur über SQL realisieren lassen, man müsste auf die Datenbank zugreifen, das Feld für Datum und für Dienst PKW selectieren lassen. Diese dann abgleichen mit dem Datum und dem Dienstwagen von dem Datensatz der eingetragen werden soll. Leider bin ich in SQL n Anfänger, Hilfe würde mir helfen... . Bitte eure Ideen. |
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Ist
![]() |
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Zitat:
allerdings geht mir durch den genannten Thread nicht alles auf. Ist es eigentlich wichtig SQL über einen Query einzuleiten? Sprich in der Form:
Delphi-Quellcode:
Vermutlich ist man zwingend auf ein Query angewiesen, hmm.
Querysort.Close;
Querysort.SQL.Clear; Querysort.SQL.Add Für was steht in diesem Code:
Delphi-Quellcode:
'distinct'?
select distinct raum
from Belegung where Raum not in (select Raum from Belegung where ende between '12.01.2004' and '18.01.2004' or anfang between '12.01.2004' and '18.01.2004'); Für 'Belegung' müsste ich wieder den Pfad der DB angeben.´ 'RAUM' wird sicher für die relevante Spalte stehen, die würde ich also auf die Dienst_PKW Spalte setzen. Nun muss ich aber nach den Tagen schauen, ob ein bestimmtes Fahrzeug da schon gebucht wurde. Wenn ich auch noch nach Uhrzeit gehen würde - dann wärs perfekt. Allerdings sollte ich für den Anfang nicht zuviel planen.
Delphi-Quellcode:
So würde ich es jetzt ändern, das wird aber nicht funktionieren :(.
select dienst_pkw from "t:eDienstreisebuch\mainDBalt.dbf"
where dienst_pkw not in (select dienst_pkw from "t:eDienstreisebuch\mainDBalt.dbf" where DATUM between 'TT.MM.JJJJ' [...] Könnte mir wer hier schon mal die Fehler nennen? |
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Hm..
würde mich eigentlich ein ziemlich einfacher Code schon weiterbringen? Ich hätte da z.B. an diesen gedacht:
Delphi-Quellcode:
Und wenn dann ein Datensatz gefunden wird, muss die Fehlermeldung ausgegeben werden.
SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" WHERE DATUM 'gleiches Datum wie neuer Datensatz'
|
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Erstens: "DISITNCT" sorgt dafür, dass keine doppelten Einträge ausgegeben werden.
Im folgenden Code kriegst du alle Dienstwagen, die im angegeben Zeitraum nicht belegt sind.
SQL-Code:
Für StartTm & EndTm musst du Parameter in deiner Query anlegen.
SELECT DISTINCT t.Dienst_PKW
FROM T_Daten t WHERE t.Raum NOT IN (SELECT x.Dienst_PKW FROM T_Daten x WHERE x.Anfang BETWEEN :StartTm AND :EndTm OR x.Ende BETWEEN :StartTm AND :EndTm) Wie das umsetzen kannst steht dort: ![]() Einfacher geht's nur wenn du nur ein Datum pro Wagen hast.
SQL-Code:
(Dürfte Probleme geben, wenn ein Wagen 2 Tage weg ist, aber nur das Startdatum angegeben ist)
SELECT DISTINCT t.Dienst_PKW
FROM T_Daten t WHERE t.DATUM NOT BETWEEN :StartTm AND :EndTm |
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Doppelposting :wall:
|
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Zitat:
Das werd ich auch gleich noch mal checken, hab eben ne recht einfache Version umgesetzt:
Delphi-Quellcode:
So wird dann in nem Grid der Datensatz ausgegeben. Allerdings greift er noch nicht aufs Datum zu. Mal schaun wie weit ich mit deinem Code komme.
Query2.Close;
Query2.SQL.Clear; Query2.SQL.ADD ('SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" WHERE dienst_pkw="Ford DM-162"'); Query2.Active:=True; |
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Hallo LuckyStrike4life
ich muß gestehen, ich bekomme immer eine Gänsehaut, wenn ich folgendes sehe: Zitat:
Um Dir besser helfen zu können, wäre es hilfreich die Struktur der Tabellen zu kennen. Zu Deinen weiteren Fragen: Belegung ist der Name der Tabelle. Diese habe ich schnell mal mit Interbase erstellt. Raum, Anfang und Ende sind die drei Spalten dieser Tabelle. Zitat:
|
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Zitat:
ich würde es ja auch machen - wenn ich denn einen Weg wüsste, mit dem es funktionieren würde. Leider reichen die internen Bezeichnungen der DBs nicht aus. Kann ich irgendwo den Pfad der DBs einstellen, und auch leicht editieren? Zitat:
Zitat:
Delphi-Quellcode:
Query1.Close;
Query1.SQL.Clear; Query1.SQL.add [...]; Query1.ExecSQL; |
Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 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 by Thomas Breitkreuz