AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQl Abfrage, ob einzutragender Datensatz bereits besteht.
Thema durchsuchen
Ansicht
Themen-Optionen

SQl Abfrage, ob einzutragender Datensatz bereits besteht.

Ein Thema von LuckyStrike4life · begonnen am 8. Dez 2003 · letzter Beitrag vom 8. Dez 2003
Antwort Antwort
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#1

SQl Abfrage, ob einzutragender Datensatz bereits besteht.

  Alt 8. Dez 2003, 11:35
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.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 11:38
Ist hier schon besprochen und gelöst worden.
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 12:46
Zitat von GeorgeWNewbie:
Ist hier schon besprochen und gelöst worden.
Ja,
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:
Querysort.Close;
Querysort.SQL.Clear;
Querysort.SQL.Add
Vermutlich ist man zwingend auf ein Query angewiesen, hmm.

Für was steht in diesem Code:
Delphi-Quellcode:
select distinct raum
from Belegung
where Raum not in
  (select Raum from Belegung
   where ende between '12.01.2004and '18.01.2004
   or anfang between '12.01.2004and '18.01.2004');
'distinct'?
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:
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' [...]
So würde ich es jetzt ändern, das wird aber nicht funktionieren .
Könnte mir wer hier schon mal die Fehler nennen?
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 13:44
Hm..
würde mich eigentlich ein ziemlich einfacher Code schon weiterbringen?
Ich hätte da z.B. an diesen gedacht:
SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" WHERE DATUM 'gleiches Datum wie neuer Datensatz' Und wenn dann ein Datensatz gefunden wird, muss die Fehlermeldung ausgegeben werden.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 14:09
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:
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)
Für StartTm & EndTm musst du Parameter in deiner Query anlegen.
Wie das umsetzen kannst steht dort: Hier im Forum suchendatumpicker AND in AND sql AND abfrage AND einbauen

Einfacher geht's nur wenn du nur ein Datum pro Wagen hast.
SQL-Code:
SELECT DISTINCT t.Dienst_PKW
FROM T_Daten t
WHERE t.DATUM NOT BETWEEN :StartTm AND :EndTm
(Dürfte Probleme geben, wenn ein Wagen 2 Tage weg ist, aber nur das Startdatum angegeben ist)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 14:09
Doppelposting
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 14:18
Zitat von GeorgeWNewbie:
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:
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)
Für StartTm & EndTm musst du Parameter in deiner Query anlegen.
Wie das umsetzen kannst steht dort: Hier im Forum suchendatumpicker AND in AND sql AND abfrage AND einbauen

Einfacher geht's nur wenn du nur ein Datum pro Wagen hast.
SQL-Code:
SELECT DISTINCT t.Dienst_PKW
FROM T_Daten t
WHERE t.DATUM NOT BETWEEN :StartTm AND :EndTm
(Dürfte Probleme geben, wenn ein Wagen 2 Tage weg ist, aber nur das Startdatum angegeben ist)
Danke!
Das werd ich auch gleich noch mal checken, hab eben ne recht einfache Version umgesetzt:
Delphi-Quellcode:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD ('SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" WHERE dienst_pkw="Ford DM-162"');
Query2.Active:=True;
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.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#8

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 15:22
Hallo LuckyStrike4life

ich muß gestehen, ich bekomme immer eine Gänsehaut, wenn ich folgendes sehe:
Zitat von LuckyStrike4life:
SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" WHERE dienst_pkw="Ford DM-162"
Du solltest Dir wirklich überlegen, ob Du nicht doch besser Alias-Namen für die Datenbank verwendest und Dir somit die Angabe des kompletten Pfad-Namens im SELECT-Statement ersparst. Dann hast Du es z.B. wesentlich einfacher, wenn Du mal die DB wechseln mußt. Außerdem ist der WHERE-Klausel falsch. Zeichenketten werden duch ' umschlossen!
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 von LuckyStrike4life:
Ist es eigentlich wichtig SQL über einen Query einzuleiten?...
Delphi-Quellcode:
Querysort.Close;
Querysort.SQL.Clear;
Querysort.SQL.Add
Jep, Genaus werden aus einem Delphi-Programm heraus Queryies an die DB geschickt. Es fehlet aber noch entweder Querysort.Open oder Querysort.ExecSQL!
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 16:23
Zitat von r_kerber:
Du solltest Dir wirklich überlegen, ob Du nicht doch besser Alias-Namen für die Datenbank verwendest und Dir somit die Angabe des kompletten Pfad-Namens im SELECT-Statement ersparst.
Ja, da hast du recht,
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 von r_kerber:
Um Dir besser helfen zu können, wäre es hilfreich die Struktur der Tabellen zu kennen.
Okay, es ist eine DBase Datenbank. Die relevanten Spalten sind 'Datum' und 'dienst_plw', wenn man noch auf die Uhrzeit (von wann bis wann werden die Wagen gebraucht) eingehen möchte, dann sind auch noch die Spalten "Beginn" und "Ende" wichtig. Ihren Inhalt beschreibt der Name. Ich hoffe das ist es, was du wissen wolltest.

Zitat von r_kerber:
[...]Es fehlet aber noch entweder Querysort.Open oder Querysort.ExecSQL!
Also in der Forum:
Delphi-Quellcode:
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.add [...];
     Query1.ExecSQL;
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#10

Re: SQl Abfrage, ob einzutragender Datensatz bereits besteht

  Alt 8. Dez 2003, 17:19
Zitat von LuckyStrike4life:
Kann ich irgendwo den Pfad der DBs einstellen, und auch leicht editieren?
Ja in der BDE-Administration
Zitat von LuckyStrike4life:
Okay, es ist eine DBase Datenbank. Die relevanten Spalten sind 'Datum' und 'dienst_plw', wenn man noch auf die Uhrzeit (von wann bis wann werden die Wagen gebraucht) eingehen möchte, dann sind auch noch die Spalten "Beginn" und "Ende" wichtig. Ihren Inhalt beschreibt der Name. Ich hoffe das ist es, was du wissen wolltest.
Da war der Verwis auf den andern Thread doch gar nicht so verkehrt!
Zitat von LuckyStrike4life:
Zitat von r_kerber:
[...]Es fehlet aber noch entweder Querysort.Open oder Querysort.ExecSQL!
Also in der Forum:
Delphi-Quellcode:
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.add [...];
     Query1.ExecSQL;
Nö. Da Du eine Ergebnis (auch Antwortmenge genannt) gelifert bekommen willst in Form von Datensätzen, mußt Du hier Query1.Open verwenden. Das steht aber auch in der OH!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz