co jest zle w shellexecute?

Odpowiedz Nowy wątek
2006-09-24 01:39

Rejestracja: 14 lat temu

Ostatnio: 2 lata temu

0
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

Pozostało 580 znaków

2006-09-24 09:04

Rejestracja: 14 lat temu

Ostatnio: 10 lat temu

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:

  1. przed wykonaniem procedury wykonać ChDir(AppPath) a w wywołaniu ShellExecute zamiast 5 parametru wstawić Pchar(MyPath)

lub

  1. przed wykonaniem procedury wykonać ChDir(MyPath) i w wywołaniu ShellExecute w 5 parametrze pozostawić Pchar(AppPath)

lub

  1. Za każdym razem dokonywać przypisania:
    Fz := MyPath + Sr.Name+',1,100'

i w wywołaniu ShellExecute w 5 parametrze pozostawić Pchar(AppPath)

lub

  1. W wywołaniu ShellExecute zamiast 3 parametru wstawić Pchar(AppPath+'MyApp.exe') a zamiast 5 parametru wstawić Pchar(MyPath)

M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage
morris#rarlab*com

Pozostało 580 znaków

2006-09-24 23:24

Rejestracja: 14 lat temu

Ostatnio: 2 lata temu

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]

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0