ADO Komponenten funktionieren nicht
-
Manfred Schmidtke schrieb:
Mmmh... wo habe ich behauptet, dass die Connections auf den Formularen zu definieren sind

Ok, aber trotzdem benötigt man nur eine Connection pro Datenbank. Auf gar keinen Fall pro Form. Die Forms enthalten idealerweise überhaupt keinen Datenbank-Code.
-
Ok, vermutlich hast Du recht.
Die Erfahrung, mit mehreren Connections bei parallelen Zugriffen zu arbeiten stammt aus der BDE. Hier mussen unterschiedliche Pfade für die Speicherung angegeben werden, sonst hats geknallt.
ADO ist da offenbar (glücklicherweise) anders gestrickt.
Punkt drei also (geistig) wieder löschen.

-
Hallo,
Also ich muss noch mal Nachfragen, denn Ich Verstehe nicht ganz was KlaußB meint, mit was meine Query Verbunden ist. Ich habe ja nur die ADOConnection, ADO Query und eine DataSource Komponente.Das mit dem Auslagern der DB Komponenten in ein seperates Modul ist eine gute Idee, ich weiß aber nicht ganz wie ich das machen soll. wenn ich die Komponenten alle in eine extra cpp datei setzte, muss ich dann für alle aktionen(SQL) die ich von den anderen Formen aufrufe extra Funktionen Schreiben? Oder verstehe ich das jetzt falsch?
@Manfred Schmidtke:
Ich habe es bei den Charts auch erfolglos mit Refresch() versucht. aber Sicherheitshalber habe ich noch ein DBGrid eingefügt um genau sehen zu können was passiert. Das DBGrid tut ja normalerweise ohne Probleme.
Zum Fehler:
ich habe in ein Button eine SQL Abfrage implementiert, mit der ich die Auswahl von Datensätzen ändere. wenn ich da drauf klicke, passiert aber gar nichts,die Daten ändern sich weder im DB Grid noch in den Charts.Wenn ich in meiner 2 Query nicht direkt in das vorgesehene Feld zur entwurfzeit SQL-Code eingebe bleibt alles leer, egal was für Codes ich zur Laufzeit ausführe!!!(habe Versucht das DBGrid mit der Query meines Main-Fensters zu verbinden, das geht nur die Charts können das irgendwie nicht)
-
Wenn ich das richtig verstehe, soll die zweite Form auf die Auswahl der ersten Form reagieren. Es stellt sich dabei die Frage, wozu alles doppelt vorhanden sein muss.
Lagere die Datenbank-Komponenten in ein Data-Module aus und includiere das Data-Module in beiden Forms.
Die Aktualisierung von DBChart sollte nach Borland-Hilfe eigentlich automatisch geschehen, wenn AutoRefresh und RefreshInterval entsprechend gesetzt sind.
-
Hallo,
ich habe jetzt meine DB Komponenten in eine DataModule ausgelagert. Wenn ich nun einen Funktionstest mit jeweils einer Form mache,(d.h. alle Datenbankzugriffe der 2.Form (mit Charts) auf disable setze, und umgekehrt, alle DB zugriffe in der 1 Form auskommentieren, die Charts auf enable),dann funktionieren alles.Aber, wenn ich alles zusammen aktiv lasse, wie es ja auch sein soll, dann hängt sich mein Programm beim Starten auf,d.h ich sehe den Startbildschirm meines Programms und eine Sanduhr die ewig läuft. Irgendwo ist also wohl eine art endlosschleife oder sowas.
Ich glaube das dies mit den Charts zusammenhängt, weil, wenn ich sie deaktiviere geht alles. Aber weiß jemand warum das so ist, und wie es behoben werden kann?bitte helft mir, es ist dringend. Ich muss mit dem Projekt fertig werden aber ich komme hier nicht weiter
-
Hast Du schon mal mit dem Debugger geschaut, wo es stehen bleibt?
-
Ohne genauere Informationen und Code wird's schwierig.
Ins Blaue: Wenn von Form1 das Statement abgesetzt wird und Form2 das Ergebnis grafisch darstellen soll: Schalte AutoRefresh bei den DBChart(s) ab und rufe die Refresh-Funktion nach Ausführung des Statements auf.
-
Also ich habe jetzt noch mal von mit dem zugriff von meiner Hauptform begonnen und den ganzen rest weggelassen. Dabei habe ich festgestellt, das hinter meinem Startbildschirm eine Fehlermeldung kommt ->daher das Hängenbleiben.
Die Fehlermeldung ist eine EAccessViolation. Fehler beim zugriff auf adresse ...
und zwar kommt dieser fehler genau dann, wenn ich das erste mal auf die Query Komp. in DataModule zugreife (DataModule1->ADOQuery1->Close();)
Das ist eigentlich komisch, weil genau der selbe Aufruf in meiner 2 Form funktioniert.
-
Im Konstruktor des Forms?
-
Ja,der Befehl ist in einer Funktion und die ist im Konstruktor von TMain
-
Du kannst im Konstruktor des Hauptforms noch nicht auf andere Forms oder Datenmodule zugreifen, da diese noch nicht erzeugt wurden.
Mögliche Lösung:
Das Datenmodul nicht automatisch erzeugen lassen, sondern im Konstruktor der Haupform manuell erzeugen.
-
OK, soweit ist jetzt tut jetzt etwas, alle funktionen auf meinem Formular 1 sind gegeben.
Aber auf dem 2 Formular kommt bei einer ganz simplen abfrageDataModule1->ADOQuery1->Close(); DataModule1->ADOQuery1->SQL->Clear(); DataModule1->ADOQuery1->SQL->Add("SELECT * FROM Tabelle1"); DataModule1->ADOQuery1->Open();zu einem EOLE error: Insuficient key column for updating or refreshing.
und das erst nachdem er die Abfrage ausgeführt hat, also erst wenn er aus der obigen button routine zurückspringt. Ich weiß nicht wer da was updaten will, den die Charts habe ich vorsichtshalber mal deaktiviert.
-
Das sieht aus, als würdest Du eine Transaktion nicht korrekt abschliessen, oder ein Update auf einen nicht eindeutig identifizierbaren Datensatz versuchen.
Die Tabelle hat doch einen Primärindex?Grüße Joe_M.
-
Ja, nun ja, ich habe eigentlich 2 Tabellen in meiner datenbank, in der zweiten Tabelle habe ich keinen Primärschlüssel. Die Tabellen sind aber auch nicht mehr verbunden.(ich habe es auch mit verbindung probiert aber das ergebniss ist gleich)
Die Sache ist aber die das bevor ich die ADO Komp ausgelagert habe die ganzen DB zugriffe in der 1 form ja funktioniert haben, und nun bringt er bei sämtlichen zugriffen auf die Tabelle ohne Prim.schl. diesen fehler.Habe jetzt noch ein feld eingefügt und als Prim.schl. deklariert. soweit ich das jetzt sehe sind jetzt alle error weg, das problem ist jetzt aber das ich das selbe problem habe wie am anfang: die Chart Komp. zeigt nichts an,obwohl sie es müsste.
habe diesen code in einen button gepackt:Daten->DBChart1->Enabled = true; DataModule1->ADOQuery1->Close(); DataModule1->ADOQuery1->SQL->Clear(); DataModule1->ADOQuery1->SQL->Add("SELECT Windgeschwindigkeit,Zeitwert FROM Tabelle1 WHERE Tabelle1.Zeitwert >#01/01/05# AND (Tabelle1.AnlagenNr=54)"); DataModule1->ADOQuery1->Open(); Daten->DBChart1->AutoRefresh = true;wenn ich auf den button drücke ändert sich zwar die DataSource(sehe ich in einem DBGrid) aber das Chart bleibt leer!wenn ich den SQL String im entwurfsmodus teste mit Autorefresh tut es.Müssen beim Chart noch irgendwelche param. eingestellt werden? Laut hilfe ja eigentlich nicht.
Sorry, übrigens das ich nicht mehr Code präsentieren kann,aber am besten währe wohl das gesamtprogramm, aber das posten?

