Autor Beitrag
degabs
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 20:53 
hi, habe folgendes problem:
ich hab ne datenbank, in der das feld "Getraenk" enthalten ist.
auf dieses will ich zugreifen, also mit TTable1.FieldByName('Getraenke').
so nun hab ich da 2 einträge, der erste ist "jägermeister" und der 2te "redbull".
nun will ich diese 2 einträge in einen array packen.
der array soll dann in eine ListBox, natürlich die einzelnen einträge.
achte mir das eigentlich so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
....
eintraege:= TTable.RecordCount;
try
for i:= 1 to eintraege do
array[i]:= TTable1.FieldByName('Getraenke').FieldValues[i];
lauswahl.Items.Add(inttostr(i) + array[i]);
i:=i + 1
except
else
lauswahl.Items.Add('Keine Rezepte vorhanden');

end;
...

dann kommt immer so ne fehlermelung "keine zugriffberechtung für die adresse..."
und in der Listbox steht Keine Rezepte vorhanden.
wo ist der fehler?:D
hab schon bei der delphi hilfe und so gesucht, gegooglet aber nichts gefunden was mir weitergeholfen hätte.
danke schonmal
mfg

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
katjah
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win10 65bit
D7, D2005
BeitragVerfasst: Di 18.03.08 21:13 
Hi,

1. wozu soll das überhaupt in ein Array ? Man könnte es ja auch direkt in die Listbox schreiben.
2. Hast Du überhaupt ein array deklariert ?
bsp. var ary : array of string;
3. müsstest Du in Deinem Quelltext die Variable (bsp:ary) referenzieren und nicht das Schlüsselwort array.
4. muß es vermutlich heißen: for i:=0 to eintraege - 1
5. müssen die Anweisungen in begin..end eingeschlossen werden, wenn beide ausgeführt werden sollen.
ausblenden Quelltext
1:
2:
3:
4:
5:
for i:= 1 to eintraege do
begin
  array[i]:= TTable1.FieldByName('Getraenke').FieldValues[i];
  lauswahl.Items.Add(inttostr(i) + array[i]);
end;

6. was soll diese Anweisung bewirken: i:=i + 1

_________________
Gruß Katja
degabs Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 21:20 
1. weil ich das immer so mache
2. ja habe ich und auch gleich 3 is mir klar dass is nur ein beispiel
4. ob ich i 0 setze und eins abziehe oder ob ich i 1 setze und nix abziehe is meineswissen das selbe
5. kannst du recht haben, danke^^
6. dass es i um eins raufzählt damit der nächste datensatz kommt?
degabs Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 21:22 
wenn man das so macht, soweit war ich vorher auch schon^^, kommt
[Fehler] Unit1.pas(81): Undefinierter Bezeichner: 'FieldValues'
an was liegt das??
katjah
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win10 65bit
D7, D2005
BeitragVerfasst: Di 18.03.08 21:52 
Hi,

Zitat:
1. weil ich das immer so mache

das ist Speicherplatzverschwendung.

Zitat:
4. ob ich i 0 setze und eins abziehe oder ob ich i 1 setze und nix abziehe is meineswissen das selbe

In diesem Fall nicht, da die Indizierung von Tabellenfeldern bei 0 anfängt. D.h. den ersten Satz/das erste Feld bekommst Du nie und die Meldung "keine zugriffberechtung für die adresse..." kommt vermutlich daher, daß Du um ein Feld zu weit greifst.

Zitat:
wenn man das so macht, soweit war ich vorher auch schon^^, kommt
[Fehler] Unit1.pas(81): Undefinierter Bezeichner: 'FieldValues'
an was liegt das??

Wenn man was macht ?

_________________
Gruß Katja
degabs Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 22:09 
Zitat:
array[i]:= TTable1.FieldByName('Getraenke').FieldValues[i];

dann kommt der fehler?
aber wieso?
katjah
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win10 65bit
D7, D2005
BeitragVerfasst: Di 18.03.08 22:16 
probier mal so:

array[i]:= TTable1.FieldByName('Getraenke').AsString;

