Entwickler-Ecke
Datenbanken - array problem
degabs - Di 18.03.08 20:53
Titel: array problem
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?:D
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 - 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
degabs - 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 - 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 - 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 ?
degabs - Di 18.03.08 22:09
| Zitat: |
| array[i]:= TTable1.FieldByName('Getraenke').FieldValues[i]; |
dann kommt der fehler?
aber wieso?
katjah - Di 18.03.08 22:16
probier mal so:
array[i]:= TTable1.FieldByName('Getraenke').AsString;
degabs - 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 - 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; |
degabs - Di 18.03.08 22:42
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 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 - Di 18.03.08 22:44
Schau nochmal mal meinen vorherigen Post an, ich habe den nochmal geändert.
degabs - Di 18.03.08 23:44
jetzt funzt es mit der schleife
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!