| 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 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   
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 
 
 | 
 |