Announcement

Collapse
No announcement yet.

Datensätze nach Bereichsangabe sortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensätze nach Bereichsangabe sortieren

    Mit der Bitte um Hilfe

    Mit folgender Procedure lege ich die Bereichsgrenzen auf das Datenfeld MaArt.

    Danach möchte ich aber die angezeigten Felder und nur diese mit MaArt

    nach zwei andern Datenfeldern sortieren.

    Wenn ich das danach tue zeigt es mir aber wieder alle Datensätze dafür aber schön sortiert.

    Es sollen aber nur die die in den ausgewiesenen Bereich passen sortiert werden

    procedure TTabelleAusForm.BBAuswahlClick(Sender: TObject);

    begin

    with MannForm.MannTable do

    begin

    MannForm.MannTable.Active := False;

    MannForm.MannTable.IndexName := 'Ma_Art';

    MannForm.MannTable.Active := True;

    SetRangeStart;

    FieldByName('MaArt').AsString := ComboBox1.Text;

    SetRangeEnd;

    FieldByName('MaArt').AsString := ComboBox1.Text;

    ApplyRange;

    end;

    end;

    Ich wäre dankbar könnte mir jemand einen Tip geben.
    mfg
    ph

  • #2
    Hallo,

    diese Aufgabe lässt sich wohl am besten mit SQL lösen: <br>
    a) Über eine WHERE-Einschränkung kann der Bereich für "MaArt" definiert werden. <br>
    b) Über eine ORDER BY-Anweisung wird die Sortierreihenfolge festgelegt.

    Am Beispiel der <i>DBDEMOS</i>-Tabelle <i>Customers</i> lässt sich der Einsatz gut demonstrieren. Es sollten nur die Datensätze gefunden werden, deren ersten zwei Buchstaben im City-Eintrag zwischen "Ka" und "Kg" liegen. Außerdem soll das Ergebnis nach dem Kundennamen sortiert werden:
    <pre>
    SELECT CustNo, Company, City
    FROM Customer
    WHERE (City > 'Ka' AND City < 'Kg')
    ORDER BY Company
    </pre&gt

    Comment


    • #3
      Vielen Dank,
      nach langen ausprobieren habe ich das Problem dann mit SQL lösen können.

      p

      Comment


      • #4
        Hallo,

        für die Nummerierung würde ich ein <B>berechnetes Feld</b> verwenden. Dazu sind die folgenden Schritte notwendig (wobei ich wieder mein SQL-Beispiel der vorangegangenen Frage verwende): <br>
        1. Doppelklick auf TQuery und über den <b>Feld-Editor</b> für alle Spalten <b>persistente TField</b> anlegen. <br>
        2. Im Feld-Editor über die rechte Maustaste ein <b>neues Feld</b> anlegen, das als berechnetes INTEGER-Feld deklariert wird. <br>
        3. In dem TQuery-Ereignis <b>OnCalcFields</b> wird nun die Nummerierung hochgezählt.

        Formular:
        <pre>
        object Form1: TForm1
        Left = 192
        Top = 107
        Width = 696
        Height = 480
        Caption = 'Form1'
        Color = clBtnFace
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        OldCreateOrder = False
        PixelsPerInch = 96
        TextHeight = 13
        object DBGrid1: TDBGrid
        Left = 40
        Top = 88
        Width = 569
        Height = 225
        DataSource = DataSource1
        TabOrder = 0
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'MS Sans Serif'
        TitleFont.Style = []
        end
        object ButtonQueryOpen: TButton
        Left = 136
        Top = 40
        Width = 75
        Height = 25
        Caption = 'Öffnen'
        TabOrder = 1
        OnClick = ButtonQueryOpenClick
        end
        object Query1: TQuery
        OnCalcFields = Query1CalcFields
        DatabaseName = 'DBDEMOS'
        SQL.Strings = (
        'SELECT CustNo, Company, City '
        'FROM Customer '
        'WHERE (City > '#39'Ka'#39' AND City < '#39'Kg'#39') '
        'ORDER BY Company ')
        Left = 40
        Top = 40
        object Query1RecNr: TIntegerField
        FieldKind = fkCalculated
        FieldName = 'RecNr'
        Calculated = True
        end
        object Query1CustNo: TFloatField
        FieldName = 'CustNo'
        Origin = 'DBDEMOS."Customer.DB".CustNo'
        end
        object Query1Company: TStringField
        FieldName = 'Company'
        Origin = 'DBDEMOS."Customer.DB".Company'
        Size = 30
        end
        object Query1City: TStringField
        FieldName = 'City'
        Origin = 'DBDEMOS."Customer.DB".City'
        Size = 15
        end
        end
        object DataSource1: TDataSource
        DataSet = Query1
        Left = 80
        Top = 40
        end
        end
        </pre>

        PAS-Unit:
        <pre>
        type
        TForm1 = class(TForm)
        Query1: TQuery;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Query1CustNo: TFloatField;
        Query1Company: TStringField;
        Query1City: TStringField;
        Query1RecNr: TIntegerField;
        ButtonQueryOpen: TButton;
        procedure Query1CalcFields(DataSet: TDataSet);
        procedure ButtonQueryOpenClick(Sender: TObject);
        private
        { Private-Deklarationen }
        FRecNo : Integer;
        public
        { Public-Deklarationen }
        end;

        var
        Form1: TForm1;

        implementation

        {$R *.DFM}

        procedure TForm1.Query1CalcFields(DataSet: TDataSet);
        begin
        Inc(FRecNo);
        Query1RecNr.Value := FRecNo;
        end;

        procedure TForm1.ButtonQueryOpenClick(Sender: TObject);
        begin
        Query1.Active := False;
        FRecNo := 0;
        Query1.Active := True;
        end;
        </pre&gt

        Comment

        Working...
        X