_________________
Gruß Katja
degabs Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 22:30 
das geht, dann liest es aber ja nur immer 1 eintrag aus!
es soll aber jeden eintrag der spalte auslesen
und dann dem array zuordnen.
also array[0] = eintrag0
array[1] = eintrag1
also muss da unbedint das .FieldValues rein:D

anderst gefragt, wie würdest du vorschlagen es ohne array zu machen?
danke
mfg
katjah
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win10 65bit
D7, D2005
BeitragVerfasst: Di 18.03.08 22:37 
Poste doch bitte mal den kompletten Code, den Du bis jetzt hast.

Auszug zum Thema FieldValues aus der Delphi-Hilfe
Zitat:
Die Eigenschaft FieldValues ermöglicht den Zugriff auf alle Feldwerte des aktuellen Datensatzes der Datenmenge.


Du wirst wohl mit einer Schleife alle Datensätze der Tabelle durchlaufen müssen. Stichworte TTable.First, .next usw

auch aus der OH

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);

var
  i: Integer;
begin
  with ProgressBar1 do
  begin
    Min := 0;
    Max := Customers.RecordCount;
    Customers.First;
    for i := Min to Max do
    begin
      Position := i;
      Customers.Next;
      // Operationen mit aktuellem Datensatz durchführen
    end;
  end;
end;

_________________
Gruß Katja


Zuletzt bearbeitet von katjah am Di 18.03.08 22:43, insgesamt 1-mal bearbeitet
degabs Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 22:42 
ausblenden volle Höhe 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:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, DBCtrls, Menus, Unit2, Mask, Db, DBTables;

type
  TForm1 = class(TForm)
    eeingabe: TEdit;
    bsuchen: TButton;
    lauswahl: TListBox;
    bende: TButton;
    ltext: TLabel;
    mm: TMainMenu;
    rsuchen: TMenuItem;
    rhinzu: TMenuItem;
    dbgetraenk: TDBEdit;
    dbprozent: TDBEdit;
    dbrezept: TDBMemo;
    ttable: TTable;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    procedure bsuchenClick(Sender: TObject);
    procedure lauswahlClick(Sender: TObject);
    procedure bendeClick(Sender: TObject);
    procedure verbergen(Sender: TObject);
    procedure rhinzuClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  tt: String;
  i: Integer;


implementation

{$R *.DFM}

procedure TForm1.bsuchenClick(Sender: TObject);
begin
if ttable.Locate('Getraenk', eeingabe.text, [loCaseInsensitive]) then
   begin
     lauswahl.Clear;
     tt:=',,,';
     lauswahl.Items.Add(tt);
     end
else
  ShowMessage('Nichts gefunden...');
end;

procedure TForm1.lauswahlClick(Sender: TObject);
begin
if lauswahl.Selected[0then
ltext.caption:='...';
end;

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

procedure TForm1.verbergen(Sender: TObject);
var eintraege: integer;
    arr : array of String;

begin
SetLength (arr, ttable.RecordCount);
dbgetraenk.Hide;
dbprozent.Hide;
dbrezept.Hide;
DBNavigator1.Hide;
eintraege:= ttable.RecordCount;
try
for i:= 0 to eintraege-1 do
begin
arr[i]:= ttable.FieldByName('Getraenk').AsString;
lauswahl.Items.Add(inttostr(i) + arr[i]);
end;
except
else
lauswahl.Items.Add('Keine Rezepte vorhanden');

end;
end;

procedure TForm1.rhinzuClick(Sender: TObject);
begin
eeingabe.Hide;
bsuchen.Hide;
lauswahl.Hide;
ltext.Hide;
dbgetraenk.Show;
dbprozent.Show;
dbrezept.Show;
DBNavigator1.Show;
end;

end.


wobei ja diese zeile:
arr[i]:= ttable.FieldByName('Getraenk').AsString;
die problemzeile ist, weil ich nicht weis was da hin gehört....
katjah
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win10 65bit
D7, D2005
BeitragVerfasst: Di 18.03.08 22:44 
Schau nochmal mal meinen vorherigen Post an, ich habe den nochmal geändert.

_________________
Gruß Katja
degabs Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 18.03.08 23:44 
jetzt funzt es mit der schleife