ADO Komponenten funktionieren nicht



  • OK,ich habe die abfrage eingebaut. die Serie ist auf jeden fall asoziert.
    Daten heißt meine Form. Ich habe jetzt mal einen Button gepostet.(von diesen Refresh(),repaint ist was zuviel,ich weiß). IsValid ist bei mir immer false, d.h. so zeigt er mir nichts an. wenn ich diese Abfrage wegmache zeigt er mir nach ein Diagramm,wenn Chart leer war.Ändere ich mit einem 2 Button das Chart(im prinzip dasselbe wie das gepostete) passierrt nichts mehr wenn ich diesen wieder drücke.

    if(Chart1->Series[0]->AssociatedToAxis(Chart1->BottomAxis))
                {
                Daten->Chart1->LeftAxis->Automatic = true;
                Daten->Chart1->BottomAxis->Automatic = true;
                Daten->Chart1->LeftAxis->AutomaticMinimum = true;
    
                if(Daten->Chart1->IsValidDataSource(Series1,Chart1))
                {
                DataModule1->ADOQuery1->Close();
                DataModule1->ADOQuery1->SQL->Clear();
                DataModule1->ADOQuery1->SQL->Add("SELECT * FROM Tabelle1 WHERE (Tabelle1.AnlagenNr=" + tmp +") AND (Tabelle1.Zeitwert >#" + S + "#)");
                DataModule1->ADOQuery1->Open();
    
                Daten->Chart1->Series[0]->Clear();  
                while (!DataModule1->ADOQuery1->Eof)
               {
                 //Leistung Chart1 Zeichnen
                 int Leistung = DataModule1->ADOQuery1->FieldByName("Leistung")->AsInteger;
                  Chart1->Series[0]->AddXY(DataModule1->ADOQuery1->FieldByName("Zeitwert")->AsDateTime,Leistung,"",clTeeColor);
               DataModule1->ADOQuery1->Next();      //Setzt u.a. Eof wieder auffalse
               }
               Daten->Chart1->Repaint();
               Daten->Chart1->Refresh();
    


  • Ist dein Chart vom Typ TChart oder TDBChart ?
    Bei einem TChart macht die Funktion IsValidDatasource keinen Sinn.
    Ändere das mal so

    // den auskommentierten Teil brauchst du nur einmal am Anfang
    //if(Chart1->Series[0]->AssociatedToAxis(Chart1->BottomAxis))
    //{
    //   Daten->Chart1->LeftAxis->Automatic = true;
    //   Daten->Chart1->BottomAxis->Automatic = true;
    //   Daten->Chart1->LeftAxis->AutomaticMinimum = true;
    // ist hier nicht nötig, wenn keine Verbindung zu einer Datasource besteht
    //            if(Daten->Chart1->IsValidDataSource(Series1,Chart1))
    //            {
                DataModule1->ADOQuery1->Close();
                DataModule1->ADOQuery1->SQL->Clear();
                DataModule1->ADOQuery1->SQL->Add("SELECT * FROM Tabelle1 WHERE (Tabelle1.AnlagenNr=" + tmp +") AND (Tabelle1.Zeitwert >#" + S + "#)");
                DataModule1->ADOQuery1->Open();
    
                Daten->Chart1->Series[0]->Clear();
                Daten->Chart1->Series[0]->BeginUpdate(); //verhindert ständiges refresh
                while (!DataModule1->ADOQuery1->Eof)
               {
                 //Leistung Chart1 Zeichnen
                 int Leistung = DataModule1->ADOQuery1->FieldByName("Leistung")->AsInteger;
                 double time =  DataModule1->ADOQuery1->FieldByName("Zeitwert")->AsDateTime;
                 Chart1->Series[0]->AddXY(time,Leistung,"",clTeeColor);
                 DataModule1->ADOQuery1->Next();      //Setzt u.a. Eof wieder auf false
               }
               Daten->Chart1->Series[0]->EndUpdate();
               Daten->Chart1->Repaint();
    //         Daten->Chart1->Refresh();
    

    Das sollte eigentlich gehen. Ansonsten geh mal mit dem Debugger durch und schau dir mal an was hier so passiert.



  • Er sagt mir beim Compilieren aber das Begin/EndUpdate kein element von TSeries ist.Diese Methoden in zusammenhang mit Charts und Series kennt er bei mir gar nicht. (ich habe übrigens den BCB 6 Profesional).
    Sorry wegen IsValid, benutze natürlich TChart



  • Dann hast du wohl TeeChart4, da gibt es diese Funktionen noch nicht (ich hab Version 5). Dann lass sie halt weg. Sie dienen ja eh nur zur Performanceverbesserung.

    Sorry, ich kann jetzt nicht weitermachen da ich weg muss

    Ciao und schönes Wochenende



  • Hallo nochmal,mein problem hat sich leider noch nicht gelöst.
    Ich kann das Chart nach wie vor nicht löschen, weder mit Clear() noch mit Repaint().
    Ich habe meine Charts auf einen TabbedNotebook plazirt. Normalerweise sollte dies ja keinen Unterschie machen, aber könnte es sein das meine Probleme damit irgendwie zusammenhängen?



  • Durchaus möglich:

    BCB-Hilfe schrieb:

    TTabbedNotebook wird nur aus Gründen der Abwärtskompatibilität bereitgestellt. Verwenden Sie in neuen Anwendungen statt dessen die Komponente TPageControl.



  • Hallo
    ich weiss nicht, wie man über der TChart-Komponente Daten aus einer Datenbank anzeigen lassen kann. Über der TDBChart wäre es ja kein Problem.
    Ich müsste höchstwahrscheinlich eine LINE-Series erzeugen dann die Funktion ADDXY, die angeboten wird, benutzen. Ich muss die Time-Werte aus der Datenbank auf die x-Achse transferieren und die Messwerte auf die y-Achse übergeben. Jedoch kann ich meine Zielsetzung nicht programmtechnisch umsetzen. 😕
    Ich wäre für jede lehrreiche Antwort dankbar



  • Hallo,
    leider funktioniert die erwünschte Transformation nicht. Wüsste irgend jemand wie ich daten aus der datenbank über die tchart-komponente anzeigen kann. ich möchte time-werte aus der DB auf die x-Achse übergeben und Messwerte auf die y-Achse .
    ich bin sehr dankbar für jede Antwort, durch die ich meine Problemstellung beseitigen kann? 😞



  • "Funktioniert nicht" ist keine gültige Fehlermeldung. Was geht denn nicht bzw. was hast du denn versucht.



  • folgendes wird aus einer csv-datei in eine access-datenbank gespeichert
    //for-schleife ....

    DataModule.ADOTableTable1.FieldByName('Time').AsString := Felder[1];
    DataModule.ADOTableTable1.FieldByName('Messwert').AsString := Felder[f];

    {1 aus Felder[1] steht für 1. Feld in der die Time-Werte in einer
    csv-Datei stehen und in einer access-DB im 1. Feld abgespeichert
    werden. }

    {ab dem 2. feld sind messwerte eingetragen; f aus felder[f] steht für
    alle ab dem 2. feld anstehenden felder bzw. Spalten, in der die
    Messwerte liegen}

    ....

    ich möchte alle im 1. Feld (auf x-Achse) und ab dem 2. Feld (auf y-achse)
    anstehenden Werte über eine Tchart anzeigen
    IDEE: Arrays doublevariablen zuweisen:

    doublex := StrToFloat(Felder[1]);
    doubley := StrToFloat(Felder[f]);
    dann als parameter an ADDXY übergeben:

    frmForm.Chart1.Series[0].AddXY(doublex, doubley, '', clTeeColor) ;

    😕 es hat nicht funktioniert



  • als Machbarkeitsanalyse reicht im Moment auch anstatt felder[f] auch felder[2]
    d.h nur feld 2 als werte für y-achse und feld 1 (=felder[1]) als werte
    für x-achse
    hätte da jemand eine idee



  • Noch mal. Was genau geht nicht?
    Die Abfrage aus der Datenbank ?
    Das Einfügen in den Chart ?
    Konnte das Programm überhaupt compiliert werden ?
    Zeig doch mal den Code den du verwendet hast. Das was du hier gezeigt hast ist übrigens Pascal.



  • ich arbeite im moment mit delphi7

    // tabelle Messwert
    begin
    DModule.ADOTablemesswert.Append;
    DModule.ADOTablemesswert.FieldByName('Time').AsString := Felder[1];
    DMMain.ADOTableMesswerte.FieldByName('Messwert').AsString := Felder[2];
    DMMain.ADOTableMesswerte.Post;
    end;
    { die felder aus der 1. Spalte werden in das Feld 'Time' in meiner DB eingetragen
    die Felder as der 2. spalte werden in das Feld 'Messwert' eingetragen
    ?wie kann ich dies grafisch über TChart anzeigen lassen??}
    soll ich den gesamten code zuschicken? oder reicht dies?
    danke



  • schuldigung natürlich nicht DMMain sondern DModule hab mich nur hier verschrieben nicht im code selbst



  • Sehe ich das richtig, dass in Felder deine Daten gespeichert sind? Ist das ein Array auf float oder etwas Ähnliches? Wenn, dann kannst du doch alles direkt eintragen (mit Hilfe einer Schleife und AddXY).



  • es sind string-arrays
    ich arbeite seit kurzem mit delphi und bin glücklich über jede unterstützung



  • ja die daten werden in den array gespeichert



  • An ADDXY hab ich auch gedacht, wie dies in meinem vor-vor-vorletzen beitrag zu sehen ist aber ich erkenne meine lücken nicht, es treten exceptions auf.
    bitte um hilfe



  • Was für Exceptions ? Wo treten sie auf? Bist du mal mit dem Debugger durchgegangen ?



  • Ich gebe diesen Code ein, aber es geht nicht:

    dbx := StrToFloat(Felder[1]);
    dby := StrToFloat(Felder[f]);
    frmImport.Chart1.Series[0].AddXY(dbx, dby, '', clTeeColor);
    gäbe es eine alternative Code-Lösung oder wie würdet ihr das machen?


Anmelden zum Antworten