Toon posts:

[Delphi/MySql/FTP] Error code 421

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tool gemaakt die gegevens uit een mysql database haalt, vervolgens worden ze in een file gezet en via ftp geupload naar een unix machine. Dit gaan ook vice-versa. De tool draait 1 keer per uur. Om de zo veel tijd (willekeurig) geeft de ftp procedure een error melding (421 No data connection) dit is wel vaag omdat het niet altijd gebeurd.

De werking is ongeveer zo:

VAN MySql NAAR UNIX

selectie van nieuwe records -> loop record bewerking (record selecteren -> records opslaan -> status record veranderen) -> alle records opslaan als file -> file uploaden.

VAN UNIX NAAR MySql

file 1 downloaden -> mysql records in tabel1 updaten -> file op ftp deleten

file 2 downloaden -> mysql records in tabel2 updaten -> file op ftp deleten

De source van mijn sql procedure is zo

Delphi:
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
procedure TfrmSettings.FTPFiles(Action, Filename, LocalFilename: string);
var
  Reg : TRegistry;
  i, RecCount : integer;
  DirList : TStringList;
  Name, Line: String;
  IsDirectory: Boolean;
begin
  if not FTPClient.Connected then
  begin
    //Read settings from registry
    Reg := TRegistry.Create;
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKey('\Software\Solectron\Webtool',False);
    FTPClient.Host := Reg.ReadString('FTPHost');
    FTPClient.User := Reg.ReadString('FTPUser');
    FTPClient.Password := Reg.ReadString('FTPPass');
    FTPClient.Port := StrToInt(Reg.ReadString('FTPPort'));
    FTPClient.Connect;
    try
      FTPClient.ChangeDir(Reg.ReadString('FTPRemoteDir'));
    except
      Exit;
    end;
    Reg.Free;
  end;
  DirList := TStringList.Create;
  FTPClient.List(DirList);
  RecCount := DirList.Count;
  if Action = 'Upload' then
  begin
    if FileExists(LocalFilename) then
    begin
      FTPClient.TransferType := ftBinary;
      FTPClient.Put(LocalFilename, Filename, False);
    end;
  end
  else if Action = 'Download' then
  begin
    for i := 0 to RecCount - 1 do
    begin
      Line := DirList[i];
      Name := GetNameFromDirLine(Line, IsDirectory);
      if Name = Filename then
      begin
        FTPClient.TransferType := ftBinary;
        FTPClient.Get(Filename, LocalFilename, True);
        Downloaded := True;
        Exit;
      end;
    end;
  end
  else if Action = 'Delete' then
  begin
    for i := 0 to RecCount - 1 do
    begin
      Line := DirList[i];
      Name := GetNameFromDirLine(Line, IsDirectory);
      if Name = Filename then
      begin
        FTPClient.Delete(Filename);
      end;
    end;
  end;
  DirList.Free;
end;


Ik gebruik nu het indy ftp client component. Eerst had ik Fastnet maar die was helemaal drama. Weet iemand of ik iets fout doe, of heeft iemand een ID hoe ik het kan oplossen? _/-\o_ _/-\o_ _/-\o_

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:05
Ik zou zeggen: debug het programma eens, want eigenlijk kunnen wij daar ook niet zoveel over zeggen..... (Ik geloof niet dat er iemand de code zal doorworstelen).

Debug je programma eens en dan kun je zien op welke regel je die fout krijgt en eventueel merk je wel op waardoor die fout veroorzaakt wordt.

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Ikzelf heb maar weinig goede componenten voor FTP gevonden.
1 die ik gevonden heb die naar mijn idee goed werkt is Monster FTP. Voordeel van deze is dat de source ook goed te lezen is, zodat je er eventuele fouten er alsnog snel uit kunt halen

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
whoami schreef op 03 oktober 2002 @ 09:26:
Debug je programma eens en dan kun je zien op welke regel je die fout krijgt en eventueel merk je wel op waardoor die fout veroorzaakt wordt.
Dat zou ik zekers doen, als ik de fout kon genereren, maar dat lukt dus niet.