|
Accueil → WINDEV 25 → WX - Como importar uma base de ACCESS ou até mesmo usar uma base ACCESS |
WX - Como importar uma base de ACCESS ou até mesmo usar uma base ACCESS |
Débuté par Zeca, 19 jan. 2016 02:28 - 3 réponses |
| |
| | | |
|
| |
Membre enregistré 1 message Popularité : +1 (1 vote) |
|
Posté le 19 janvier 2016 - 02:28 |
Hi all !
Como muitos, eu venho do GAS / FATHER que são RADs que geram VB e utilizam além de SGDBs, bancos de dados do tipo Access.
Isso posto, considerando que as ferramentas PCsoft estão em um nível diferente, e que ao migrar temos a necessidade de tratar o legado existente, buscamos a alternativa de, ou continuar usando arquivos MDB ou importar os dados para arquivos HFSQL C/S ou classic.
Não existe esse exemplo nos Tutoriais da PCSoft nem nos exemplos que acompanham a ferramenta.
Dessa maneira, como foi uma necessidade nossa, vamos compartilhar a experiência de como fizemos para resolver essa situação da maneira como precisávamos.
Espero que seja útil a todos. Como conectar / usar uma base de dados Access.
1 – Primeira condição O arquivo MDB não pode ter senha. 2 - Como tirar a senha de um arquivo .MDB - Você vai ter que usar o VB e gerar uma rotina para eliminar / trocar a senha do arquivo MDB
Sub ChangeDBPassword() Dim Db As Database, senha As String, nome_do_banco As String senha = "senha_do_banco_de_dados" nome_do_banco = "unidade:\caminho\nome.mdb" Set Db = OpenDatabase(nome_do_banco, True, False, dbLangGeneral & ";PWD=" & senha) Db.NewPassword senha, "" Db.Close End End Sub
3 – Depois de tirada a senha do banco, faça a conexão
O exemplo acima acontece quando você usa com senha. Sem senha acontece como abaixo:
a) Insira os dados das properties; b) Não terá senha por que você eliminou ou desabilitou a senha; c) Após a inclusão dos dados clique no botão TEST indicado na imagem acima e você terá a mensagem de sucesso como mostra na imagem.
Agora já está conectado, vamos pegar a estrutura dos dados.
Vá em analysis, depois em import e selecione a primeira opção, conforme indicado acima.
Vai abrir essa janela:
Clique conforme indicado e a seguir escolha
E de novo
Você terá a seguinte tela:
Selecione como indicado acima e outra vez…
Faça a sua escolha:
Ou você vai acessar os dados no formato Access ou converte passa HFSQL.
E outra vez…
Selecione as tabelas desejadas…
E outra vez…
E recebe a confirmação de que está tudo ok !
E …
Pode acontecer de você receber um aviso de que o wizzard não consegue estabelecer algum link entre as tabelas que ele está importando. E você pode anotar essa informação ou copiar simplesmente para a área de transferência e gravar em arquivo texto para verificação posterior..
Com isso você terá como exemplo…
Então está terminada a primeira parte.
Você importou a estrutura do MDB para dentro do seu sistema.
Mas por exemplo, o objetivo é você importar os dados de arquivos MDB que existem no cliente e que tem essa estrutura. E que você quer passar para HFSQL por exemplo, pelo motivo que você terá maior segurança usando um arquivo HFSQL do que um arquivo MDB e também porque o manuseio dos dados dentro do Windev é muito mais fácil do que arquivos MDB.
Então, eu tenho a seguinte situação:
1 – Tenho uma estrutura importada de um MDB e que quero adequar para HFSQL 2 – Tenho que importar os dados dos clientes que usam o sistema atual e que quero passar para o HFSQL que é mais prático para trabalhar.
Como voou proceder:
1 – Primeiro de tudo crio as mesmas tabelas em HFSQL ou simplesmente mudo o nome dessas e também o tipo da tabela. Como ?
Na análise procedo da seguinte maneira:
Duplo clique na tabela; Vai abrir a janela Describing the items and indexes of a data file. Aí você clica conforme indicado pela seta Vai abrir a tela Describing the data files Aí, você altera o tipo de tabela conforme indicado.
ATENÇÃO:
Mesmo que você tenha pastas diferentes, as tabelas têm que ter nomes diferentes. Para facilitar, pode manter os nomes e insira só um HF no final do nome e mude o tipo para Hiperfile, Classic ou C/S. No caso do C/s vaias ter que te o servidor para poder conectar. Vamos optar inicialmente por Classic. Então depois de alterar o tipo, você repete a importação das tabelas, no formato MDB e mantêm o tipo da importação.
Conclusão: Vou ter duas análises iguais, com tabelas com os mesmos campos, sendo uma analysis com tabelas HFSQL e outra analise com tabelas do tipo OLEDB com a conexão access.
Para evitar poluição visual, crie uma pasta dentro da analysis, e mova todas as tabelas do OLEDB para lá dando um nome a essa pasta, por exemplo Tab_Access.
Bom até tudo tranquilo.
Na prática eu tenho uma analise para HFSQL e outra para Access conectada a uma tabela. Mas eu quero que essa conexão que eu tenho definida para um arquivo MDB possa ser alterada no cliente e eu possa fazer a importação dos dados e também os meus ajustes transformando os dados de Access para HFSQL. Então, no cliente, não posso esquecer que, se tiver senha na base MDB eu tenho que eliminar essa base. Faço isso executando aquela rotina que informei lá na primeira página.
Pode fazer isso usando o comando
ExeRun(“nome_do_programa_que_tira_a_senha”)
Ok. Já exclui a senha do arquivo. Agora, tenho que trocar a conexão do arquivo definido anteriormente para o arquivo do cliente.
sBanco_Mdb is string = fSelect("C:\","XLAP","Selecione o arquivo ... ","*.MDB","*.mdb",fselExist) IF NOT HDescribeConnection("MyConnection", "", "", sBanco_Mdb, "", ... hOledbAccess2000, hOReadWrite) THEN Error(HErrorInfo()) RESULT False ELSE IF NOT HOpenConnection("MyConnection") THEN Error(HErrorInfo()) RESULT False ELSE HChangeConnection(Tab_Access,"MyConnection") END END
Aí, o que vai acontecer, a conexão vai apontar para o arquivo MDB que está no cliente e que ele localizou quando abrir a janela provocada pelo comando fSelect.
Caso ocorra algum erro, ele vai ser anunciado.
Assim você pode fazer as demais rotinas de importação dos dados.
Eu sugiro o feijão com arroz do tipo abre a tabela access, lê e grava na tabela hfsql. Simples assim.
Algumas recomendações:
1 – Se você tem tabela de parâmetros, primeiro a de parâmetros.
2 – Se você tiver tabelas com ligações, importe na sequência:
- Tabela Pai, - Tabela Filho, - Tabela neta;
Qualquer dúvida estamos a disposição.
Boa sorte!
José Carlos Warpechowski – Zeca Skype: jzwarpe@yahoo.com.br jwarpe@gmail.com |
| |
| |
| | | |
|
| | |
| |
Posté le 19 janvier 2016 - 13:10 |
Muito boa contribuição José Carlos.
Somente gostaria de complementar dizendo que para tirar as senhas dos MDBs, pode-se fazer também através do Access, e no momento de Abrir o MDB, escolher a opção "Abrir no modo exclusivo". Depois usar as Ferramentas do Banco de Dados, ou o recurso no menu Arquivo, para Retirar Senha do Banco de Dados. Vai pedir a senha atual e se confirmada, o BD vai ficar sem senha e pronto para uso. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 17 mai 2017 - 19:03 |
:obrigado:
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 123 messages Popularité : +46 (46 votes) |
|
Posté le 17 mai 2017 - 21:17 |
Conexão dinamica com ACCESS (Via ODBC) em ambiente de produção
s_nome_odbc is string = "NOME_MEU_ODBC" s_chave_registro_principal_32bits_em_64bits is string = "HKEY_LOCAL_MACHINE\Software\Wow6432Node\ODBC\ODBC.INI\"+s_nome_odbc s_chave_registro_principal_32bits is string = "HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+s_nome_odbc s_sub_key1 ,s_sub_key2 are strings s_sub_key1 = "\Engines" s_sub_key2 = s_sub_key1 + "\Jet"
s_driver is string = "C:\Windows\system32\odbcjt32.dll" s_dbq is string = "C:\meu_arquivo_Access.mdb" s_fil is string = "MS Access;" s_password is string = "123"
IF SysWindowsVersion(sysProcessor) = 32 THEN RegistryDeleteKey(s_chave_registro_principal_32bits) RegistryCreateKey(s_chave_registro_principal_32bits) RegistryCreateKey(s_chave_registro_principal_32bits+s_sub_key1) RegistryCreateKey(s_chave_registro_principal_32bits+s_sub_key2) RegistrySetValue(s_chave_registro_principal_32bits, "DBQ", s_dbq) RegistrySetValue(s_chave_registro_principal_32bits, "Driver", s_driver) RegistrySetValue(s_chave_registro_principal_32bits, "DriverId", 25,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits, "FIL", s_fil) RegistrySetValue(s_chave_registro_principal_32bits, "SafeTransactions", 0, RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits, "UID", "") IF Length(s_password) > 0 THEN RegistrySetValue(s_chave_registro_principal_32bits, "PWD", s_password) RegistrySetValue(s_chave_registro_principal_32bits+s_sub_key2,"ImplicitCommitSync","") RegistrySetValue(s_chave_registro_principal_32bits+s_sub_key2,"MaxBufferSize",2048,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits+s_sub_key2,"PageTimeout",5,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits+s_sub_key2,"Threads",3,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits+s_sub_key2,"UserCommitSync","Yes") IF NOT RegistryExist(s_chave_registro_principal_32bits) THEN Error("Erro ao criar os registros") RETURN END ELSE RegistryDeleteKey(s_chave_registro_principal_32bits_em_64bits) RegistryCreateKey(s_chave_registro_principal_32bits_em_64bits) RegistryCreateKey(s_chave_registro_principal_32bits_em_64bits+s_sub_key1) RegistryCreateKey(s_chave_registro_principal_32bits_em_64bits+s_sub_key2) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "DBQ", s_dbq) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "Driver", s_driver) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "DriverId", 25,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "FIL", s_fil) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "SafeTransactions", 0, RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "UID", "") IF Length(s_password) > 0 THEN RegistrySetValue(s_chave_registro_principal_32bits_em_64bits, "PWD", s_password) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits+s_sub_key2,"ImplicitCommitSync","") RegistrySetValue(s_chave_registro_principal_32bits_em_64bits+s_sub_key2,"MaxBufferSize",2048,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits+s_sub_key2,"PageTimeout",5,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits+s_sub_key2,"Threads",3,RegistryTypeInt) RegistrySetValue(s_chave_registro_principal_32bits_em_64bits+s_sub_key2,"UserCommitSync","Yes") IF NOT RegistryExist(s_chave_registro_principal_32bits_em_64bits) THEN Error("Erro ao criar os registros") RETURN END END
ctConn_test is Connection
ctConn_test..Provider = hODBC ctConn_test..Source = s_nome_odbc ctConn_test..Access = hOReadWrite IF HOpenConnection(ctConn_test) THEN Info("Conn OK") ELSE Error("Error Conn",HErrorInfo()) END HCloseConnection(ctConn_test)
Podem colocar isso em um Botão , executar e logo podem também usar esa configuração em desenvolvimento para criar/importar o banco para a anlisys
Vai ficar assim
-- Atte. Willian Fernando |
| |
| |
| | | |
|
| | | | |
| | |
|