Delphi-PRAXiS

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.

Kleine 6. Mai 2011 11:26

AW: Sql-Befehl anpassen
 
I hoabs jet :D
Delphi-Quellcode:
function TFormMain.MaxUnivID(tb: string): Integer;
var
  lMax : Integer ;
begin
    qu.Close ;
    qu.SQL.Clear ;
    qu.SQL.Add( Format( 'Select max(ID) as MaxID from %s', [ tb ] ) ) ;
    qu.Open ;
    lMax := qu.FieldByName('MaxID').AsInteger;
    Result := lMax ;
end;

rainerg 6. Mai 2011 11:30

AW: Sql-Befehl anpassen
 
Zitat:

Zitat von Kleine (Beitrag 1099304)
I hoabs jet :D
Delphi-Quellcode:
function TFormMain.MaxUnivID(tb: string): Integer;
var
  lMax : Integer ;
begin
    qu.Close ;
    qu.SQL.Clear ;
    qu.SQL.Add( Format( 'Select max(ID) as MaxID from %s', [ tb ] ) ) ;
    qu.Open ;
    lMax := qu.FieldByName('MaxID').AsInteger;
    Result := lMax ;
end;

Delphi-Quellcode:
function TFormMain.MaxUnivID(tb: string): Integer;
begin
    qu.Close ;
    qu.SQL.Clear ;
    qu.SQL.Add( Format( 'Select max(ID) as MaxID from %s', [ tb ] ) ) ;
    qu.Open ;
    Result := qu.FieldByName('MaxID').AsInteger;
end;
So sparst du noch die Variable lMax und eine entsprechende Zuweisung ;-)

DeddyH 6. Mai 2011 12:15

AW: Sql-Befehl anpassen
 
Hatte ich das nicht bereits in #3 geschrieben? Außerdem habe ich noch den Feldnamen als Parameter deklariert, falls das Feld einmal nicht ID heißt.

rainerg 6. Mai 2011 15:09

AW: Sql-Befehl anpassen
 
Zitat:

Zitat von DeddyH (Beitrag 1099320)
Hatte ich das nicht bereits in #3 geschrieben? Außerdem habe ich noch den Feldnamen als Parameter deklariert, falls das Feld einmal nicht ID heißt.

Hups, stimmt - im Code versteckt ;-) - Sorry nicht gesehen!

omata 6. Mai 2011 23:52

AW: Sql-Befehl anpassen
 
Warum ein Clear und dann ein Add (wenn dann sowieso Append!)?

Setze doch einfach den Text...
Delphi-Quellcode:
function TFormMain.MaxUnivID(tb: string): Integer;
begin
    qu.Close;
    qu.SQL.Text:=Format('SELECT MAX(ID) MaxID FROM %s', [tb]);
    qu.Open;
    Result:= qu.FieldByName('MaxID').AsInteger;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 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