SQL-Abfrage nach freier Nummer

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

SQL-Abfrage nach freier Nummer

Beitrag von alter Mann »

Ich habe eine Datenbank, in der ich etwas eintrage :lol: und auch wieder lösche. Die Anzahl der Datenbankeinträge soll begrenzt sein (z.B. Regalfächer).
Nun möchte ich mit einer möglichst einfachen Abfrage das erste leere Fach finden.
Bisher mache ich folgende Abfrage

Code: Alles auswählen

DatabaseQuery(iDatabase,"SELECT fachnummer FROM regal ORDER BY fachnummer")
iFind = 0
While NextDatabaseRow(iDatabase)
  If GetDatabaseLong(iDatabase,0) <> iFind
    Break
  EndIf
  iFind + 1
Wend
Geht es auch einfacher ?
Win11 64Bit / PB 6.0
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQL-Abfrage nach freier Nummer

Beitrag von Kiffi »

Code: Alles auswählen

UseSQLiteDatabase()

; TestDaten erzeugen:
DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)

DatabaseUpdate(DB, "Create Table Regal (FachNummer)")

DatabaseUpdate(DB, "Insert Into Regal (Fachnummer) Values (1)")
DatabaseUpdate(DB, "Insert Into Regal (Fachnummer) Values (3)")
DatabaseUpdate(DB, "Insert Into Regal (Fachnummer) Values (5)")
DatabaseUpdate(DB, "Insert Into Regal (Fachnummer) Values (7)")

; Abfrage:
If DatabaseQuery(DB, "Select Fachnummer + 1 As FreieFachnummer From Regal Where Fachnummer + 1 Not In (Select FachNummer From Regal) Order By FreieFachnummer")
  
  While NextDatabaseRow(DB)
    
    Debug "Freie Fachnummer: " + Str(GetDatabaseLong(DB, 0))
    
  Wend
  
  FinishDatabaseQuery(DB)
  
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Re: SQL-Abfrage nach freier Nummer

Beitrag von alter Mann »

Danke ! :allright:
Win11 64Bit / PB 6.0
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: SQL-Abfrage nach freier Nummer

Beitrag von dige »

Danke ... guter Tipp!
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten