AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sql-Befehl anpassen

Ein Thema von Kleine · begonnen am 6. Mai 2011 · letzter Beitrag vom 7. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
Kleine

Registriert seit: 27. Apr 2011
40 Beiträge
 
Delphi 2009 Professional
 
#1

Sql-Befehl anpassen

  Alt 6. Mai 2011, 09:26
Datenbank: Advantage • Version: 8.1 • Zugriff über: sql
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
Lg Kleine
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 09:30
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 ...

  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#3

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 09:32
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kleine

Registriert seit: 27. Apr 2011
40 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 09:33
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
Lg Kleine
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 09:36
Ö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
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 09:37
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 11:28
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 11:31
Oder war die Frage so zu verstehen, dass die Maximale ID von beiden Tabellen ermittelt werden soll, quasi das Maximum, von den beiden Maxima?
Ralph
  Mit Zitat antworten Zitat
Kleine

Registriert seit: 27. Apr 2011
40 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 11:48
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
Lg Kleine
  Mit Zitat antworten Zitat
Benutzerbild von rainerg
rainerg

Registriert seit: 5. Aug 2002
Ort: Hannover
82 Beiträge
 
Delphi XE Starter
 
#10

AW: Sql-Befehl anpassen

  Alt 6. Mai 2011, 12:25
Du kannst den Tabellennamen an die Funktion als Parameter übergeben und diesen in das SQL übernehmen.
Rainer G. aus H.
www.BunteReisebilder.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:14 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