Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
aderlanrm
Partner - Specialist
Partner - Specialist

SQLServer to QVD

O arquivo anexo tem um exemplo de como é possível fazer um extrator de Microsoft SQL Server para QVD.

No desenvolvimento em camadas, um aplicativo assim é útil principalmente na primeira, onde os dados são transformados diretamente para QVD, exatamente como estão disponíveis na origem.

Um pequeno ajuste no comando STORE, pode gerar arquivos texto com qualquer separador de campo.

Também tem uma pequena análise do banco de dados, com alguns gráficos e listas da estrutura.

Espero que seja útil, abraço.

Aderlan Rodrigues

aderlan.rodrigues@qway.com.br

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Labels (6)
14 Replies
lucianosv
Specialist
Specialist

Boa tarde.

Você têm erros de chave no script como mostra o finalzinho do seu script $ Syn 1.

Se as tabelas tiverem campos com o mesmo nome e for só para extrair, de um store de cada tabela. para qvd após o select e um drop table.

Dessa forma não haverá amarrações de dados.

Anonymous
Not applicable

Luciano,

Independente da chave não teria que criar os QVDs?

lucianosv
Specialist
Specialist

Na sua execução não mostra nenhuma linha do loop que lê e grava as tabelas:

Let vLinhas = NoOfRows('Tabelas'); // Define o número de objetos que serão exportados

FOR x = 0 to ($(vLinhas)-1) // O -1 é necessário pois o indice começa em zero

  Let vCatalogo = Peek('TABLE_CATALOG',$(x)); // Define o nome da base de dados no objeto atual

  Let vModelo = Peek('TABLE_SCHEMA',$(x)); // Define o nome do modelo no objeto atual

  Let vTabela = Peek('TABLE_NAME',$(x)); // Define o nome do objeto a ser exportado

  $(vTabela):

  SQL SELECT * FROM $(vCatalogo)$(vModelo)$(vTabela);

  STORE $(vTabela) into $(vCatalogo)$(vModelo)$(vTabela).qvd (qvd);

  DROP Table $(vTabela);

NEXT;

DROP Table Tabelas;

Não sei o que foi alterado do script original, mas sugiro depurar para verificar se está entrando no loop e resolvendo corretamente as variáveis.

Anonymous
Not applicable

segue script abaixo:

//*** ATENÇÃO, DEPENDENDO DO TAMANHO DA SUA BASE DE DADOS, ISSO PODE DEMORAR ***//

// String de conexão de exemplo usando o SQL Express e banco de dados fornecido pela Microsoft, o Adventure Works 2008

OLEDB CONNECT32 TO [Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=GRUPOVB;Data Source=SAUTUMN1;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SAUTUMN1;Use Encryption for Data=False;Tag with column collation when possible=False];

TABLES: // Carrega todos objetos tabelas ou views

SQL select TABLE_CATALOG,

  TABLE_SCHEMA,

  TABLE_NAME,

  TABLE_TYPE

from INFORMATION_SCHEMA.TABLES;

//where TABLE_TYPE = 'BASE TABLE' or TABLE_TYPE = 'VIEW'

//order by TABLE_TYPE, TABLE_NAME;

Let vLinhas = NoOfRows('Tabelas'); // Define o número de objetos que serão exportados

FOR x = 0 to ($(vLinhas)-1) // O -1 é necessário pois o indice começa em zero

  Let vCatalogo = Peek('TABLE_CATALOG',$(x)); // Define o nome da base de dados no objeto atual

  Let vModelo = Peek('TABLE_SCHEMA',$(x)); // Define o nome do modelo no objeto atual

  Let vTabela = Peek('TABLE_NAME',$(x)); // Define o nome do objeto a ser exportado

  $(vTabela):

  SQL SELECT * FROM $(vCatalogo)$(vModelo)$(vTabela);

  STORE $(vTabela) into $(vCatalogo)$(vModelo)$(vTabela).qvd (qvd);

  DROP Table $(vTabela);

NEXT;

Grato pela atenção.

aderlanrm
Partner - Specialist
Partner - Specialist
Author

Olá pessoal,

Desculpem a falta de resposta, a correria tem me deixado longe da comunidade.

Os QVD são gerados na mesma pasta onde você salvou o QVW.

O problema pode ser na string de conexão, é interessante refazer usando o assistente do editor de script e fazer teste. Apesar de fazer a leitura da tabela de informações do banco, o usuário pode não ter permissão de leitura ao banco que está extraindo os dados.

Acrescente o comando "USE [NOME DO BANCO]" para reforçar, se necessário.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)