Verwende statt dem Chr direkt AnsiChar
Chr ist bei dir ja WideChar und da kann es mit dem Byte=AnsiChar-Größe probleme geben.
Die Nummern haben ja keine Größenangabe (Byte), weswegen es dort wohl funktioniert.
PS: GetNextNummer? Denglich ist immer schön.
Delphi-Quellcode:
GetNextNumber(var sNumber: AnsiString);
// oder
GibNächsteNummer(var sNummer: AnsiString);
// oder besser noch
MakeNextNumber(var sNumber: AnsiString);
CreateNextNumber(var sNumber: AnsiString);
(Ja, mit Ä funktioniert es in aktuelleren Delphi-Versionen
)
Aber warum überhaupt erst hin-und-herkonvertieren?
Delphi-Quellcode:
procedure GetNextNumber(
var sNumber: AnsiString);
var xLetter: AnsiChar;
i: Integer;
s: AnsiString;
begin
i:=Length(sNumber);
while i>0
do
begin
xLetter:=sNumber[i];
case xLetter
of
#57:
begin
sNumber[i]:=#65;
break;
end;
#90:
sNumber[i]:=#48;
else
begin
sNumber[i]:=xLetter;
break;
end;
end;
// case
dec(i);
end;
// for
s:='
';
i:=0;
while i<Length(sNummer)
do
begin
insert('
0',s,1);
inc(i);
end;
end;
ich vermute mal bei dir fehlt auch noch ein +1
Delphi-Quellcode:
procedure GetNextNumber(
var sNumber: AnsiString);
var i: Integer;
s: AnsiString;
begin
i:=Length(sNumber);
while i>0
do
begin
case sNumber[i]
of
'
9':
begin
sNumber[i]:='
A';
break;
end;
'
Z':
sNumber[i]:='
0';
else
begin
sNumber[i]:=AnsiChar(Ord(sNumber[i]) + 1);
break;
end;
end;
// case
dec(i);
end;
// for
s:='
';
i:=0;
while i<Length(sNumber)
do
begin
insert('
0',s,1);
inc(i);
end;
end;
PS: Passiert auch noch irgendwas mit dem "s"?