Entwickler-Ecke

Datenbanken - Mehrere Felder aus dbGrid auslesen?


nonni - Sa 21.06.03 00:10
Titel: Mehrere Felder aus dbGrid auslesen?
Hallo,
also ich habe in einem dbGrid Daten drin und markiere mehrere Felder jetzt will ich nacheinander aus einer Spalte die Daten auslesen.
Mit:

Quelltext
1:
dbGrid.SelectedRows.Count                    

kriege ich die anzahl der ausgewählten Felder
mit Query.FieldByName('***').Asstring
lese ich nur das letzte ausgewälte Feld.
Ich muss also den Zeiger zum nächsten positionieren und dann auslesen.
Kann mir hierbei einer helfen?


grayfox - Sa 21.06.03 14:57

hallo nonni!

sieh dir mal --> das [http://www.swissdelphicenter.ch/de/showcode.php?id=885] an. vielleicht findest da was passendes.

mfg, stefan


nonni - Sa 21.06.03 19:01

danke ich probiere das mal aus.


Nikola - Sa 21.06.03 20:13

Hallo,


Quelltext
1:
2:
3:
4:
5:
  Query.First;     // positioniert auf den ersten Datensatz der Datenmenge
  Query.Last;     // positioniert auf den letzten Datensatz der Datenmenge.
  Query.Next;     // positioniert auf den nächsten Datensatz der Datenmenge
  Query.Prior;     // positioniert auf den vorhergehenden Datensatz der Datenmenge.
  Query.MoveBy;(??)  // positioniert auf einen Datensatz relativ zum aktiven Datensatz in einer Datenmenge.


mfg
Nikola


nonni - So 22.06.03 09:30

@Nikola: ich möchte nicht direkt zum nächsten Satzt sondern zun nächsten in DBGrid markierten Satz.
Grayfox hat schon richtig verstanden.


nonni - So 22.06.03 23:09

kann mir einer sagen was hier falsch ist?

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  with dbGrid1.DataSource.DataSet do <--Kann mir einer sagen was hier passiert?
  begin
    First;
    DisableControls;
    try
      while not EOF do
      begin
        if (dbGrid1.SelectedRows.CurrentRowSelected = True) then
        begin
          Showmessage('Hallo'); <--nur zur probe
        end;
        Next;
      end;
    finally
      EnableControls;
    end;
  end;


Beim Kompilieren tritt kein Fehler auf aber wenn ich 2 spalten markiere und dann das Button drücke das dieses code ausführen soll dann komm ein Fehler der klasse EAccsesViolation auf.


grayfox - Mo 23.06.03 18:27

hallo nonni!

also bei mir funktionierts und es stürzt nix ab. der fehler liegt also nicht im programmcode.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
unit Mainprog;

interface

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

type
  TForm1 = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not table1.active then
    table1.open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  table1.close;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
  with dbGrid1.DataSource.DataSet do begin
    DisableControls;
    First;
    while not EOF do begin
      if dbGrid1.SelectedRows.CurrentRowSelected then
        Memo1.Lines.Add(IntToStr(RecNo));
      Next;
    end;
    First;
    EnableControls;
  end;
end;

end.


Zitat:

with dbGrid1.DataSource.DataSet do <--Kann mir einer sagen was hier passiert?


na was kann wohl der dataset nur sein, der über die datasource mit dem dbgrid verbunden ist?
richtig! dein angezeigter datensatz im grid.
auch beim programmieren darf man ein bisserl fantasie haben ;)

Zitat:

... wenn ich 2 spalten markiere ...


ich dachte immer, dass wir von datensätzen reden, die du markieren willst? spalten sind von oben nach unten und datensätze von links nach rechts. stimmts?

mfg, stefan