gleistoncardoso Postado Setembro 4, 2007 Denunciar Share Postado Setembro 4, 2007 Utilizo o comando abaixo para abrir um arquivo do word que tem uma mala direta buscando os dados da tabela paradox:procedure Tfrmclientes.btimprimirClick(Sender: TObject);begin if tabelas.tbclientesTipocontrato.Text = 'Àrea Lazer' then begin ShellExecute(0,'open','C:\eventos\contratos\contratoarea.doc',nil,nil,SW_SHOWNORMAL); end;...No word 2003 funciona normalmente, fiz uma atualização para word 2007 e quando vou abrir acusa: "Erro, a tabela externa não está no formato esperado."Dai pede para que eu localize o arquivo de origem dos dados, mas mesmo localizando a tabela clientes.db ele continua dando erro.O que pode ser???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2007 Denunciar Share Postado Setembro 5, 2007 Este erro acontece devido a atualização que foi feita em cima do word 2003. para solucionar deve-se desinstalar o microsoft office e instalar a nova versão. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --gleistoncardoso -- Postado Setembro 6, 2007 Denunciar Share Postado Setembro 6, 2007 Jhonas, fiz o procedimento e continuou não funcionando. Obrigado pela dica.Mas ainda não consegui resolver a questão Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 robinhocne Postado Setembro 6, 2007 Denunciar Share Postado Setembro 6, 2007 Bom, não sei se isso vai te ajudar, mas eu uso o office 2007 também, ainda não utilizei delphi e office, mas andei observando na extenção dos arquivos gerados pelo office 2007 é outra extenção, por exemplo ai você expecificou: ShellExecute(0,'open','C:\eventos\contratos\contratoarea.doc',nil,nil,SW_SHOWNORMAL);Andei observando que a extenção do office 2007 é .xls, verifica se é isso, mas você deve mudar o tipo de salvamento em mais comando do word 2007.Verifique, espero que seja isso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Setembro 6, 2007 Denunciar Share Postado Setembro 6, 2007 OpaTenta tirar o 'open' também e passar mais coisas...Digo porque eu já passei por isso, mas não era só com arquivos do Office, e a merda doproblema tava no 'open' acredite ou não auhauhaPasse o Handle da janela também pro Windows saber quem é o owner da execuçãoQuando testei eu percebi que, no Windows 98 precisava do Open já no Windows 200/NT/XPse os programas que abrissem o atalho não tivesse seu Path absoluto e sim ClassIDs entãocom o Open não abria, é o que acontece com o Office...Repare, clique em Iniciar, Programas, Acessórios, clica com o botão direito emcima do atalhodo bloco de notas... você vai ver algo como%SystemRoot%\system32\notepad.exeEste é o caminho absoluto do Bloco de notas...Agora faça o mesmo com o atalho de qualquer programa do Office...Repare que não tem um caminho absoluto, e sim ele é executado através de CLASSID...Então tente o seguinte, foi o que eu fiz pra resolver...const PLATFORM_WINDOWS_UNKNOW = 0; PLATFORM_WINDOWS_98 = 1; PLATFORM_WINDOWS_ME = 2; PLATFORM_WINDOWS_2000 = 3; PLATFORM_WINDOWS_XP = 4; Function GetPlatform: Integer; var OsVerInfo: TOSVersionInfo; begin Result := PLATFORM_WINDOWS_UNKNOW; ZeroMemory(@OsVerInfo, SizeOf(OsVerInfo)); OsVerInfo.dwOSVersionInfoSize := SizeOf(OsVerInfo); GetVersionEx(OsVerInfo); case (OsVerInfo.dwPlatformId) of VER_PLATFORM_WIN32_WINDOWS: begin //Windows 98 if ((OsVerInfo.dwMajorVersion >= 4) and (OsVerInfo.dwMinorVersion >= 10) and not (OsVerInfo.dwMinorVersion >= 90)) then Result := PLATFORM_WINDOWS_98 else //Windows ME if ((OsVerInfo.dwMajorVersion >= 4) and (OsVerInfo.dwMinorVersion >= 90)) then Result := PLATFORM_WINDOWS_ME; end; VER_PLATFORM_WIN32_NT: begin //Windows 2000 if ((OsVerInfo.dwMajorVersion >= 5) and not (OsVerInfo.dwMinorVersion >= 1)) then Result := PLATFORM_WINDOWS_2000 else //Windows XP if ((OsVerInfo.dwMajorVersion >= 5) and (OsVerInfo.dwMinorVersion >= 1)) then Result := PLATFORM_WINDOWS_XP; end; end; //end case end; ... var szBuff: String; begin szBuff := 'C:\eventos\contratos\contratoarea.doc'; case GetPlatform of PLATFORM_WINDOWS_98, PLATFORM_WINDOWS_ME: ShellExecute(Handle, 'open', PChar(szBuff), nil, nil, SW_SHOWNORMAL); PLATFORM_WINDOWS_2000, PLATFORM_WINDOWS_XP: ShellExecute(Handle, nil, Pchar(szBuff), nil, nil, SW_SHOWNORMAL); end; end;Adapte as suas necessidades...abraçox Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gleistoncardoso Postado Setembro 17, 2007 Autor Denunciar Share Postado Setembro 17, 2007 (editado) Churc,Coloquei a const + function logo abaixo de uses do meu form e a parte de baixo var szBuff... no botao para chamar a operação, mas continuou dando o mesmo erro. Não tenho muita experiência com delphi, mas fiz correto ou ainda falta algo.Erro: a tabela externa não está no formato esperado.Dai pede para localizar a table, dai localizo: clientes.db e continua dando erro. Editado Setembro 17, 2007 por gleistoncardoso Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Setembro 18, 2007 Denunciar Share Postado Setembro 18, 2007 No word 2003 funciona normalmente, fiz uma atualização para word 2007 e quando vou abrir acusa: "Erro, a tabela externa não está no formato esperado."Dai pede para que eu localize o arquivo de origem dos dados, mas mesmo localizando a tabela clientes.db ele continua dando erro.gleistoncardoso, duas perguntas:1) No word 2007 também funciona corretamente, como funcionava no 2003?2) A localização da tabela é a mesma da do documento do word? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gleistoncardoso Postado Setembro 18, 2007 Autor Denunciar Share Postado Setembro 18, 2007 No 2007 não funciona, só funciona no 2003.As tabelas estao na mesma pasta de sempre. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 18, 2007 Denunciar Share Postado Setembro 18, 2007 Tenta isso pra ver se dá certo:utilize um componente OleContainer1 da guia System do delphino object inspector altere a propriedade AutoActive para aaGetFocusprocedure Tfrmclientes.btimprimirClick(Sender: TObject); begin if tabelas.tbclientesTipocontrato.Text = 'Àrea Lazer' then begin OleContainer1.CreateLinkToFile('C:\eventos\contratos\contratoarea.doc'),TRUE); OleContainer1.SetFocus; OleContainer1.Run; end; end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gleistoncardoso Postado Setembro 19, 2007 Autor Denunciar Share Postado Setembro 19, 2007 Jhonas, está faltando um parentesesOleContainer1.CreateLinkToFile('C:\eventos\contratos\contratoarea.doc'),TRUE); alterei assimOleContainer1.CreateLinkToFile(('C:\eventos\contratos\contratoarea.doc'),TRUE); agora da a mensagem de erro duas vezes, abre o arquivo do word, porem não mescla os dados.Um detalhe que não comentei ainda, quando abro direto pelo word funciona normalmente, abre o arquivo, consigo passar por todos os registros da tabela atraves da mala direta. O erro so acontece realmente quando abro pelo comando do Delphi. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 19, 2007 Denunciar Share Postado Setembro 19, 2007 agora da a mensagem de erro duas vezesqual é a mensagem de erro ?foi distração minha .... coloca o seu codigo pra poder entender o que voce esta fazendo, quando diz que não mescla os dados. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Setembro 19, 2007 Denunciar Share Postado Setembro 19, 2007 No 2007 não funciona, só funciona no 2003.As tabelas estao na mesma pasta de sempre.gleistoncardoso, acho que o ideal seria primeiro conseguir resolver o problema no Word2007 (ou seja, abrir o documento no Word 2007, fazer funcionar "lá"), para depois continuar queimando pestanas no Delphi (o que acho, que daí não será necessário).Pois, me corrijam se estiver falando besteira, o uso de OLE apenas faz com que possamos utilizar os recursos e funcionalidades do Word através de nossa aplicação Delphi. Se não funciona nativamente no Word, não vai ser via OLE que vai funcionar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gleistoncardoso Postado Setembro 19, 2007 Autor Denunciar Share Postado Setembro 19, 2007 Micheus, abrindo diretamente pelo word funciona normalmente a mala direta utilizando a tabela clientes.db que uso no programa.Quando uso o programa em delphi com word 2003 funciona.Só da o erro quando uso com o word 2007.Quando vou fazer um arquivo novo no word 2007 utilizando mala direta com a tabela clientes.db funciona, o problema é realmente delphi com word 2007. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gleistoncardoso Postado Setembro 19, 2007 Autor Denunciar Share Postado Setembro 19, 2007 Tentando resolver de outra forma, ao invés de clientes.db, criei uma tabela no paradox como TESTE.DBF, dai o processo funcionou normalmente, sem nenhum problema. Identifiquei então que o word 2007 não trabalha 100% com tabelas .db.Agora as questões:1 - Tem como converter minhas tabelas .db para .dbf sem perder nada de propriedades.2 - E no delphi terei que alterar linhas de código por utilizar tabela .dbf.Quais as sugestões??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Setembro 20, 2007 Denunciar Share Postado Setembro 20, 2007 Tentando resolver de outra forma, ao invés de clientes.db, criei uma tabela no paradox como TESTE.DBF, dai o processo funcionou normalmente, sem nenhum problema. Identifiquei então que o word 2007 não trabalha 100% com tabelas .db.gleistoncardoso, esta última informação não é compatível com esta outra sua observação:"Quando vou fazer um arquivo novo no word 2007 utilizando mala direta com a tabela clientes.db funciona, o problema é realmente delphi com word 2007"Então, acho que deve haver algo ainda não identificado acontecendo.1 - Tem como converter minhas tabelas .db para .dbf sem perder nada de propriedades.2 - E no delphi terei que alterar linhas de código por utilizar tabela .dbf.acho que não seria o caminho. Como disse antes, deve ter alguma coisa errada ocorrendo que ainda não se descobriu.O pior é que provavelmente só você conseguirá tentar achar o problema (eu, por ex., nem tenho o Word 2007).Não tenho certeza se em essência, não seria a mesma coisa, mas você já experimentou abrir o documento com esta outra forma:type TForm1 = class(TForm) private WordApp :OLEVariant; end; ... uses ComObj; procedure TForm1.BtnAbreDocClick(Sender: TObject); const wdWindowStateNormal = 0; wdWindowStateMaximize = 1; wdWindowStateMinimize = 2; begin try // cria objeto OLE para a aplicação Word WordApp := CreateOleObject('Word.Application'); // se não quiser que o word "apareça", comente a próxima linha WordApp.WindowState := wdWindowStateNormal; try WordApp.Documents.Open('C:\eventos\contratos\contratoarea.doc''); except ShowMessage('Erro ao tentar abrir arquivo doWord'); end; except ShowMessage('Erro ao tentar inicializar o Microsoft Word'); end; end; procedure TForm1.Form1Destroy(Sender :TObject); begin // se havia inicializado o Word, então encerra ele if not VarIsEmpty(WordApp) then WordApp.Quit; WordApp := UnAssigned; end;Mais uma outra coisa. Em qual a versão do Paradox que foi criada sua tabela (5, 7, ...)? Quem sabe, possa estar relacionado a versão dela. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gleistoncardoso Postado Setembro 21, 2007 Autor Denunciar Share Postado Setembro 21, 2007 Micheus, tentei utilizar o seu código e apresentou os seguintes problemas:private WordApp :OLEVariant; (não encontrou propriedades)[Error] clientes.pas(177): Field definition not allowed after methods or propertiesexcept[Error] clientes.pas(791): ',', ')' or ']' expected but 'EXCEPT' foundShowMessage('Erro ao tentar abrir arquivo doWord');[Error] clientes.pas(792): ')' expected but identifier 'ShowMessage' foundend;[Error] clientes.pas(793): EXCEPT or FINALLY expected[Fatal Error] Eventos.dpr(16): Could not compile used unit 'clientes.pas' Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Setembro 22, 2007 Denunciar Share Postado Setembro 22, 2007 Micheus, tentei utilizar o seu código e apresentou os seguintes problemas:private WordApp :OLEVariant; (não encontrou propriedades)[Error] clientes.pas(177): Field definition not allowed after methods or propertiesgleistoncardoso, o que você quiz dizer com o comentário "não encontrou propriedades" ao lado a variável "privada"?Você lembrou de colocar na cláusula USES a unit "ComObj"? Eu exemplifiquei utilizando esta únit, porém coloquei depois da cláusula IMPLEMENTATION, talvez você tenha que colocar na cláusula INTERFACE (lá no início da unit)except[Error]clientes.pas(791): ',', ')' or ]' expected but 'EXCEPT' foundShowMessage('Erro ao tentar abrir arquivo doWord');[Error] clientes.pas(792): ')' expected but identifier 'ShowMessage' foundend;[Error] clientes.pas(793): EXCEPT or FINALLY expectedbom, esta parte é um efeito em cascata. Mas o problema começa numa linha que não parece-me ser qualquer uma que tenha posto em meu exemplo. Observe que a mensagem cita "',', ')' or ]' expected but 'EXCEPT' found" e não há nada parecido em meu exemplo.Você vai ter que colocar o código desta parte aqui (a parte em que contenha as linhas anteriores a linha 791, até o final do seu except - end) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
gleistoncardoso
Utilizo o comando abaixo para abrir um arquivo do word que tem uma mala direta buscando os dados da tabela paradox:
procedure Tfrmclientes.btimprimirClick(Sender: TObject);
begin
if tabelas.tbclientesTipocontrato.Text = 'Àrea Lazer' then
begin
ShellExecute(0,'open','C:\eventos\contratos\contratoarea.doc',nil,nil,SW_SHOWNORMAL);
end;
...
No word 2003 funciona normalmente, fiz uma atualização para word 2007 e quando vou abrir acusa: "Erro, a tabela externa não está no formato esperado."
Dai pede para que eu localize o arquivo de origem dos dados, mas mesmo localizando a tabela clientes.db ele continua dando erro.
O que pode ser????
Link para o comentário
Compartilhar em outros sites
16 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.