GlitterMedlem sedan juli 2003442 inlägg
jag använder dephi 7
Hur får man ut veckan som är nu?
är det inte
WeekOf(date);
isåfall hur konverterar man word till string?
inttostr funkar ju inte det blir inte fel i compilatorn men den klagar när man kör programmet...
'Access violation att address....'
akkeakkerMedlem sedan jan. 200329 inlägg
Jag vet inte vad du gör för fel men testa om detta funkar:
uses DateUtils
...
procedure TForm1.Button1Click(Sender: TObject);
var d: TDateTime;
w: Integer;
s: string;
begin
d := Now();
w := WeekOf(d);
s := IntToStr(w);
ShowMessage('Aktuellt veckonummer: ' + s);
end;
GlitterMedlem sedan juli 2003442 inlägg
ditt exempel funkade perfekt...
hittade felet men vet inte hur jag skall lösa det...
har komponenten från indy clients idFTP och det är den som inte vill använda now() eller date()
procedure TForm1.Button1Click(Sender: TObject);
var
d: TDateTime;
i, ar, vecka: integer;
mapp, filupp, filnamn: string;
begin
d := now();
ar := YearOf(d);
vecka := WeekOf(d);
mapp := inttostr(ar) + '_' + inttostr(vecka);
ShowMessage(mapp);
IdFTP1.Connect();
IdFTP1.ChangeDir(mapp);
IdFTP1.Put(fillupp, filnamn);
IdFTP1.Disconnect;
end;
får fel på
IdFTP1.Disconnect;
felmess: 'Access violation att address....'
akkeakkerMedlem sedan jan. 200329 inlägg
Kan nog inte hjälpa mycket mer då jag inte kan något alls om sockets, ftp osv. Det enda råd jag kan ge är att använda debuggern och sakta stega dig fram i koden och se vart det skiter sig.
GlitterMedlem sedan juli 2003442 inlägg
GlitterMedlem sedan juli 2003442 inlägg
ingen annan som vet hur man skall göra?
det verkar inte som det går att använda någon typ av input för jag testade att skriva
vecka : = 2004;
vecka := 23;
men det verkade inte som det hade någon betydelse...
Jag skall kolla om en mapp finns 2004_23 när jag kör ifen så blir det fel 'Access violation att address....'
fattar inte varför...
kan det vara en bugg i indys ftp client?
isåfall är det någon som vet någon annan bra ftp man kan använda ?
HardrockerMedlem sedan nov. 2003277 inlägg
Om jag har förstått dig rätt så får du ett fel när du försöker byta till en katalog som inte finns.
Om det inte finns någon funktion för att testa om en katalog finns på servern så får du lägga koden i ett try/except statement.
Kan tillägga att jag aldrig har använt mig av Indys ftpklient.
GlitterMedlem sedan juli 2003442 inlägg
altså så här...
fexists := false;
repeat
if mapp = list[i] then
begin
fexists := true;
end;
inc(i);
until (i = list.count-1) OR (fexists = true);
det är "if mapp = list then" som det blir fel på...
akkeakkerMedlem sedan jan. 200329 inlägg
Har du initierat i? Om inte så försöker du komma åt ett odefinierat objekt i list. Jag får denna kod att funka som kanske kan likna något som du har?
procedure TForm1.Button1Click(Sender: TObject);
var mapp: string;
i: Integer;
list: TStringList;
fexists: boolean;
begin
list := TStringList.Create();
list.AddStrings(memo1.Lines);
fexists := false;
mapp := 'repeat';
i := 0;
repeat
if mapp = list[i] then
begin
fexists := true;
end;
inc(i);
until (i = list.count - 1) or (fexists = true);
ShowMessage(IntToStr(i));
end;
GlitterMedlem sedan juli 2003442 inlägg
Tackar hade redan löst det men det var
list := TStringList.Create();
som jag hade glömt...
varför skall man göra så ?
jag menar man har ju redan dimat den som TStrings...
är det någon skilnad på TStrings & TStringList?
akkeakkerMedlem sedan jan. 200329 inlägg
Den raden måste du ha pga att alla objekt måste skapas innan de kan användas. Koden jag gav dig är inte så bra då jag inte frigör objektet, vilket oxå måste göras för alla abjekt som man skapa och som man inte tilldelar någon ägare.
Här är ett bättre förslag där jag frigör objektet list samt använder objektet i ett try-finally block. Nyttan med det är att även om något inträffar i try delen så frigörs alltid objektet list och jag låser inte upp minnet ifall det skulle bli knas. :)
procedure TForm1.Button1Click(Sender: TObject);
var mapp: string;
i: Integer;
list: TStringList;
fexists: boolean;
begin
list := TStringList.Create();
try
list.AddStrings(memo1.Lines);
fexists := false;
mapp := 'repeat';
i := 0;
repeat
if mapp = list[i] then
begin
fexists := true;
end;
inc(i);
until (i = list.count - 1) or (fexists = true);
finally
list.Free;
list := nil;
end;
ShowMessage(IntToStr(i));
end;
GlitterMedlem sedan juli 2003442 inlägg