como controlar este processo ????
Pessoal Vejam só preciso ler um arquivo texto e gerar uma tabela ate ai beleza, o lance é este arquivo texto é a junção de vários outros arquivos que monto via .bat, sendo assim só posso começar a gerar minha tabela após ter o arquivo texto devidamente montado pelo .bat, o problema é minha aplicação não entende que o .bat ainda não terminou e já tenta montar a tabela então me dá msg de erro i/o32, ai vou clicando no meu botão que monta o arquivo ai de repente funciona, na verdade como faço pra aplicação esperar o .bat terminar coloquei esta linha de código porém ainda não resolveu
if Rgdepto.ItemIndex = 0 then //cuecas
begin
contar:=0;
while not fileexists(´L:\deptopv9.txt´) do begin
for i :=1 to 15000 do
Inc(contar);
end;
AssignFile (tfarquivo,´L:\deptopv9.txt´);
end;
Aqui escolho o .bat que será executado e mais pra baixo a montagem da tabela que apos excolher o radiogropu clico no botao montar arquivo
if Rgdepto.ItemIndex = 0 then
ShellExecute(Handle, ´Open´, ´L:\gera9txt.bat´, ´´, ´´, SW_hide )
else
if Rgdepto.ItemIndex = 1 then
ShellExecute(Handle, ´Open´, ´L:\gera4txt.bat´, ´´, ´´, SW_hide )
else
if Rgdepto.ItemIndex = 2 then
ShellExecute(Handle, ´Open´, ´L:\gera5txt.bat´, ´´, ´´, SW_hide )
else
if Rgdepto.ItemIndex = 3 then
ShellExecute(Handle, ´Open´, ´L:\geratxt.bat´, ´´, ´´, SW_hide )
else
raise Exception.Create(´Nenhum Departamento foi selecionado´);
apos a escolha do .bat vou pegar o nome do arquivo de acordo com a escolha e montar a tabela
:oops:
if Rgdepto.ItemIndex = 0 then //cuecas
begin
contar:=0;
while not fileexists(´L:\deptopv9.txt´) do begin
Inc(contar);
AssignFile (tfarquivo,´L:\deptopv9.txt´);
end;
if Rgdepto.ItemIndex = 1 then // lingeries
begin
contar:=0;
while not fileexists(´L:\deptopv4.txt´) do begin
Inc(contar);
end;
AssignFile (tfarquivo, ´L:\deptopv4.txt´);
end;
if Rgdepto.ItemIndex = 2 then // meias
begin
contar:=0;
while not fileexists(´L:\deptopv5.txt´) do begin
Inc(contar);
end;
AssignFile (tfarquivo, ´L:\deptopv5.txt´);
end;
if Rgdepto.ItemIndex = 3 then
begin
contar:=0;
while not fileexists(´L:\geralpve.txt´) do begin
Inc(contar);
StatusBar1.SimpleText := ´Gerando Planilha Aguarde´;
end;
AssignFile (tfarquivo, ´L:\geralpve.txt´);
end;
Reset (tfarquivo); //abre arq. para leitura
contador :=0;
While not eof(tfarquivo) do
begin
Readln(tfarquivo,strRegistro); //lê registros
// o primeiro é tipo 01 só pego o periodo inicial e final
if copy(strRegistro,1,2) = ´01´ then
begin
ShortDateFormat := ´yyyy/mm/dd´;
tipo:=copy(strRegistro,23,08);
tipo2:=copy(tipo,1,4)+´/´+copy(tipo,5,2)+´/´+copy(tipo,7,2);
dataini:=StrToDate(tipo2);
tipo:=copy(strRegistro,31,08);
tipo2:=copy(tipo,1,4)+´/´+copy(tipo,5,2)+´/´+copy(tipo,7,2);
datafin:=StrToDate(tipo2);
end;
if copy(strRegistro,1,2) = ´02´ then // somente registro tipo detalhe
begin
if StrToFloat(copy(strRegistro,102,15)) <> 0 then // vendas # zeros
begin
if StrToFloat(copy(strRegistro,118,15)) <> 0 then //Estoque zeros
begin
tblitemlojas.Insert;
if Rgdepto.ItemIndex = 2 then // meias
begin
contar:=0;
while not fileexists(´L:\deptopv5.txt´) do begin
Inc(contar);
end;
AssignFile (tfarquivo, ´L:\deptopv5.txt´);
Silvia Correa Felix Constant
if Rgdepto.ItemIndex = 0 then //cuecas
begin
contar:=0;
while not fileexists(´L:\deptopv9.txt´) do begin
for i :=1 to 15000 do
Inc(contar);
end;
AssignFile (tfarquivo,´L:\deptopv9.txt´);
end;
Aqui escolho o .bat que será executado e mais pra baixo a montagem da tabela que apos excolher o radiogropu clico no botao montar arquivo
if Rgdepto.ItemIndex = 0 then
ShellExecute(Handle, ´Open´, ´L:\gera9txt.bat´, ´´, ´´, SW_hide )
else
if Rgdepto.ItemIndex = 1 then
ShellExecute(Handle, ´Open´, ´L:\gera4txt.bat´, ´´, ´´, SW_hide )
else
if Rgdepto.ItemIndex = 2 then
ShellExecute(Handle, ´Open´, ´L:\gera5txt.bat´, ´´, ´´, SW_hide )
else
if Rgdepto.ItemIndex = 3 then
ShellExecute(Handle, ´Open´, ´L:\geratxt.bat´, ´´, ´´, SW_hide )
else
raise Exception.Create(´Nenhum Departamento foi selecionado´);
apos a escolha do .bat vou pegar o nome do arquivo de acordo com a escolha e montar a tabela
:oops:
if Rgdepto.ItemIndex = 0 then //cuecas
begin
contar:=0;
while not fileexists(´L:\deptopv9.txt´) do begin
Inc(contar);
AssignFile (tfarquivo,´L:\deptopv9.txt´);
end;
if Rgdepto.ItemIndex = 1 then // lingeries
begin
contar:=0;
while not fileexists(´L:\deptopv4.txt´) do begin
Inc(contar);
end;
AssignFile (tfarquivo, ´L:\deptopv4.txt´);
end;
if Rgdepto.ItemIndex = 2 then // meias
begin
contar:=0;
while not fileexists(´L:\deptopv5.txt´) do begin
Inc(contar);
end;
AssignFile (tfarquivo, ´L:\deptopv5.txt´);
end;
if Rgdepto.ItemIndex = 3 then
begin
contar:=0;
while not fileexists(´L:\geralpve.txt´) do begin
Inc(contar);
StatusBar1.SimpleText := ´Gerando Planilha Aguarde´;
end;
AssignFile (tfarquivo, ´L:\geralpve.txt´);
end;
Reset (tfarquivo); //abre arq. para leitura
contador :=0;
While not eof(tfarquivo) do
begin
Readln(tfarquivo,strRegistro); //lê registros
// o primeiro é tipo 01 só pego o periodo inicial e final
if copy(strRegistro,1,2) = ´01´ then
begin
ShortDateFormat := ´yyyy/mm/dd´;
tipo:=copy(strRegistro,23,08);
tipo2:=copy(tipo,1,4)+´/´+copy(tipo,5,2)+´/´+copy(tipo,7,2);
dataini:=StrToDate(tipo2);
tipo:=copy(strRegistro,31,08);
tipo2:=copy(tipo,1,4)+´/´+copy(tipo,5,2)+´/´+copy(tipo,7,2);
datafin:=StrToDate(tipo2);
end;
if copy(strRegistro,1,2) = ´02´ then // somente registro tipo detalhe
begin
if StrToFloat(copy(strRegistro,102,15)) <> 0 then // vendas # zeros
begin
if StrToFloat(copy(strRegistro,118,15)) <> 0 then //Estoque zeros
begin
tblitemlojas.Insert;
if Rgdepto.ItemIndex = 2 then // meias
begin
contar:=0;
while not fileexists(´L:\deptopv5.txt´) do begin
Inc(contar);
end;
AssignFile (tfarquivo, ´L:\deptopv5.txt´);
Silvia Correa Felix Constant
Silvia
Curtidas 0
Respostas
Tand
10/10/2003
Sylvia,
Acho que o melhor seria durante o processamento bat voce criar o arquivo com outro nome e então só depois de criado você daria um rename para o nome correto ai o Delphi só acharia o arquivo após criado.
Abraços,
Espero que ajude.
Alexandre :wink:
Acho que o melhor seria durante o processamento bat voce criar o arquivo com outro nome e então só depois de criado você daria um rename para o nome correto ai o Delphi só acharia o arquivo após criado.
Abraços,
Espero que ajude.
Alexandre :wink:
GOSTEI 0
Centopocento
10/10/2003
Silvia,
Vc trabalha com que banco? Se for o Interbase uma maneira muito mais rápida, segura e fácil para vc monta sua tabela é utiliza o EXTERNAL FILE.
Se não souber como funciona me contata:
edbasi@hotmail.com
T+
Edgar
Vc trabalha com que banco? Se for o Interbase uma maneira muito mais rápida, segura e fácil para vc monta sua tabela é utiliza o EXTERNAL FILE.
Se não souber como funciona me contata:
edbasi@hotmail.com
T+
Edgar
GOSTEI 0
Lidiane
10/10/2003
Silvia,
em uma menssagen anterior eu respondi como deveria fazer ;
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?p=60850&highlight=#60850[/url]
Mas acho que você implementou de maneira errada.
faça assim :
Só lembrando se o arquivo já existir o while vai passar direto ....se for possivel exclua o arquivo ?.txt antes de gerar um novo.
Só não entendo porque gerar arquivo txt com .bat ? :?:
Lidiane
em uma menssagen anterior eu respondi como deveria fazer ;
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?p=60850&highlight=#60850[/url]
Mas acho que você implementou de maneira errada.
faça assim :
StatusBar1.SimpleText := ´Gerando Planilha Aguarde´; if Rgdepto.ItemIndex = 0 then begin contar:=0; While not fileexists(´L:\deptopv9.txt´) do begin Inc(contar); if conta = 30000 then begin //espera um tempo se não achar sai MessageBox(Handle, ´Tempo limite foi alcançado.´, ´Errrrrrro.´, 16); exit; end; end; AssignFile (tfarquivo,´L:\deptopv9.txt´); end; if Rgdepto.ItemIndex = 1 then begin contar:=0; While not fileexists(´L:\deptopv4.txt´´) do begin Inc(contar); if conta = 30000 then begin //espera um tempo se não achar sai MessageBox(Handle, ´Tempo limite foi alcançado.´, ´Errrrrrro.´, 16); exit; end; end; AssignFile (tfarquivo,´L:\deptopv4.txt´´); end; if Rgdepto.ItemIndex = 2 then begin contar:=0; While not fileexists(´L:\deptopv5.txt´) do begin Inc(contar); if conta = 30000 then begin //espera um tempo se não achar sai MessageBox(Handle, ´Tempo limite foi alcançado.´, ´Errrrrrro.´, 16); exit; end; end; AssignFile (tfarquivo,´L:\deptopv5.txt´); end; if Rgdepto.ItemIndex = 3 then begin contar:=0; While not fileexists(´L:\geralpve.txt´) do begin Inc(contar); if conta = 30000 then begin //espera um tempo se não achar sai MessageBox(Handle, ´Tempo limite foi alcançado.´, ´Errrrrrro.´, 16); exit; end; end; AssignFile (tfarquivo,´L:\geralpve.txt´); end; end;
Só lembrando se o arquivo já existir o while vai passar direto ....se for possivel exclua o arquivo ?.txt antes de gerar um novo.
Só não entendo porque gerar arquivo txt com .bat ? :?:
Lidiane
GOSTEI 0
Vinicius2k
10/10/2003
Silvia,
essa procedure cria um processo e aguarda seu final... talvez lhe seja útil....
exemplo de aplicação : cria_processo(´CALC.EXE´,´C:\WINNT´);
espero ter ajudado...
essa procedure cria um processo e aguarda seu final... talvez lhe seja útil....
exemplo de aplicação : cria_processo(´CALC.EXE´,´C:\WINNT´);
procedure cria_processo(nome, path: string); var StartupInfo: Tstartupinfo; ProcessInfo: TprocessInformation; begin FillChar(StartupInfo,sizeof(TStartupInfo),0); StartupInfo.cb:=sizeof(TStartupInfo); if CreateProcess(nil, pchar(nome), nil, nil, false, normal_priority_class, nil, pchar(path), StartupInfo, ProcessInfo) then WaitForSingleObject (ProcessInfo.hprocess,infinite); end;
espero ter ajudado...
GOSTEI 0