Datenbankerstellung und Analyse
-
also wenn ich das so mache funzts auch nicht
void __fastcall TFormMain::ButtonReadMINClick(TObject *Sender) { Query->Close(); Query->Active = false; Query->SQL->Clear(); Query->SQL->Add("SELECT Min(Tabelle1.Spalte1) AS MinvonSensor1 FROM Tabelle1;"); Query->Active = true; EditReadMIN->Text = Query->FieldByName("Spalte1")->AsString; // so richtig? Query->Open(); }
brauch ich ein query->execsql auch?
mein ziel soll folgendes sein:
EditReadMIN->Text = 'ERGEBNIS AUS QUERY';
thx
-
Hallo
du must schon den Alias verwenden, den du in der Abfrage definierst.
EditReadMIN->Text = Query->FieldByName("MinvonSensor1")->AsString;
Du solltest mal die von dir verwendeten SQL-Statements mal in einem DB-Frontend ausprobieren, damit du siehst was du als Ergebnis mit welchen Spaltennamen zurückbekommst.
bis bald
akari
-
danke für die antwort, werde das gleich mal ausprobieren mit dem alias.
aber was ist "db-frontend", ich als noob hab keine ahnung was das sein soll.
danke
-
Hallo
EIn Datenbank-Frontend ist ein programm um direkt die Tabellen und Daten zu bearbeiten.
Im Falle der BDE/Paradox (also wenn du direkt TTable oder TQuery benutzt) ist das das Builder-Hilfsprogramm Datenbankoberfläche, bei ADOConnection Access und bei MySQL zum Beispiel MySQL-Frontend.bis bald
akari
-
zur auswertung hab ich mir folgendes überlegt:
- ich suche die min und max einer spalte heraus
- mit diesen werten kann ich mir ausrechnen, welcher wertebereich 10% beträgt
- nun möchte ich die anzahl der werte wissen, die innerhalb dieser 10% (von min. bis +10%) liegen.
die frage steckt in punkt 3): gibts dazu einen einfachen sql-code fürs query oder ist das nurüber mehrere "ecken" zu lösen - und wie?
die 2te frage: muss ich für das ausführen des sql-statements des querys query->open();, query->execsql(); oder reicht query->active=true; schon aus?
danke
-
Active ist eine Eigenschaft, die mittels der Methode Open gesetzt wird!
Das geht (glaube ich) zwar auch rekursiv, ist aber nicht State of the Art und sollte vermieden werden.
select count(x)
from y
where z >= Min
and z <= Min*1.1oder
select count(x)from y
where z between Min and Min*1.1
-
geht es auch, dass ich aus einer zeile von mehreren spalten einen minimalwert herauslese? dabei wäre es auch sinnvoll zu wiesen von welcher spalte der minimalwert stammt.
Danke euch!
-
hallo?
-
Selber Hallo - Schon mal was von Ostern gehört?
SQL-Kommando
Select Min(SpalteX)
from TabelleYDir würde eine F1-Hilfe z.B. in Access oder Query-Analyzer sehr schnell weiterhelfen können.
-
und dir würde eine brille helfen, denn dann könntest du mal lesen was eigentlich gefragt war. das war NICHT "suche irgendeinen min-wert aus einer spalte einer tabelle" SONDERN "suche min-wert aus einer zeile von mehreren spalten einer tabelle"
danke.
-
@caspar_louis: das ganze nicht zu ernst nehmen. ich bin dir trotzdem dankbar für die antwort! ehrlich. nur kommt es in foren sehr oft vor, dass auf eine eindeutige frage eine falsche antwort folgt. das wird mir vermutlich auch schon passiert sein, ...
-
das wird mir vermutlich auch schon passiert sein, ...
Tja, klar kommt das vor, aber erstaunlich, dass dann die Fragesteller immer so ungehalten reagieren. Gerade die am meisten F5 Drücker und Frager sind dann immer sauer
-
johnny schrieb:
das war NICHT "suche irgendeinen min-wert aus einer spalte einer tabelle" SONDERN "suche min-wert aus einer zeile von mehreren spalten einer tabelle"
Wenn du das wirklich ermitteln willst/musst, dann stimmt dein Datenbankdesign nicht und muss vermutlich weiter normalisiert, d.h. weiter in Tabellen unterteilt werden.
Falls dir Normalisierung nichts sagt dann fehlen dir entscheidende Grundlagen und es wäre ratsam, sich erstmal damit zu beschäftigen.Mit dem C++Builder hat das alles jedenfalls nichts zu tun; beachte bitte, dass wir hier auch ein eigenes Datenbank-Forum haben.
Und wie meine Vorredner schon andeuteten: an deinen Umgangsformen könntest du auch noch etwas arbeiten.
-
Hallo Jonny.
Ich habe die Frage schon verstanden gehabt. Ich konnte mir nur nicht vorstellen, daß Du wirklich und wahrhaftig einen Minimalwert über mehrere Spalten evtl. sogar Tabellen ermitteln willst.
Das ergibt (noch immer) in meinen Augen keinerlei Sinn. Jede halbwegs brauchbare relationale DB speichert Daten je Merkmal und das pro Spalte. Deshalb gibt es ja auch die Funktionen Min, Max etc. pro Spalte und nicht pro Zeile.
Welchen Sinn macht es das Minimum über Spalten wie z.B. Dachfläche, Raumhöhe, Grundfläche ... für einen bestimmten Haustyp (Zeile) zu ermitteln.
Da kriegst Du ggf. ja schon Probleme mit der Vergleichbarkeit der Werte, falls Du die Einheiten beachten willst.Solltest Du tatsächlich Werte eines Merkmals in verschiedenen Spalten speichern = Konstruktionsfehler in DB.
Das zu beheben, besonders wenn schon Werte drin sind, geht meist ziemlich besch.... und wenn, dann ist es aufwendig, da auch immer alle Frontends angepackt werden müssen.
Eine Möglichkeit wäre die Erstellung einer View, deren select(e mit unions etc.) so gestaltet ist, daß die Werte dann in je einer Spalte darstellt.
Eine andere Möglichkeit, je nach DBMS, wäre mit Kreuztabellen oder OLAP zu arbeiten.
Das Grundprinzip ist immer das gleiche. Du transformierst/verdichtest Deine Werte so, daß Du sie mit Std.-Befehlen auswerten kannst.
Da wir Deine DB-Struktur und die Ziele Deiner Frage nicht kennen, ist eine genauere Auskunft schwer möglich.
Noche eine Sache:
Wenn Du Deine Fragen in einen Kontext stellen würdest, dann wäre es einfacher das Ziel zu erfassen (Warum nicht nur was).Fragen, bei denen ich das Gefühl habe, er meint etwas anderes als er schreibt (auch wenn sie präzise sind), führen bei mir zu Antworten auf das in Deinem Fall antizipierte=erratene Ziel.
-
also folgendes zum hintergrund:
ich habe mehrere spalten welche messwerte (gleicher einheiten) von sensoren beinhalten. zusätzlich gibt es noch eine spalte mit der zeit und eine spalte mit dem datum zum zeitpunkt der messwertaufnahme.nun möchte ich den minimalwert (bzw. vom minimalwert bis zu einem definierten wert xmin, welcher zwischen minimalwert und maximalwert liegt) einer zeile (d.h. gleicher zeitpunkt) aus verschiedenen sensoren ermitteln.
hoffe jetzt ist einiges klarer geworden
danke!
-
Offenbar wird dir selbst wohl nichts klar!?
Das ist kein C++Builder-spezifisches, sondern ein allgemeines Datenbankproblem. Und für sowas haben wir hier ein eigenes Forum!
Wenn du Schwierigkeiten mit der praktischen Umsetzung eines Lösungsansatzes haben solltest, dann kannst du gern hier wieder nachfragen.