Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehler im Code


D. Annies - So 16.08.09 09:15
Titel: Fehler im Code
Hi, Delpher,
warum meckert der Compiler bei diesem Code?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure Tform2.fuelle_listbox1f2Kla(sender:tobject);
var kb : string;
begin
  listbox1.Visible := false; listbox1.Clear;
  kb := 'x';
  dbgrid1.DataSource.DataSet.First;
  while not dbgrid1.DataSource.DataSet.Eof do
  begin
    if dbgrid1.DataSource.DataSet.fieldbyname['Klasse'].asstring[1] <> kb then //Mecker!
    begin
      listbox1.Items.Add(dbgrid1.DataSource.DataSet.fieldbyname['Klasse'].asstring[1]);
      kb := dbgrid1.DataSource.DataSet.fieldbyname['Klasse'].asstring[1];
    end;
    dbgrid1.DataSource.DataSet.next;
  end;
  //SetLbWidth(Listbox1); SetScrollWidth(listbox1);
  //listbox1.Height := listbox1.ItemHeight * anzkla + 20;
  listbox1.Visible := true;
end;


Die Fehlermeldung ist: Nicht genügend wirkliche Parameter, bzw. : 'Then' erwartet, aber Bezeichner 'asstring' gefunden.
Danke für Hilfe,
Detlef

P.S. Die eckige Klammer ist mir erst jetzt aufgefallen, scusi, Det


Jakob Schöttl - So 16.08.09 11:47

ich verstehs auch nicht, aber du könntest es mal so ausprobieren, und schaun wo dann der fehler auftaucht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var s: String;
    c: character;
//...
    s := dbgrid1.DataSource.DataSet.fieldbyname['Klasse'].asstring;
    c := s[1]
    if c <> kb then //Mecker!
//...

mal schaun was er dann sagt...


Marc. - So 16.08.09 15:59

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
P.S. Die eckige Klammer ist mir erst jetzt aufgefallen, scusi, Det


Delphi-Quelltext
 
9:
{ ... }
if dbgrid1.DataSource.DataSet.fieldbyname('Klasse').asstring[1] <> kb then

Damit solltest Du das Problem doch bereits selbst gelöst haben. :)

edit: Ah! Nun wird der Thread bei mir auch als abgehakt angezeigt. ;)


Jakob Schöttl - Mo 17.08.09 09:52

ach ja, ich wusste dass es bei DataSets auch irgendwas mit einem String als Indexer gab, aber das ist nicht Table1.FieldByName('Feldname'), sondern Table1.FieldValues['Feldname']