Ronaldo Lanhellas Postado Julho 30, 2010 Denunciar Share Postado Julho 30, 2010 (editado) bom estou com o seguinte comando : WinExec('cmd /c net use Y: '+DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value, SW_ShowNormal);porém quando vou compilar tenho o seguinte erro: [DCC Error] uFrmPrincipal.pas(99): E2010 Incompatible types: 'Variant' and 'PAnsiChar'Então tentei por assim:WinExec(PAnsiChar('cmd /c net use Y: '+DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value), SW_ShowNormal);mais ele da invalid typecasto que fazer ? Editado Julho 30, 2010 por Ronaldo Lanhellas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 30, 2010 Denunciar Share Postado Julho 30, 2010 exemplo usando o PChar e o PAnsiCharwinexec(PChar ('c:\windows\system32\mspaint.exe "c:\imagem.jpg"'),sw_show);winexec(PAnsiChar('c:\windows\system32\mspaint.exe "c:\imagem.jpg"'),sw_show);no seu caso tenteWinExec('cmd /c net use Y: '+PAnsiChar(DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value), SW_ShowNormal);ou WinExec(PAnsiChar('cmd /c net use Y: ')+PAnsiChar(DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value), SW_ShowNormal);abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Julho 30, 2010 Autor Denunciar Share Postado Julho 30, 2010 tentei os dois e meu deu INVALID TYPECAST Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 30, 2010 Denunciar Share Postado Julho 30, 2010 então tente substituir o valor do banco de dados e veja o que acontece WinExec('cmd /c net use Y: '+PAnsiChar('caminho para foto'), SW_ShowNormal);ou WinExec('cmd /c net use Y: '+ 'caminho para foto', SW_ShowNormal);voce deve ir testanto de todas as maneiras para poder achar o problemaabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Julho 30, 2010 Autor Denunciar Share Postado Julho 30, 2010 eu uso varchar de 100 no BD , para qual eu deveria substituir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 30, 2010 Denunciar Share Postado Julho 30, 2010 coloque qualquer caminho que esteja no campo 'PATH_FOTOS' e faça o testeabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Julho 30, 2010 Autor Denunciar Share Postado Julho 30, 2010 sim se eu por o caminho funciona, mais se eu por a referencia, no caso o Ds.DataSet.FieldByName('PATH_FOTOS').Value não funciona Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 30, 2010 Denunciar Share Postado Julho 30, 2010 veja que voce usouDataConfigs.DataSet.FieldByName('PATH_FOTOS').ValueagoraDs.DataSet.FieldByName('PATH_FOTOS').Value voce tem que verificar se realmente existe um valor para ser passado abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Julho 30, 2010 Autor Denunciar Share Postado Julho 30, 2010 desculpa escrevi errado é o : DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value , é porque uso mais de 1 DataSourte no meu sistema e escrevi errado no post :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 2, 2010 Denunciar Share Postado Agosto 2, 2010 Se o seu campo é Varchar então faz assim que vai dar certo:WinExec(pChar('cmd /c net use Y: '+ DataConfigs.DataSet.FieldByName('PATH_FOTOS').Text), SW_ShowNormal);Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 2, 2010 Autor Denunciar Share Postado Agosto 2, 2010 coloquei como você falou e deu o seguinte erro:[DCC Error] uFrmPrincipal.pas(99): E2010 Incompatible types: 'Char' and 'AnsiChar' Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 2, 2010 Denunciar Share Postado Agosto 2, 2010 Então você vai ter que colocar o seu ClientDataSet e não o seu datasource.dataset...se o seu cds chama CdsTeste você tem que usar ele, não importa quantos datasources você usaWinExec(PChar('cmd /c net use Y: '+ CdsTeste.FieldByName('PATH_FOTOS').Text), SW_ShowNormal); ou WinExec(PAnsiChar('cmd /c net use Y: '+ CdsTeste.FieldByName('PATH_FOTOS').Text), SW_ShowNormal);Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 3, 2010 Autor Denunciar Share Postado Agosto 3, 2010 WinExec(PAnsiChar('cmd /c net use Y: '+ CdsTeste.FieldByName('PATH_FOTOS').Text), SW_ShowNormal); executa sem erro, porém não faz nada, creio eu que seja .Value em vez de .text, mais se eu por .Value da erro. WinExec(PChar('cmd /c net use Y: '+ CdsTeste.FieldByName('PATH_FOTOS').Text), SW_ShowNormal);Não executa, da erro (diferentes tipos AnsiChar e Char) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2010 Denunciar Share Postado Agosto 3, 2010 Então muda isso de vez, coloca assim que creio que vai funcionar:WinExec(PAnsiChar('cmd /c net use Y: '+ CdsTeste.FieldByName('PATH_FOTOS').AsString), SW_ShowNormal);Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 3, 2010 Autor Denunciar Share Postado Agosto 3, 2010 erro não deu mais não aconteceu nada, veja como ficou meu codigo :WinExec(PAnsiChar('cmd /c net use S: '+ DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString), SW_ShowNormal); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2010 Denunciar Share Postado Agosto 3, 2010 Amigo, o q você pode tentar fazer é colocar um botão no form e tentar verificar se tem valor:ShowMessage(DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString);Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 3, 2010 Autor Denunciar Share Postado Agosto 3, 2010 (editado) dei um DataConfigs.DataSet.Open; e logo após coloquei seu comando em um botãoShowMessage(DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString);mostrou normalmente o caminho.. Editado Agosto 3, 2010 por Ronaldo Lanhellas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2010 Denunciar Share Postado Agosto 3, 2010 Certo então faz a mesma coisa com o WinExecDataConfigs.DataSet.Open; WinExec(PAnsiChar('cmd /c net use S: '+ DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString), SW_ShowNormal);Outra coisa, que comando é esse que você está querendo fazer??? net use S:... o que isso faz?Abraços--------------------------------------Edit: Já saquei, você tá querendo mapear uma unidade de rede! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 4, 2010 Denunciar Share Postado Agosto 4, 2010 Ronaldo Lanhellas, experimente algo assim:procedure .... var CommandLine :String; begin DataConfigs.DataSet.Open; ... // posiciona no registro desejado CommandLine := Format('cmd /c net use S: %s', [DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString]); WinExec(PAnsiChar(CommandLine), SW_ShowNormal); ... // faça qualquer outra coisa que necessite end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 4, 2010 Autor Denunciar Share Postado Agosto 4, 2010 ficou assimprocedure TFrmPrincipal.BitBtn1Click(Sender: TObject); var CommandLine :String; begin DataConfigs.DataSet.Open; // posiciona no registro desejado CommandLine := Format('cmd /c net use S: %s', [DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString]); WinExec(PAnsiChar(CommandLine), SW_ShowNormal); // faça qualquer outra coisa que necessite end;fiz um botão com o codigo acima, mais clicando nele não acontece nada, isto é, não mapeia a unidade de rede que eu quero Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 4, 2010 Denunciar Share Postado Agosto 4, 2010 Aparentemente, apesar de usar SW_ShowNormal para que a janela do terminal seja mostrada, ela está sendo fechada e você não tem como avaliar o que está ocorrendo. Experimente remover o "/C" e veja se a janela do terminal fica ativa para você observar qualquer mensagem de erro. (link sobre os parâmetros para cmd).Pode estar ocorrendo erro, no caso de o string do path ser longo, com espaços. Nestes casos, você deveria colocar o path entre aspas: CommandLine := Format(Format('cmd /c net use S: "%s"', [DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString]);Experimente.De qualquer modo, em se tratando de aplicação windows, eu acho que seria mais conveniente utilizar a API do windows para realizar o mapeamento. Há funções para redeVeja dois exemplos: simples e outro mais completo (onde server deve ser entendido como o nome do computador compartilha a pasta a ser mapeada; e a senha é no caso de ser necessária para a conexão, quando não é aberta a todos usuário). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jaumDoDelphi Postado Agosto 4, 2010 Denunciar Share Postado Agosto 4, 2010 Ola Ronaldo, Primeiro gostaria de saber qual a versão do Delphi?se for 2009/2010 você pode tentar desta forma. WinExec(PAnsiChar(AnsiString(VARIALVEL)),0);tb seria mais facil você separar o COMMAND LINE numa variavel.varVARIAVEL : string;VARIAVEL := 'cmd /c net use X: '+ CdsTeste.FieldByName('PATH_FOTOS').AsString;e boa sorte! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 4, 2010 Autor Denunciar Share Postado Agosto 4, 2010 (editado) uso o delphi 2010, tentei o seguinte comando :procedure TFrmPrincipal.BitBtn1Click(Sender: TObject); var CommandLine :String; begin CommandLine :='cmd /c net use S: '+DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString; WinExec(PAnsiChar(AnsiString(CommandLine)),0); end;e não acontece nada ao clicar no botãoEm resposta ao Micheus, tirei o "/C" e não mostrou nenhum mensagem de erro !PS: A unica coisa que eu quero fazer é mapear uma unidade de rede baseada em um caminho que tenho no meu banco de dados, apenas isso, se houve outra forma de fazer isso, diga-me porfavor Editado Agosto 4, 2010 por Ronaldo Lanhellas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jaumDoDelphi Postado Agosto 4, 2010 Denunciar Share Postado Agosto 4, 2010 Sim! mas se for só para mapear uma Unidade da REDEporque você n cria um arquivo "BAT"funciona em winXp,Vista e 7.E se você for mapear uma unidade você só faz isso 1 vez na vidaa não ser que você Formate o PC ou n deixe salvo para o prox. LOGON! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 4, 2010 Denunciar Share Postado Agosto 4, 2010 (editado) Ronaldo Lanhellas, dei uma olhada em minhas coisas em casa. Agora vai (já testei aqui)Reescreva ela usando ShellExecute (já postei sobre ele antes) que é o mais adequado. WinExec é para as versões antigas do Windos (98 para trás se não me engano).Voce precisa acrescentar à cláusula uses a unit ShellAPICommandLine := Format('/c net use S: %s', [DataConfigs.DataSet.FieldByName('PATH_FOTOS').AsString]); ShellExecute(0, nil, PChar('cmd.exe'), PChar(CommandLine), nil, SW_SHOWNORMAL);p.s.: Talvez em algum momento você precise "desmapear", ou pelo menos, verificar se já não existe o mapeamento - não esqueça disto. Editado Agosto 4, 2010 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ronaldo Lanhellas Postado Agosto 5, 2010 Autor Denunciar Share Postado Agosto 5, 2010 (editado) dei mais um Dataset.open , fica um tempinho na tela do DOS depois some, e não mapeia a unidade q eu queroagora pelo menos aparece a tela do DOS, mais ainda assim não fez nada :(CONSEGUI .. GRAÇAS A DEUS E A VOCÊS DEPOIS DE UNS 5 DIAS DE LUTA .. uashduhamuito obrigado mesmo Editado Agosto 5, 2010 por Ronaldo Lanhellas Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ronaldo Lanhellas
bom estou com o seguinte comando :
WinExec('cmd /c net use Y: '+DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value, SW_ShowNormal);
porém quando vou compilar tenho o seguinte erro: [DCC Error] uFrmPrincipal.pas(99): E2010 Incompatible types: 'Variant' and 'PAnsiChar'
Então tentei por assim:
WinExec(PAnsiChar('cmd /c net use Y: '+DataConfigs.DataSet.FieldByName('PATH_FOTOS').Value), SW_ShowNormal);
mais ele da invalid typecast
o que fazer ?
Editado por Ronaldo LanhellasLink para o comentário
Compartilhar em outros sites
25 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.