-
Hallo, ich komme mit diesem Programm nicht merh zu rande! Das problem ist das is diese woche fertig sein muss!
kann mir jemand helfen?, ich meine persönlich, über telefon oder dergleichen.
Es scheint mir nähmlich so das mir mit fragen über einen teilbereich ohne übersicht über das ganze nur schwer geholfen werden kann!!
Ich bin auch bereit für die Zeit zu bezahlen.
-
Ich hab grad mal kurz in die Hilfe geschaut. Offensichtlich mußt Du die Methode RefreshDataSet(), CheckDataSource(), oder RefreshData() verwenden, um die Daten zu aktualisieren. Vielleicht solltest Du auch mal mittels IsValidDataSource() überprüfen, ob die Datenquelle überhaupt noch gültig ist, nachdem, du die Query geändert hast.
-
Hallo erst einmal.
Die Funktionen RefreshDataSet(), CheckDataSource(), gibt es bei diesen DBCharts nicht, sind glaube ich funktionen von TeeChart. Mit RefreshData() habe ich is auch probiert, ohne ergebniss.
Allerdings gibt er mir bei der Methode IsValidDataSource(Series4,DBChart1) immer false zurück. vermutlich wird deswegen nichts mehr angezeigt.
Warum ist die Query jetzt ungültig, und wie mache ich sie wieder gültig?mfg
-
Könnte darin das Problem liegen?Der Hauptunterschied zwischen TChart und TDBChart besteht darin, daß das letztgenannte die korrekt auf dem Zielsystem installierte Borland Database Engine BENÖTIGT, während TChart diese nicht benötigt.
ADO ist (m. E.) nicht BDE.
-
Hallo,
Wäre es hier nicht besser die normale TChart-Komponente (ohne direkte Datenbankanbindung) zu verwenden und die Updates dann manuell durchzuführen. Sowas läßt sich auf jedem Fall besser debuggen.
Ciao
-
Tja ich könnte allerdings eine normale Chart Komponente nehmen wenn ich wüsste wie! wenn ich meine Hile aufrufe kommt nähmlich freundlicherweise eine fehlermeldung
und das wo ich aufrufen kann ist mit Pascal-code beschrieben
wie bekomme ich dann eigentlich die werte aus meiner Query in das Chart?
muss ich in einer Schleife alle Punkte einzeln schreiben? ist das nicht langsam?
kann mir vieleicht jemand ein Beispiel posten wie ich die daten übertrage?