Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Sql-Befehl anpassen (https://www.delphipraxis.net/160295-sql-befehl-anpassen.html)

Kleine 6. Mai 2011 08:26

Datenbank: Advantage • Version: 8.1 • Zugriff über: sql

Sql-Befehl anpassen
 
Also meine Datenbank besitzt 2 Tabellen. Ich hab nun eine Funktion erstellt, die die ID hcohzählen soll.
Delphi-Quellcode:
function tFormMain.MaxID : Integer ;
var
  lMax : Integer ;
begin
    qu.Close ;
    qu.SQL.Clear ;
    qu.SQL.Add('Select max(ID) as MaxID from Adressen ') ;
    lMax := qu.FieldByName('MaxID').AsInteger;
    qu.Open ;
  Result := lMax ;                                                
end;
das funktioniert auch so wie es soll. Nur das Problem ist das sich der Sql-Befehl nur auf die AdressTabelle bezieht.
Und nun wollte ich fragen, ob jemand weiß wie man den Befehl so umändern kann, dass er sich irgentwie von selbst die richtige Tabelle sucht.

Danke schonmal im voraus :)

Grolle 6. Mai 2011 08:30

AW: Sql-Befehl anpassen
 
Hallo,

kann es sein, dass du den Wert ausliest, bevor du deine Query öffnest? Ansonsten führe die Query doch 2 mal hintereinander auf beide Tabellen aus und speichere den Wert in 2 verschiedenen Variablen.

Viele Grüße ...

DeddyH 6. Mai 2011 08:32

AW: Sql-Befehl anpassen
 
Die Funktion zählt keine ID hoch, sondern liest nur die höchste aus.
Delphi-Quellcode:
function tFormMain.MaxID(const Tablename, KeyField: string): Integer ;
begin
  qu.Close ;
  qu.SQL.Text := Format('Select max(%s) as MaxID from %s', [KeyField, Tablename]) ;
  qu.Open ;
  Result := qu.FieldByName('MaxID').AsInteger;
end;
Ungetestet, sollte aber funktionieren.

Kleine 6. Mai 2011 08:33

AW: Sql-Befehl anpassen
 
oh stimmt..
du meinst so oder?
Delphi-Quellcode:
function tFormMain.MaxID : Integer ;
var
  lMax : Integer ;
begin
    qu.Close ;
    qu.SQL.Clear ;
    qu.SQL.Add('Select max(ID) as MaxID from Adressen ') ;
    qu.Open ;  
    lMax := qu.FieldByName('MaxID').AsInteger;
  Result := lMax ;
end;
aber es hatte so ja funktioniert.
Ich wollte wohl den Befehl 'Select max(ID) as MaxID from Adressen ' so anpassen, das er sich irgentwie selber die passenden tabelle sucht.
Falls das geht oder wie man das halt sonst machen könnte.

Er soll mir ja auch nur die höchste id ausgeben, sorry :?

s.h.a.r.k 6. Mai 2011 08:36

AW: Sql-Befehl anpassen
 
Öhm, du machst das ganze sehr kompliziert ;) Wenn du den Text setzt, dann brauchst du kein Clear und anschließendes Add, da der Text so direkt ersetzt wird. Die Variable lMax brauchst du auch nicht, da du dich innerhalb einer Funktion befindest und somit die Variable Result zur Verfügung steht.

Und bzgl. dem variablen Tabellenname: Schau dir DeddyH's Funktion mal genauer an ;)

rollstuhlfahrer 6. Mai 2011 08:37

AW: Sql-Befehl anpassen
 
Zitat:

Zitat von Kleine (Beitrag 1099227)
Und nun wollte ich fragen, ob jemand weiß wie man den Befehl so umändern kann, dass er sich irgendwie von selbst die richtige Tabelle sucht.

Nein, das geht leider nicht, da du zumindest mal eine Datenquelle angeben musst. Eventuell könnte man mit Hilfe von Stored Procedures das ganze so machen, dass für jede Tabelle der Wert ausgegeben wird, was aber viel umständlicher ist, als sich einmal den richtigen Wert zu suchen.

Bernhard

p80286 6. Mai 2011 10:28

AW: Sql-Befehl anpassen
 
Wenn es darum geht eine ID hoch zu zählen warum nutzt Du keinen Counter/Sequence?
Die würden die ID automatisch generieren?

Gruß
K-H

Jumpy 6. Mai 2011 10:31

AW: Sql-Befehl anpassen
 
Oder war die Frage so zu verstehen, dass die Maximale ID von beiden Tabellen ermittelt werden soll, quasi das Maximum, von den beiden Maxima?

Kleine 6. Mai 2011 10:48

AW: Sql-Befehl anpassen
 
Nein, die funktion ermittelt die maximale id der tabelle.

also kann man eine funktion nicht so aufbauen, das sie je nachdem die höchste id von adresse oder kontakte ermittelt?
Das heißt dann jawohl mal 2 functionen :)

rainerg 6. Mai 2011 11:25

AW: Sql-Befehl anpassen
 
Du kannst den Tabellennamen an die Funktion als Parameter übergeben und diesen in das SQL übernehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.
Seite 1 von 2  1 2      

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