| Autor | Beitrag | 
| degabs Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: 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:
 		                       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?   hab schon bei der delphi hilfe und so gesucht, gegooglet aber nichts gefunden was mir weitergeholfen hätte.
 danke schonmal
 mfg
Moderiert von  Christian S.: Delphi-Tags hinzugefügt | 
|  | 
| katjah 
          Beiträge: 21
 
 Win10 65bit
 D7, D2005
 
 | 
Verfasst: 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.
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 
 | for i:= 1 to eintraege dobegin
 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  Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: 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  Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: 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 
          Beiträge: 21
 
 Win10 65bit
 D7, D2005
 
 | 
Verfasst: 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  Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: Di 18.03.08 22:09 
 
	  | Zitat: |  	  | array[i]:= TTable1.FieldByName('Getraenke').FieldValues[i]; | 
 dann kommt der fehler?
 aber wieso? | 
|  | 
| katjah 
          Beiträge: 21
 
 Win10 65bit
 D7, D2005
 
 | 
Verfasst: Di 18.03.08 22:16 
 
probier mal so:
 array[i]:= TTable1.FieldByName('Getraenke').AsString;
 _________________ Gruß Katja
 | 
|  | 
| degabs  Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: 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 
          Beiträge: 21
 
 Win10 65bit
 D7, D2005
 
 | 
Verfasst: 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
 		                       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  Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: Di 18.03.08 22:42 
 
												| 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
 
 public
 
 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[0] then
 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 
          Beiträge: 21
 
 Win10 65bit
 D7, D2005
 
 | 
Verfasst: Di 18.03.08 22:44 
 
Schau nochmal mal meinen vorherigen Post an, ich habe den nochmal geändert. _________________ Gruß Katja
 | 
|  | 
| degabs  Hält's aus hier
 Beiträge: 7
 
 
 
 
 | 
Verfasst: Di 18.03.08 23:44 
 
jetzt funzt es mit der schleife | 
|  |