Czy ktos wie dlaczego ten kod :
Private Sub Polecenie7_Click()
Dim MyPath As String
Dim AppPath As String
AppPath = "C:\Program Files\katalog"
MyPath = "C:\Mojfolder"
Set fs = Application.FileSearch
With fs
.LookIn = MyPath
.filename = "*.dat"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
FZ = .FoundFiles(i)
Fzf = AppPath & "\Myapp.exe" & Space(1) & FZ & ",1,100"
RetVal = Shell(Fzf, 1)
Debug.Print "RetVal="; RetVal; ", Fzf="; Fzf; Now
Next i
Else
MsgBox "Brak plikow do otworzenia"
End If
End With
MsgBox "Zakonczone"
End Sub
w MS Access dziala bez zarzutu a w delphi5 ten ponizej otwiera tylko MyApp.exe ignorujac FZ.dat
program Retvalapp;
{$APPTYPE CONSOLE}
uses
ShellAPI,Windows,SysUtils;
const
AppPath = 'C:\Program Files\katalog';
MyPath = 'C:\Mojfolder';
var
Sr: TSearchRec;
Found : Integer;
ReturnValue: integer;
fz:string;
begin
Found := FindFirst(MyPath + '*.dat', faAnyFile - faDirectory, Sr);
while Found = 0 do
begin
Fz:= Sr.Name+',1,100';
ReturnValue := ShellExecute(0, 'open', Pchar('MyApp.exe') ,Pchar(fz), Pchar(AppPath), sw_show);
Writeln('ReturnValue:', ReturnValue, 'Fz:', Fz);
Found := FindNext(Sr);
end;
FindClose(Sr);
Writeln('Zakonczono');
end.
Jak to trzeba by zrobic zeby dzialalo w delphi. Dzialanie tego polegac ma na tym ze program MyApp.exe wykonuje obliczenia na danych ktore sa zawarte w pliku *.dat (Dane dla roznych grup w odzielnym pliku). Program sie otwiera juz z podlozonymi danymi, wykonuje obliczenia, zapisuje wynik i sie zamyka.Szuka nastepnego pliku z danymi wczytuje je sobie, oblicza, zapisuje i sie zamyka i tak az wykona to na wszystkich plikach zawartych w katalogu MyPath.
Gdyby ktos wiedzial jak to zrobic prosze o pomoc
0
0
Dlatego, że w Accessie .FoundFiles(i) zawiera pełną ścieżkę do pliku, a w Delphi SR.Name zawiera tylko nazwę pliku.
W Accessie nastepuje wywołanie:
AppPath & "\Myapp.exe" & Space(1) & FZ & ",1,100"
czyli
C:\Program Files\katalog\MyApp.exe C:\Mojfolder\pierwszyplik.dat,1,100
a w Delphi
MyApp.exe [w katalogu AppPath] SR.Name + ',1,100'
czyli
C:\Program Files\katalog\MyApp.exe pierwszyplik.dat,1,100
Jest kilka rozwiązań tego problemu:
- przed wykonaniem procedury wykonać ChDir(AppPath) a w wywołaniu ShellExecute zamiast 5 parametru wstawić Pchar(MyPath)
lub
- przed wykonaniem procedury wykonać ChDir(MyPath) i w wywołaniu ShellExecute w 5 parametrze pozostawić Pchar(AppPath)
lub
- Za każdym razem dokonywać przypisania:
Fz := MyPath + Sr.Name+',1,100'
i w wywołaniu ShellExecute w 5 parametrze pozostawić Pchar(AppPath)
lub
- W wywołaniu ShellExecute zamiast 3 parametru wstawić Pchar(AppPath+'MyApp.exe') a zamiast 5 parametru wstawić Pchar(MyPath)
0
Dziękuje Morris za cenne wskazówki.Powinno działac ale jakoś nie działa albo odporne jest moje delphi na shellexecute albo Myapp albo ja na wiedzę [???] [wstyd]