Datenbankerstellung und Analyse
-
Hab ich dir ja auch nicht unterstellt
-
danke für die antworten. wenn das so ist mit den odbc sachen dann werd ich das mal vorerst lassen.
hab jetzt mal eine access-db erstellt und dieser per hand in den odbc-verwaltung hinzugefügt.
mit meinem programm im builder kann ich die tabelle mithilfe von dbgrid auslesen und sogar neue daten hinzufügen. nun meine frage: wie funktioniert es wenn ich z.b. per button-click vordefinierte werte in die tabelle schreiben will?
muss ich auch was spezielles beachten wenn ich mein programm per Close();, z.b. die datenbank extra vorher schließen/speichern um eventl. datenverlust zu vermeiden?thx.
-
Ich hab diese Frage schon mal gestellt. Guck mal nach.
War irgendwas mit FieldbyName oder FieldByValue habs vergessen. TTable ist hier eigentlich die falsche komponente (TQuery). Du wirst später auf ein Problem mit TTable stoßen. Hab ich auch gehabt. Daher lauf ruhig gegen die Wand.
-
@Johny
Im Prinzip kann man sich bei diesem Niveau von Fragen nur wiederholen.Wer lesen kann ist klar im Vorteil.
Wenn Du nur 5 min auf das Lesen der BCB Hilfe (Query Propertys & Methoden) verschwenden würdest, würden sich derartige Fragen von allein erledigen.
-
also ich hab da wie oben beschriebn eine tabelle mit 3spalten, i jeder davon gibts so ca. 5 werte die ich nun mit folgendermaßen durchsuchen möchte:
void __fastcall TFormMain::ButtonReadMINClick(TObject *Sender) { Query->Close(); Query->Active = false; Query->SQL->Clear(); Query->SQL->Add("SELECT Min(Tabelle1.Sensor1) AS MinvonSensor1 FROM Tabelle1;"); Query->Active = true; EditReadMIN->Text = Query->ParamByName("Tabelle1.Spalte1")->AsString; Query->Open(); }
den sql code habe ich erhalten, indem ich in access eine abfrage erstellt habe und dann den sql-code kopiet habe.
die frage: in der zeile "...= Query->ParamByName("Tabelle1.Spalte1")->AsString..." kommt es zu einer fehlermeldung. bin ich hier überhaupts auf dem richtigen weg.
wie kann ich denn das ergebnis das aus meiner query kommt abfragen. wie bekomme ich, hier einen entsprechenden minimalwert, heraus um ihn dann weiterzuverarbeiten können?thx
-
ich habe oben geschrieben:
die frage: in der zeile "...= Query->ParamByName("Tabelle1.Spalte1")->AsString..." kommt es zu einer fehlermeldung. bin ich hier überhaupts auf dem richtigen weg.
wie kann ich denn das ergebnis das aus meiner query kommt abfragen. wie bekomme ich, hier einen entsprechenden minimalwert, heraus um ihn dann weiterzuverarbeiten können?vielleicht war die frage etwas unklar, deshalb nochmal:
mit welcher funktion/methode erhalte ich das resultat das mein tquery liefert? in meinem fall wäre es eine zahl aus einer spalte, die ich dann in ein edit schreiben möchte.
thx
-
Hallo
siehe TQuery::FieldByName()::AsString
bis bald
akari
-
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.