DB + SQL + Navigator: Werte herausholen - WIE?



  • also nochmal als bsp:
    - datenbank mit einer spalte und mehreren werten (zeilen)
    - per DBGrid und DBNavigator und Query (SQL) soll folgendes passieren:
    irgendwo in der Tabelle (dbgrid) ist die aktuelle position (durch pfeil symbolisiert). mit dem dbnavigator kann ich eine zeile weiter nach oben oder unten wechseln (links-rechts-pfeile beim dbnavigator). und der wert, der an der momentanen position (pfeil) steht, soll ausgelesen werden und irgenwohin (var. od. dgl.) geschrieben werden. es soll einfach der inhalt der zelle einer spalte beim aktuellen ort (position, pfeil, in der tabelle) ausgelsesen werden.

    1. problem: welche routine/funktion wird verwendet wenn beim dbnavigator auf "voriger/nächster datensatz" geklickt wird?

    2. problem: wie lautet der sql code zum auslesen eines wertes in der spalte an der aktuellen position (zeile)?

    danke
    bernd



  • zu 1: BCB-Hilfe unter TDBNavigator -> Ereignisse -> OnClick, einschließlich Beispiel

    zu 2: Query->Fields->Fields[Spalte]->As... auch hier siehe BCB-Hilfe und BCB-Forum/FAQ



  • Oder Du interessierst Dich gar nicht für die Objekte DBGrid / Navigator
    und benutzt gleich die Query.

    Das DataSet dieser hält eh die Datensätze, nicht DBGrid und auch Navigator nicht.

    Die Query-Ereignisse Before/AfterScroll reagieren auf die Ändererung des aktuellen DS.



  • @caspar...: doch dbgrid benötige ich um die tabelle anzuzeigen, dbnavigator dient dazu die zeilen auf und ab zu springen.

    Die Query-Ereignisse Before/AfterScroll reagieren auf die Ändererung des aktuellen DS.

    was heisst DS?

    @Linnea: hab mal sowas probiert:

    Edit1->Text = Query1->Fields->Fields[1]->AsString;
    

    bringt mir sowas wie "list index out of bounds"...

    übrigens: in die bcb-hilfe hab ich schon nachgekuckt, bin nicht schlauer geworden, deshalb hier der neue beitrag...

    thx



  • ok ... DS --->>> Datensatz 🙄



  • @Linnea: jetzt geht es (fast), ein sql-statement hat gefehlt: "SELECT Tabelle1.* FROM Tabelle1". und mit

    Edit1->Text = Query1->Fields->Fields[1]->AsString;
    

    bekomme ich immer nur den ersten wert (erste zeile) aus der jeweiligen spalte (hier: 1). ich möchte aber durch die zeilen des dbgrids auf und ab schalten, dabei sollte es mir immer den zellenwert einer spalte der jeweiligen zeile, heraulesen. ??

    thx



  • schau dir mal die Hilfe zu "SelectedRows, Count, Items, DataSource, FieldCount, Fields, GotoBookmark, DataSet (Beispiel)" an

    noch einen Tip dazu: statt aufs Query mußt du auf das mit dem DBGrid verknüpfte DataSource zugreifen



  • könnt ihr bitte mal konkrete ergebnisse schreiben,....ich blick da nicht ganz durch...



  • in dem Beispiel steht doch alles drin, es sollt ja nicht so schwer sein Beispielquellcode auf das eigene Programm anzupassen oder den Beispielcode mal auszuprobieren..

    TDataSet *pDS = DBGrid1->DataSource->DataSet;
    ...
    s = s + pDS->Fields->Fields[j]->AsString
    


  • Ich habe auch nicht gesagt, Du sollst DBGrid & Navigator weglassen.

    Ich wollte nur ausdrücken, daß die Events, die Du nutzen kannst direkt in der Komponente "hängen", die das DataSet hat, und daß ist DBQuery.

    Das schließt Lineas Aussagen nicht aus. Es gibt oft mehrere Varianten, z.B. diese:

    void __fastcall TForm1::ADOQuery1AfterScroll(TDataSet *DataSet)
    {
        int i = ADOQuery1->FieldByName("TESTSPALTE")->AsFloat;
    }
    

Anmelden zum Antworten