Announcement

Collapse
No announcement yet.

Probleme mit Datasets für DBGrid zur Laufzeit

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

  • Probleme mit Datasets für DBGrid zur Laufzeit

    Hallo,

    Es geht um folgende Problem...
    Meine Anwendung soll weitgehenst unabhängig von der Datenbank sein. Deswegen möchte ich mich nicht darauf festlegen welchen DataSet-Typen ich zur Datenbankabfrage verwende (z.B. TTable oder TQuery). Ich lasse die DataSet mir zur Laufzeit erzeugen und verbinde sie über eine DataSource mit einem DBGrid. Das eigentliche Problem ist, dass das DBGrid sich nicht aktualisiert wenn sich das DataSet (in der DataSource) ändert.
    Ich habe überprüft, ob alles korrekt ist und es schein so...
    DataSet ist aktive hat RecordCount größer null.
    DBGrid hat die richtigen Spalten erstellt (gleich den Spalten aus derAbfrage) zeigt aber keinen einzigen Datensatz an (obwhl Recordcount > 0).

    Nach dem dieses Problem aufgetreten ist habe ich mal folgende probiert: Ich nehme ein DBGrid, eine DataSoure und zwei unterschiedliche Queries.
    Wenn ich einen Knopf drücke wird die Eigenschaft
    DataSource.Dataset := Query1 oder DataSource.Dataset := Query2
    gesetzt. Hier tritt das selbe(?) Problem auf, auch hier wird nach dem wechseln die Query immer die Query angezeigt, welche zuerst eingetragen war. (Im oberen Fall war nix eingetragen deswegen wird auch nix angezeigt)

    Also, weiss vielleicht jemand wo das Problem liegen könnte? Kann man das überhaupt so machen - die DataSets ändern?

    Vielen Dank.

  • #2
    Hallo,

    ich kann das geschilderte Verhalten mit Delphi 6.02 nicht reproduzieren. Beim Umschalten des Radiobuttons ändert sich sofort die Anzeige der im TDBGrid sichtbaren Daten.
    <pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls, DB, DBTables, Grids, DBGrids;

    type
    TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Query1: TQuery;
    Query2: TQuery;
    RadioGroup1: TRadioGroup;
    procedure RadioGroup1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
    case RadioGroup1.ItemIndex of
    0 : DataSource1.DataSet := Query1;
    1 : DataSource1.DataSet := Query2;
    end;
    end;

    end.
    </pre>
    Konfiguration des Formulars:
    <pre>
    object Form1: TForm1
    Left = 192
    Top = 114
    Width = 870
    Height = 640
    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 = 48
    Top = 104
    Width = 497
    Height = 120
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
    end
    object RadioGroup1: TRadioGroup
    Left = 80
    Top = 24
    Width = 257
    Height = 57
    Caption = 'RadioGroup1'
    ItemIndex = 0
    Items.Strings = (
    'Query 1'
    'Query 2')
    TabOrder = 1
    OnClick = RadioGroup1Click
    end
    object DataSource1: TDataSource
    DataSet = Query1
    Left = 56
    Top = 168
    end
    object Query1: TQuery
    Active = True
    DatabaseName = 'DBDEMOS'
    SQL.Strings = (
    'SELECT * FROM Country '
    'WHERE Name LIKE ''B%''')
    Left = 40
    Top = 24
    end
    object Query2: TQuery
    Active = True
    DatabaseName = 'DBDEMOS'
    SQL.Strings = (
    'SELECT * FROM Country '
    'WHERE Name LIKE ''C%''')
    Left = 40
    Top = 56
    end
    end
    </pre>
    Das Verhalten ändert sich auch nicht, wenn beide TQuery's auf völlig unterschiedliche Tabellen zugreifen - das TDBGrid zeigt immer die "richtigen" Spalten und Datensätze an

    Comment


    • #3
      Hallo,

      Danke für die Hilfe. Dein Beispiel hat natürlich funktioniert...
      Hat mir weitergeholfen - jetzt funktionierts

      Comment

      Working...
      X