AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbank Rückgabewert(e)
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank Rückgabewert(e)

Ein Thema von stho · begonnen am 22. Sep 2009 · letzter Beitrag vom 22. Sep 2009
Antwort Antwort
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#1

Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 08:32
Datenbank: Sybase Anywhere 10 • Version: ??? • Zugriff über: ODBC-Treiber?!
Hallo Leute

Ich möchte ein kleines Tool schreiben mit dem ich meine Monatlichen Ausgaben verwalten kann.
Mein Problem ist nur, das ich gerne jetzt die Summe der gesammten Spalte (Betrag) aus der Tabelle (Finanzen) auslesen möchte.
Ich sende den Befehl an die Datenbank mithilfe von:

Delphi-Quellcode:
ADODataSet.ConnectionString := 'SELECT SUM(Betrag) FROM Finanzen';
ADODataSet_Statistik.Open;
Nun 2 ganz banale Fragen:
Wie kann ich den zurückgelieferten Wert der DB (wird er überhaupt zurück geliefert?) verarbeiten/abfangen?
Gibt es eine Möglichkeit die Summe aus einem DBGrid zu berechnen ohne einen DB-Befehl zu versenden? Oder gäbe es einen ganz anderen weg?



P.S.
Zu meinem Wissensstand: Ich bin unerfahren was Delphi angeht und habe bisher nur maximal 3 Stunden mit Datenbanken gearbeitet (Versucht mir etwas bei zu bringen). (DB-Kentniss: Blutiger Anfänger, Keine Ahnung von der Materie)

Achja, noch etwas: Ich bin nicht zu doof Google/SuFu zu benutzen. Habe nur leider auf den gefundenen Seiten keine passende (Anfängergerechte) beschreibung / Anleitung gefunden.

Vielen Dank schonmal
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 08:38
Ich bin kein ADO-Experte, aber das Ergebnis müsste anschließend in ADODataset.Fields[0].Value stehen. Sollte ich da falsch liegen, bitte ich einen Wissenden um Korrektur.
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
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 08:46
Also normalerweise müsste doch der Wert 0 die Spalte an sich beschreiben, oder?
Nun, hat leider nicht geklappt aber danke für den Versuch...

...Fields.FieldByName('output').AsString hab ich jetzt auch schon ausprobiert doch das liefert auch nichts gescheites
Habe auch schon beispielsweise DIESEN Post durchgewühlt... aber das liefert nur einzelne Werte einer Spalte zurück...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 08:56
Wenn Du FieldByName verwenden willst, musst Du einen Alias vergeben.SELECT SUM(Betrag) AS Summe FROM Finanzen Darauf kannst Du dann mit FieldByName('Summe') zugreifen. Übrigens: sind das wirklich 2 verschiedene Datasets? Dann wäre das ja auch kein Wunder, dass da nichts kommt.
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
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 09:09
ja SO klappt es
das ist aber schöööööön ^^

aber eine Frage habe ich mal... warum kann ich meinem Dataset keinen ConnectionString zuweisen?

Beispiel:
ADODataSet_Statistik.ConnectionString := 'SELECT SUM(Preis) AS Summe FROM Finanzen'; da kommt immer die Fehlermeldung "Der Dateiquellname ist zu lang!"...
Wenn ich das jedoch manuell in diese Eigenschaft eintrage kommt kein fehler -.-

Hier mein Code:

Delphi-Quellcode:
  //Verbindung schließen wenn geöffnet
  if ADODataSet_Statistik.Active then
  begin
    ADODataSet_Statistik.Close;
  end;

  //ADODataSet_Statistik.ConnectionString := 'SELECT SUM(Preis) AS Summe FROM Finanzen'; //WIESO wirft das einen Fehler raus?!?!?!

  //Verbindung öffnen
  ADODataSet_Statistik.Open;
  label_Gesammtausgaben.caption := ADODataSet_Statistik.FieldByName('Summe').asSTring + '';
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 09:10
Das ist auch kein ConnectionString sondern eine Abfrage
Markus Kinzler
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 09:29
Ups ist das peinlich

Ja, habs gemerkt das es die falsche Property ist Ich schääääääme mich!

Aber nochmal zurück zur anderen Frage, kann man die Summe oder ähnliche Dinge nicht einfacher abfragen als über das ADODataSet?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

Re: Datenbank Rückgabewert(e)

  Alt 22. Sep 2009, 10:15
Hallo stho,

ich frag mich immer wofür dieses ominöse DataSet überhaupt gut sein sollte. Wenn ich irgendwelche Zugriffe auf Datenbankdaten habe, löse ich das mit der Query. Also ungefähr so:

ADOQuery1.SQL.Text:='SELECT SUM(Preis) AS Summe FROM Finanzen'; Unter D2006 mußt Du da allerdings ein paar Niggeligkeiten beachten.
Ich empfehle Dir Deine Abfragen, bzw. alles was mit der DB zu tun hat, in ein DM (TDataModule) auszulagern.
Wenn Du ohne Passwortabfrage (PW wird im Programm gespeichert!) arbeiten willst, dann reicht eine ADOQuery. Ansonsten arbeitest Du mit einer ADOConnection und einer ADOQuery und Du must dblogdlg für den Login-Dialog einbinden. (uses dblogdlg; reicht!)

Delphi-Quellcode:
const
  sqltext='select tabelle.feld1 from tabelle where tabelle.feld2=:_feld9_';
...
begin
  AL_DM.Query1.Close;
  AL_DM.Query1.Sql.Text:=sqltext;
  AL_DM.Query1.Parameters.ParamByName('_feld9_').value:='1234';
  AL_DM.Query1.open;
  if not AL_DM.Query1.eof then repeat
    // Daten einlesen
    AL_DM.Query1.Next;
  until AL_DM.Query1.eof;
  AL_DM.Query1.Close;
end;

Gruß
K-H

P.S. DB-Änderungen über Query.execSQL und natürlich ohne Rückgabewerte.
  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 09:38 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