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
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?
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?