Announcement

Collapse
No announcement yet.

Nach SQL Abfrage Datenfelder füllen

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

  • Nach SQL Abfrage Datenfelder füllen

    Mit Dank für Hilfe,

    mit in einer Query abgefragten und sortierten Menge möchte ich eine Spalte mit Werten
    füllen. Der erste Satz soll 1 haben dann 2 usw. Es sollen aber nur die Felder gefüllt werden,
    die in der unten angeführten Abfrage auch im Grid erscheinen.

    Query1.SQL.Clear;

    Query1.SQL.Add('SELECT MaArt, TNr, Klammer, Spiele_A, MaName,');

    Query1.SQL.Add('Punkte_P, Punkte_N, GeSpiele, VeSpiele');

    Query1.SQL.Add('FROM MannTen');

    Query1.SQL.Add('WHERE MaArt LIKE :egal');

    Query1.SQL.Add('ORDER BY Punkte_P DESC, GeSpiele DESC');

    Query1.ParamByName('egal').AsString :=

    ComboBox1.Text;

    Query1.Open;

    so ist es: so soll es sein:

    aaa 3 1 aaa 3

    ccc 2 2 ccc 2

    bbb 1 3 bbb 1

    danke für Hilfe

    ph

  • #2
    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


    • #3
      Vielen Dank,
      habe meine Datenbank in einen Bereich eingeschränkt, dann meine Spalte mit den Zählfeld gefüllt,
      mit SQL als erstes sortiert dann die folgenden. Ging auch bis jetzt.
      Werde mich aber Ihrer Lösung bedienen.

      p

      Comment

      Working...
      X