Ir para conteúdo
Fórum Script Brasil

robinhocne

Membros
  • Total de itens

    854
  • Registro em

  • Última visita

Tudo que robinhocne postou

  1. hum.....show Jhonas... muito obrigado...caiu como uma luva. Jhonas uma pergunta....vou executar uma rotina que percorre uma query, faço uso do sleep ou não ?
  2. Então Jhonas, eu abro a aplicação, ai tenho um processo e dentro dele tem essa thread, ai quando o processo terminar (thread) a aplicação deve fechar sozinha....
  3. ele dá erro [dcc32 Error] Unit2.pas(98): E2009 Incompatible types: 'Parameter lists differ'
  4. FinalizaRotina seria o que ? porque tentei criar procedure para fechar ou passei como nil, mas não foi.
  5. está meio confuso dele....vou procurar uns exemplos....
  6. Eu montei um processo atraves desse exemplo de Thread; procedure TForm2.Button2Click(Sender: TObject); var MyThread:TThread; begin ProgressBar1.Position := 0; ProgressBar2.Position := 0; MyThread := TThread.CreateAnonymousThread(procedure var i:integer; begin for i := 0 to 100 do begin TThread.Synchronize(MyThread, procedure begin ProgressBar1.Position := i; ProgressBar2.Position := i * 2; end); Sleep(100); end; end); MyThread.Start; end; porém agora o que eu preciso saber quando ela terminou para eu fechar a aplicação;
  7. Vlw Jhonas, mas fazendo do jeito que você passou no delphi 7 funciona e no Berlin não, mas desse jeito ai de cima funcionou...
  8. ela é String.... Executando esse comando no delphi 7 ele roda: procedure TForm1.Button1Click(Sender: TObject); var nrProcesso :String; i : integer; begin for i := 0 to 2 do begin nrProcesso := '5'; WinExec(pchar('E:\Robinho\Teste\B.exe '+ nrProcesso),SW_NORMAL); end; end; Exectuando esse comando no delphi Berlin ele dá erro de [dcc32 Error] Unit3.pas(35): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar' Mas o nrProcesso é String e mudando para PAnsiChar....ele não roda.... ixi, como roda no Berlin... :( Opa.... \o/ assim funcionou... WinExec(PAnsiChar(AnsiString('E:\Robinho\Teste\B.exe '+nrProcesso)),SW_NORMAL);
  9. Jhonas usando assim : nrProcesso := '5'; WinExec(PChar('E:\Projetos\teste\Win32\Debug\B.exe '+nrProcesso),SW_NORMAL); eu tenho erro [dcc32 Error] fA.pas(88): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar' mudando para PAnsiChar não dá erro, mas não executa, estou com o delphi Berlin, será que é por isso ?
  10. não executa também. pesquisando na internet, achei essa função; function TFuncoes.RunProcess(FileName: string; Params: string): Boolean; var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; Done: Boolean; begin FillChar(StartInfo,SizeOf(TStartupInfo),#0); FillChar(ProcInfo,SizeOf(TProcessInformation),#0); StartInfo.cb := SizeOf(TStartupInfo); try {$IFDEF UNICODE} if StringRefCount(FileName) = -1 then begin FileName := Copy(FileName, 1, MaxInt); end; {$ENDIF UNICODE} Done := CreateProcess(nil, PChar(FileName + ' ' + Params), nil, nil,False, CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, nil, nil, StartInfo, ProcInfo); Result := Done; finally CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; end; e executando assim : Executa('E:\Projetos\teste\Win32\Debug\B.exe '+nrProcesso,SW_SHOWNORMAL); ele funciona, mas não consigo executa vários ao mesmo tempo, tenho que fechar para abrir o proximo.
  11. saquei, mas estou tetando passar o parametro como variavel e ai ele não abre nada....
  12. consegui montar, executando pelo cmd está funcionando, mas quando vou chamar e passar o parametro não tá indo....fiz assim no programa A: dessa maneira funciona, mas eu preciso pegar esse valor "5" e passar como parametro, pois vou percorrer um query WinExec(PAnsiChar('E:\Projetos\Teste\Win32\Debug\B.exe "5"'), SW_SHOWNORMAL); dessa maneira ele nem abre.... nrProcesso := '5'; WinExec(PAnsiChar('E:\Projetos\teste\Win32\Debug\B.exe "'+nrProcesso+'"'), SW_SHOWNORMAL);
  13. Boa tarde, Eu tenho um aplicativo A que irá chamar outro aplicativo meu B, todos em delphi.... Quando o aplicativo A chamar o B eu preciso passar um parametro (String) para o parametro B e quando o parametro B abrir ele já pegar esse Parametro. tem como ? por parametro ?
  14. Dentro da Thread eu poderia colocar para abrir um programa externo ? não sabia disso.... Não vou aguardar retorno....era isso mesmo Jhonas, obrigado. Vlw Jhonas e Maciel....funcionando 100%
  15. Tenho uma rotina que vou executar um programa externo, porém não posso ficar esperando ele ser fechado para executar outro processo...como faço ?
  16. Está dando algum erro ? Está chamando o relatório como ?
  17. acho que dessa maneira mesmo que você falou no final vai ser melhor, vou criar um campo de data de integração(timestamp), caso não tenha essa data ele não foi enviando, nas tabelas eu já tenho a data de cadastro(timestamp) que é registrado quando o registro é inserido, então quando a data de cadastro for maior que a data de integração ele deve atualizar o registro....isso dá para separar os sql que vai retornar, nesse caso vou ver para gerar os insert's e update's em lotes que vai ser mais rapido.... De qualquer forma, vou tentar pedir ajuda da Embarcadero para descobrir como funciona esses componentes.... Jhonas agradeço a atenção, sei que o tópico tomou rumo diferente do iniciado, mas realmente estava desesperado em como solucionar....
  18. Obrigado Jhonas, o banco está no mesmo local, só em maquinas separadas, então internet e rede não será o problema, já queria utilizar algo pronto, mas a ideia é essa, tenho o banco local, só não queria trazer uns 1000 registros e dar um loop nele para verificar quem atualizou para atualizou ou inserir, mas de qualquer forma vou gravar no registro que ele foi atualizado, assim vou garantir mais a integridade. Então...fiz o seguinte, instalei o Tokyo e testei e dá os mesmos erros, utilizando o mode dmAlwaysInsert tanto o MoveSQLWriter e DataSetWriter funciona, porém quando estou usando o MoveSQLWriter e mudo o mode para dmAppendUpdate ele dá erro de [Firedac][Phys]-609.Key fields are not defined. e quando mudo para o DataSetWriter ele dá erro de: [Firedac][Comp][DM]-608.Undefined source field or expression for destination field [%s] Estive pesquisando sobre o dmAppendUpdate e ele: Para anexar e atualizar dados, o conjunto de dados de destino deve representar uma tabela existente e deve ter um índice definido que permita que os registros sejam correspondidos. Se os campos de índice primário forem usados para correspondência, os registros com campos de índice no dataset de destino que correspondem aos registros de campos de índice no conjunto de dados de origem são substituídos pelos dados de origem. Caso contrário, os dados do conjunto de dados de origem são anexados ao conjunto de dados de destino. Durante as operações de anexação e atualização, o BDE converte os dados em tipos e tamanhos de dados apropriados para o conjunto de dados de destino, se necessário. Criei os indices nas duas tabelas e mesmo assim está dando erro, creio que eu esteja fazendo alguma coisa errada, estou anexando o teste que estou fazendo com um banco firebird mesmo onde tento jogar dados da tabela bancos para etl_bancos só para teste. https://www.4shared.com/zip/JpKijal8ca/ETL.html CREATE TABLE BANCOS ( CODIGO INTEGER, BANCO VARCHAR(20) ) ; CREATE INDEX BANCOS_CODIGO_IDX ON BANCOS (CODIGO) ; CREATE TABLE ETL_BANCOS ( CODIGO INTEGER, NOME VARCHAR(20) ) ; CREATE INDEX ETL_BANCOS_CODIGO_IDX ON ETL_BANCOS (CODIGO) ; //criei o campo nome do banco diferente de proprosito para ver o mapeamento de campos trabalhando corretamente. Me ajuda, por favor.
  19. Ok, vou ver.... Jhonas....uma opnião por favor, qual seria o melhor metodo para sincronizar dados, na verdade vou consultar dados da base SQLServer e fazer insert/update no PostGre, agora saber quando atualizar ou inserir ai terei que consultar se o registro houve alteração a todo insert ?
  20. é estou sem saida....fazer o insert estou conseguindo mas o AppendUpdate não, ele dá erro de key fields are not defined, mas eu defini....
  21. Então....peguei uma tabela que é iguais de ambos lados....e mesmo assim tenho esse erro, veja.... http://prntscr.com/f71roo o batchmove mapeie http://prntscr.com/f71ryl e os campos coloquei na tabela http://prntscr.com/f71s7c e mesmo assim dá o erro Exceção de primeira chance em $ 76D3A9F2. Classe de exceção EFDException com mensagem '[FireDAC] [Comp] [DM] -608. Campo ou expressão de origem indefinida para o campo de destino [% s] '. no componente Table, voce pode escolher quais os campos da tabela voce quer ( duplo clique com o botão esquerdo no componente e adicione apenas os campos que voce precisa ) não tenho como fazer, porque não sei a tabela, consultando os campos vou saber o nome da tabela e por isso teria que criar em tempo de execução, mas estou tentando fazer com um memory table, que também cheguei com o mesmo erro acima;
  22. Jhonas me dá uma ajuda por favor..... Estou consultando a tabela com esse sql; instSql := 'SELECT column_name as nm_campo,data_type as ds_tipo '; instSql := instSql + ' FROM information_schema.columns '; instSql := instSql + ' WHERE table_name ='''+qryCamposDEPARA.FieldByName('nm_tabelapara').AsString+''''; instSql := instSql + ' order by column_name'; with dtmPSyncBack.qryPesquisar do begin Active := false; Close; sql.Clear; sql.add(instSql); open; end; while not dtmPSyncBack.qryPesquisar.Eof do begin with FDMemTable1 do begin FieldDefs.Add(dtmPSyncBack.qryPesquisar.FieldByName('nm_campo').AsString, qryCamposDEPARA.FieldByName('nm_tipopara').DataType, qryCamposDEPARA.FieldByName('nm_tipopara').Size, false); end; BatchMove.Mappings.Add; with BatchMove.Mappings do begin Items[i].SourceFieldName := dtmPSyncBack.qryPesquisar.FieldByName('nm_campo').AsString; Items[i].DestinationFieldName := dtmPSyncBack.qryPesquisar.FieldByName('nm_campo').AsString; end; i := i + 1; dtmPSyncBack.qryPesquisar.Next; end; dtmPSyncBack.qryPesquisar.close; FDMemTable1.Open; BatchMove.Execute(); Então quando executa o batchMove eu tenho esse erro ; First chance exception at $76D3A9F2. Exception class EFDException with message '[FireDAC][Comp][DM]-608. Undefined source field or expression for destination field [%s]'.
  23. Não seria isso Jhonas, vou explicar melhor... Estou criando um sistema de integração, então estou criando o dinamicamente algumas configurações, como são bancos diferentes e tabelas diferentes, faço um de para e nesse de para eu tenho o select das informações que ira trazer o banco a para o banco b, porém a tabela do banco b tem uns campos á mais que não são necessários. Para fazer todo esse processo estou usando o Firedac ETL com o delphi Berlin, onde quando consulto eu tenho esses dados da imagem, coloquei o grid só para ver os campos, o primeiro grid é os registros que será enviados para outra tabela pelo BatchMove, eu liguei o BatchMove com o BatchMoveDataSetWriter e ele liguei com um table. As setas do grid b são os campos que tem na tabela b e que não mando, eu não tenho como colocar um table para cada tabela porque são vários e para ficar dinamico. Se passo assim no table table.TableName := NOMEDATABELA; table.Open; ele traz todos os campos ...... ixi agora que percebi um problema, quando faço open ele traz os dados que estão na tabela, com isso pesando.... Jhonas....como faço pelo batchmove jogar os dados, porque o teste que tinha feito eu tinha colocado um table e quando executei o proprio BatchMove se encarregou de inserir e atualizar os dados, fazer a saida do BatchMoveDataSetWriter por uma query tem como ? esquece sobre pegar os campos da query, porque já via adiantar já que ao abrir a tabela ele lista tudo...
  24. então os dados estão num dataset também, mas preciso jogar para um table, para que meu wrtier do firedac etl saiba para quem jogar os dados.
×
×
  • Criar Novo...