Vous êtes sur la page 1sur 36

Programao SQL com Microsiga Protheus

Programao SQL (Intermedirio) Com Microsiga Protheus

Windows NT Server , Windows Workstation, Windows 95/98 e SQL Server so marcas registradas da Microsoft Corporation. Banco de Dados Oracle a marca registrada da Oracle Corporation. Banco de Dados Informix a marca registrada da Informix Corporation. Banco de Dados Sybase a marca registrada da Sybase Corporation. Banco de Dados UDB a marca registrada da IBM. Este material de efeito didtico/suporte e no pode ser reproduzido sem autorizao TOTVS S/A.

Programao SQL com Microsiga Protheus

ndice
1. Introduo ao ambiente Relacional 1.1. Objetivos 1.2. Conceitos Bsicos de Banco de Dados 1.3. Conhecendo a estrutura de Armazenamento dos dados 1.3.1. LOG do Banco de dados 1.3.1.1. Controle Transacional 1.3.1.2. Segurana e Backup 1.3.1.3. Construindo Querys evitando problemas com estouro da rea de LOG 1.3.2. rea temporria do Banco de Dados 1.4. Normalizao de Base de Dados 1.5. MER (Modelo Entidade Relacionamento) 1.6. Diferenas cruciais entre ambientes DBF e SQL 1.6.1. DBF Trabalha de forma posicional com acesso compartilhado 1.6.2. SQL Trabalha de forma relacional (Teoria dos conjuntos) e o acesso de forma centralizada 2. TopConnect 2.1. Informaes gerais 2.2. Controle de tipo de dados ( Tabela TOP_FIELD ) 2.3. Opes de Visualizar os Eventos (Mensagens de Erros) 2.4. Sistema de controle de Registros 2.4.1. Portabilidade 2.4.2. Funo da coluna R_E_C_N_O_ 2.4.2.1. Limite de registros 2.4.2.2. Renumerao da coluna RECNO 2.4.3. Controle dos registros deletados (Coluna D_E_L_E_T_) 2.5. Constraints do Banco de dados que so criados automaticamente 2.5.1. Criao da Estrutura de tabelas 2.5.2. ndices 2.5.3. Defaults 2.5.4. Problemas com contedo Nulo 2.6. Manuteno do Banco de dados 2.6.1. Aumentando a performance executando a operao de PACK 2.7. DBFNTX x TopConnect 2.7.1. ndices de produo 2.7.2. Funes em chaves de ndices 2.7.3. ndices condicionais 2.7.4. Chaves numricas compostas 2.7.5. Expresses de filtro com funes e variveis 2.8. Comandos 2.8.1. APPEND FROM 2.8.2. COPY TO 2.8.3. USE 2.8.4. BEGIN, COMMIT, ROLLBACK TRANSACTION

Programao SQL com Microsiga Protheus

2.9.

Funes 2.9.1. TCCANOPEN 2.9.2. TCCONTYPE 2.9.3. TCDELFILE 2.9.4. TCGETDB 2.9.5. TCLINK 2.9.6. TCQUERY 2.9.7. TCQUIT 2.9.8. TCSETCONN 2.9.9. TCSETFIELD 2.9.10. TCSPEXEC 2.9.11. TCSPEXIST 2.9.12. TCSQLERROR 2.9.13. TCSQLEXEC 2.9.14. TCSRVTYPE 2.9.15. TCUNLINK 2.9.16. TCCHKOBJ* 2.9.17. TCEXEERROR* 2.9.18. TCPGMEXE* 2.9.19. TCSYSEXE* ( * )Funes apenas para o TOPConnect rodando em servidores AS/400.

2.10. Performance 2.10.1. Otimizando seu cdigo 2.10.2. Leitura Sequencial 2.10.3. O uso de filtros 2.10.4. Stored Procedures 2.11. Integrao com outros aplicativos 2.11.1. Incluindo registros nas tabelas do SigaAdvanced / AP5 2.11.2. Excluindo registros ( Sempre Marcar ) 2.11.3. Vantagens e Desvantagens 3. Utilitrio importante 3.1. Instalador de Stored Procedures no Banco de Dados

Programao SQL com Microsiga Protheus

1. Introduo ao ambiente Relacional 1.1. Objetivos Este curso tem como objetivo treinar e aperfeioar nossos analistas e parceiros quanto confeco de programas especficos, em ambiente de trabalho com Base de Dados SQL desta forma pretendemos aumentar a facilidade de manuseio dos componentes envolvidos tanto na anlise e deteco de erros, e quais possveis aes para san-los, antes de recorrer ao suporte interno. Demonstraremos tambm como otimizar programas atravs da linguagem SQL em seus RDMAKES e futuras implementaes para as prximas verses. Todos os tpicos mencionados podero servir como base de consulta, para escrita de programas e resoluo de problemas.

1.2.

Conceitos Bsicos de Banco de Dados Os conceitos bsicos dos Bancos de Dados relacionais so bem diferenciados dos conhecidos DBFs. Estes conceitos bsicos so teis principalmente para saber responder eventuais perguntas que nossos clientes podero efetuar sobre nosso sistema. SQL quer dizer : Structured Query Language , que foi desenvolvido inicialmente pela IBM Corporation. Um banco de dados no trabalha em funo de registros, ou Arquivos como ns estamos acostumados a ver e fazer em linguagem de programao Clipper. o SQL utiliza a teoria de conjuntos conhecida pr todos, que tem o objetivo de resolver os problemas dos usurios com comandos simples, chamados de querys ( Requisio e Alterao de dados ), que utilizam basicamente 4 comandos : SELECT, INSERT, UPDATE, DELETE. A primeira diferena entre o ambiente SQL e o DBF o fato de criarmos uma rea no disco (DATABASE) que o prprio banco se encarregara de administrar, no sentido de criar tabelas, ndices, e todos os objetos envolvidos no sistema. A nomenclatura muda um pouco: ao invs de CAMPOS temos COLUNAS e ao invs de REGISTROS temos LINHAS. Os ndices trabalham de forma semelhante ao DBF, e so utilizados com duas finalidades : a de termos uma chave de acesso extremamente rpida, e de garantirmos uma chave nica em uma tabela. A partir do momento que indicamos uma chave nica em uma tabela, o prprio banco de dados passa a garantir que no existir dados duplicados, sem a necessidade de programao para tal. Tambm estaro ligados uma tabela especfica os Triggers, e as Foreign Keys ( Chaves Estrangeiras ). Em cada DataBase tambm estaro armazenadas as Stored Procedures, que so programas ou funes escritas como qualquer linguagem conhecida ( Clipper, Pascal etc.), s que no padro ANSI / SQL. Uma Trigger funciona como um gatilho, s que este disparado no a cada campo alterado, e sim a cada Incluso, Alterao ou Excluso de uma linha da tabela. Os Triggers tambm so escritos como as Stored Procedures, ou seja, como um programa qualquer, que pode efetuar qualquer tipo de validao, atualizao em outras tabelas, etc...

Programao SQL com Microsiga Protheus

Hoje no utilizamos no Siga Advanced nenhuma Trigger. Em alguns casos especficos em clientes, as mesmas podero ser utilizadas. Uma Foreign Key ( Chave Estrangeira ) uma ligao entre tabelas que so criadas nas mesmas. So estas que garantem que nunca o Cliente X ser excludo se o mesmo tiver movimentos ( Pedidos, Notas , Duplicatas Etc. ), tambm ser garantido que nunca ser includo um Pedido de Vendas do Cliente Y, se o mesmo no existir. Este tratamento feito diretamente pelo Banco de Dados, no necessitando qualquer codificao para isto. O Siga Advanced/AP5 no trabalha hoje com o conceito de chaves estrangeiras no banco de dados. O uso de um Banco de Dados SQL se faz necessrio pela segurana dos dados e pela fcil recuperao dos mesmos por vrios aplicativos como Siga Advanced / AP5 (TopConnect), Crystal Reports (ODBC), SigaEIS (BDE), Excel, etc.

Devido ao controle exercido sobre os dados a performance do banco acaba sendo prejudicada. Nos prximos tpicos estaremos demonstrando como melhorar e otimizar o SGDB (Sistema Gerenciador de Banco de Dados) para o melhor aproveitamento do sistema. Para empresas que fazem uma grande utilizao de banco de dados normalmente encontramos um profissional chamado DBA (Data Base Administrator), que tem a funo de administrar o banco de dados, quanto a otimizao, configurao, backups e segurana. Sabemos que na prtica isto s funciona para empresas grandes, portanto temos que saber o mnimo possvel de cada banco de dados para podermos identificar problemas e solues que se adequam melhor instalao do cliente.

Programao SQL com Microsiga Protheus

1.3.

Conhecendo a estrutura de Armazenamento dos dados

1.3.1.

LOG do Banco de dados Controle Transacional

1.3.1.1.

Toda e qualquer operao de incluso, alterao ou excluso de registro armazenada primeiramente na rea de LOG. Se voc faz uma incluso no banco de dados de uma simples linha o mesmo garante a incluso completa da linha (insero de todas as colunas). Este fato garantido pela definio no seu banco de dados de uma transao implicita. Agora vamos supor que voc tenha uma operao que necessite que vrias incluses, alteraes e excluses realizadas s sejam efetuadas quando todas as operaes tenham sido efetuadas com sucesso, caso contrrio todas as operaes devem ser canceladas. Para definio de transao pelo usurio, normalmente se utilizam os comandos BEGIN e COMMIT , para definir incio e fim de uma transao respectivamente. Para o cancelamento de um transao sem sucesso normalmente chamamos de ROLLBACK. A rea de LOG do Banco de dados normalmente definida com 25% do tamanho da rea de dados, mas este fator depende muito do nmero de usurios e a quantidade de transaes realizadas em um determinado intervalo de tempo. 1.3.1.2. Segurana e Backup

Depois que uma transao concluda com sucesso, no indica que a mesma estar sendo transferida para a rea real dos dados. Este tramite de transferncia chamado de CheckPoint , este ponto configuravl de acordo o SGDB utilizado. Para bancos de dados de maior escala, o processo de check point s realizado aps o Backup da rea de LOG.

Programao SQL com Microsiga Protheus

O LOG tambm utilizado para fazer o backup de grande bancos de dados, guardando somente as alteraes efetuados em um determinado intervalo de tempo. Em clientes com base de dados pequenas, no utilizamos este tipo de recurso. 1.3.1.3. Construindo Querys evitando problemas com estouro da rea de LOG Conhecendo melhor o processo de gravao do banco de dados, percebemos que quanto menor for o nmero de operaes de insero, alterao e excluso realizados dentro de uma transao melhor ser a performance. Banco de dados que possuem grandes transaes ocasionam problemas de deadlock. Realizao de grandes updates na base de dados sem informar a clausula Where delimitando um intervalo de linhas a serem modificados. Na alterao e excluso de linhas, precisamos tomar cuidado sempre com o intervalo de registros, se for o caso devemos executar vrias vezes o mesmo blocos de comandos, mudando o intervalo de linhas, deste forma nunca teremos problemas com a rea de LOG. 1.3.2. rea temporria do Banco de Dados Esta rea de utilidade exclusiva do Banco de Dados, a mesma utilizada em situaes que o SGDB precisa gerar arquivo temporrios para resolver as querys que estamos solicitando, normalmente operaes que exigem um determinada ordenao no resultado e no existe nenhum ndice correspondente. Devemos tomar cuidado com querys que necessitem rea de trabalho, por que elas estaro perdendo mais tempo com i/o de disco.

Programao SQL com Microsiga Protheus

1.4.

Normalizao de Base de Dados A normalizao de Base de dados tem como objetivo, definir a estrutura de entidades e seus atributos eliminando vrios problemas de definio de armazenamento dos dados, que no momento da implementao sero percebidos. Existe at cinco nveis de normalizao , mas somente utilizamos at o terceiro nvel, atualmente no existe equipamento capaz de administrar um Banco de dados normalizado totalmente. Com a pratica vamos perceber que a normalizao muito boa, mas o seu excesso gera problemas na programao, portanto temos sempre que fazer o mximo de normalizao mas devemos estar consciente de quanto conseguiremos de vantagem com isto. Existe casos que a desnormalizao uma das melhores solues, para facilitar o desenvolvimento da aplicao ou para ganharmos performance. A primeira forma normal diz que devemos definir a entidade e seus atributos, e destes atributos devemos definir um atributo chave de relao. Ex.: Entidade = Pedido Atributos = Data Emisso, Produto , Quantidade ,etc. Neste caso criaremos um campo cdigo que define a sua chave principal de relacionamento, criaremos o Cdigo. Nunca utilize mais de um coluna agregada com campo chave.(Este tipo de campo gera vrios problemas na programao SQL) A segunda forma normal diz que devemos subdividir os atributos que ocorrem mais de que uma vez, em uma outra entidade.(Esta entidade deve ter um campo chave, atendendo a primeira forma normal). Ex.: Entidade = Pedido Atributos = Nmero do Pedido (Chave), Data de Emisso, etc. Entidade = Itens do Pedido Atributos = Nmero, item (Nmero+item = chave), Quantidade, etc.. A terceira forma normal diz que devemos eliminar colunas que so concebidas por calculo de outras colunas de mesma entidade. Ex.: Entidade = Atributos = Pedido Total do Pedido, Quantidade Total, etc.

Programao SQL com Microsiga Protheus

1.5.

MER (Modelo Entidade Relacionamento) A partir da normalizao podemos definir as relaes estrangeiras de cada tabela, o MER uma modelo grfico que facilita a visualizao do desenvolvimento de aplicativo. Alm de apresentar todo o fluxo do dado dentro de um Banco de Dados. No caso do SigaAdvanced / AP5 voc ter em mos toda a estrutura do sistema quase impossvel, nestes casos o modelo feito por mdulo, e os pontos de integrao so replicados em cada MER do correspondente mdulo. Sempre que possvel ao desenvolver processos especficos no sistema procure desenhar o MER para detectar os problemas antes de sair desenvolvendo o produto.

Programao SQL com Microsiga Protheus

1.6.

Diferenas cruciais entre ambientes DBF e SQL 1.6.1. DBF Trabalha de forma posicional com acesso compartilhado Quando trabalhamos em um ambiente posicional, vrios regras de programao e definio como apresentamos acima, no precisam ser cumpridas. E mesmo assim os processos so rpidos e de fcil manuseio. Este ambiente utiliza o modo Shared de controle de arquivos do sistema operacional, ou seja, o servidor destes arquivos apenas um mero repositrio de dados, nada processado no Server. A desvantagem de utilizar estes arquivos normalmente taxada pelo problemas gerados com erro em arquivos de ndices e o nvel de segurana muito baixo.

1.6.2.

SQL Trabalha de forma relacional (Teoria dos conjuntos) e o acesso de forma centralizada Agora quando trabalhamos com Base de Dados Relacional, a estrutura totalmente diferente. Devemos atender vrias exigncias como controle de acesso ao dado que muito mais restrito, a programao feita na aplicao deve ser bem otimizada para evitar requisies desnecessrias, o SGDB precisa utilizar processamento do Servidor para recuperar um dado solicitado pela aplicao. O Banco de Dados suporta grande capacidade de armazenamento de dados, garantindo sua integridade como um todo. A desvantagem do Banco de Dados a necessidade de equipamentos potentes para atender a demanda.

Programao SQL com Microsiga Protheus

2. TopConnect e/ou DBAcess

2.1.

Informaes gerais O TOPConnect foi desenvolvido em linguagem C pela Microsiga e utilizado hoje pelo SigaAdvanced / AP5 atravs da linguagem ADVPL (Advanced Protheus Language). Ele tambm pode ser utilizado por aplicaes XBASE que queiram trocar a base de dados de DBF para SQL. Os gerenciadores de banco de dados hoje suportados so: MS-SQL Server 6.5 e 7.0 Oracle 7.3.4, 8.0.5 e 8i IBM Universal Database 5.0 DB2/400 Sybase Anywhere Sybase SQL-Server Informix ( MSSQL / MSSQL7 ) ( ORACLE ) ( DB2 ) ( AS/400 ) ( ANYWHERE / ANYSYB ) ( SYBASE ) ( INFORMIX )

O TOPConnect composto por um biblioteca replaceble database driver(RDD) e componentes de comunicao, sendo estes bibliotecas para aplicativos DOS e DLL's para aplicativos Windows. Estas bibliotecas devem ser linkeditadas com sua aplicao ADVPL para acessar o TOPConnect Server.

Programao SQL com Microsiga Protheus

Alguns comandos e funes avanadas so disponibilizadas para que seu aplicativo possa usufruir de todos os benefcios da plataforma cliente servidor, que so apresentados logo em seguida.

2.2.

Controle de tipo de dados ( Tabela TOP_FIELD ) Em um banco existem vrios tipos de dados (CHAR, VARCHAR, FLOAT, NUMBER, etc.) porem para existir uma unicidade no cdigo do Topconnect alguns dados so armazenados de forma diferente da definida na tabela SX3, porem a aplicao recebe o dado da forma como definido. Os tipos de dados que so tratados atualmente so o seguintes: Campos numricos - so armazenados em variveis do tipo FLOAT Campos Lgicos - so armazenados em variveis do tipo CHAR (0 ou 1) Campos Data - so armazenados em variveis do tipo CHAR com 8 bytes, no formato YYYYMMDD.

Os campo caracter no recebem nenhum tratamento. A tabela TOP_FIELD contem a descrio de todos os campos NAO-CARACTER, para que o TopConnect faca a converso dos dados quando da leitura dos mesmos. Ela alimentada na criao de uma tabela. Ex.: Tabela SA1010 A1_FILIAL C A1_COD C A1_LOJA C A1_DESC C A1_EMISSAO C A1_VEND1 C ... Ex.: Tabela TOP_FIELD 2 6 2 1 8 6

FIELD_TABLE FIELD_NAME FIELD_TYPE FIELD_PREC FIELD_DEC ------------------------------------------------------ -------------------------------- ------------------ ------------------ ---------------dbo.SA1010 A1_COMIS P 5 2 dbo.SA1010 A1_DESC P 2 0 dbo.SA1010 A1_LC P 14 2 dbo.SA1010 A1_EMISSAO D 8 0 dbo.SA1010 A1_MCOMPRA P 17 2 dbo.SA1010 A1_METR P 7 2 dbo.SA1010 @@HAS_DFT_VAL@@ X 0 0

... Neste exemplo vocs percebero que na tabela TOP_FIELD s existe os campo numricos, data e Lgico (no caso no existe nenhum usado pelo arquivo). Alerta! : Se voc for utilizar diretamente o Banco de dados voc precisa estar ciente que um campo numrico armazenado como um tipo float(MSSQL Server), Number(Oracle), etc. Por exemplo o valor 40,40 no banco pode estar armazenado como 40,39999999. Quando formos utilizar querys voc deve

Programao SQL com Microsiga Protheus

2.3.

utilizar a funo TCSETFIELD para resolver esta situao.(Veja funo TCSETFIELD). Importante tambm salientar que qualquer modificao efetuada em arquivo SX3 diretamente, ou seja, sem utilizar o configurador, voc pode Ter problemas com inconsistncia de estrutura da tabela do Banco de Dados e TOP_FIELD contra o dicionrio de dados. Para resolver este problema voc dever remover os dados da Tabela do Banco de dados, eliminar a tabela e deixa-la criar novamente e depois importar os dados via APPEND(Utilize SDU/CFG-AP5), ou voc pode ajustar o dicionrio de dados manualmente conforme estrutura no Banco de Dados. Opes de Visualizar os Eventos (Mensagens de Erros) A parte mais importante do Topconnect Manager o gerenciamento das mensagens de erros, estas mensagens no so do TopConnect mas sim, de cada Banco de Dados, ou seja, se voc obtiver um erro de Logon o erro que voc receber neste reporte, exatamente a mesma mensagem que o Banco de Dados estaria informando se voc utilizar um utilitrio do prprio Banco para fazer o Acesso. Na maioria dos problemas este logo de erros o ponto principal para descobrir o que esta acontecendo, entre o Topconnect e o Banco de dados. Voc s estar recebendo mensagens se o link entre o Banco de dados e o Topconnect estiver funcionando.

2.4.

Sistema de controle de Registros 2.4.1. Portabilidade Acreditamos que muitos j perguntaro por que da existncia da coluna R_E_C_N_O_ no Banco de dados, mesmo os que no conhecem esta coluna tem como objetivo manter a portabilidade de uma Base DBF e Banco ADS para um Banco de Dados qualquer e tambm entre Banco de dados. Se voc possui sua aplicao trabalhando em DBF , voc pode porta-la independente de modificaes

Programao SQL com Microsiga Protheus

para uma Base SQL, e se voc j esta em uma base SQL do tipo MSSQL SQL Server e gostaria de porta-la para ORACLE, voc pode fazer isto sem nenhum problema. Alerta! : Se voc possui programas especficos desenvolvidos (RDMAKES), voc precisa que os mesmos estejam desenvolvidos nos padres de compatibilidade exigidos pela Microsiga. Voc ver mais adiante exemplos de programas e uma apresentao mais completa deste assunto. 2.4.2. Funo da coluna R_E_C_N_O_ A Coluna R_E_C_N_O_, tem por objetivo principal guardar um nmero seqencial de controle de registro, mais conhecido como ID (identificador). Este identificador utilizado pela aplicao na pesquisa e posicionamento de registro. Esta coluna no possui repetio, ela sempre preenchida com o valor mximo da coluna R_E_C_N_O_ + 1 nas prximas inseres. Esta operao feita pelo TopConnect , se voc utiliza outros produtos que fazem insero na Base de Dados do Sigaadvanced / AP5 voc deve seguir as orientaes do Captulo Integraes com outros aplicativos. 2.4.2.1. Limite de registros O limite de registros em uma tabela de 2,147,483,648 , este nmero normalmente deve ser levado em considerao para as tabelas que recebem muita insero de registro seguidas de muitas excluses fsica do registro. 2.4.2.2. Renumerao da coluna RECNO Quando os registros so deletados pelo sistema, os mesmos so apenas marcados, para excluso fsica acontece em quando executamos a operao que conhecemos com Pack de registros. Aps esta operao a coluna R_E_C_N_O_ no renumerada. No existe a necessidade de fazer a renumerao desta coluna, a no ser que voc esteja perto de estourar o maior nmero possvel nesta coluna. Neste caso voc precisar extrair os dados do Banco de Dados para uma Base DBF e logo em seguida subir a Base novamente para o Banco de Dados, automaticamente a coluna R_E_C_N_O_ ser ajustada. 2.4.3. Controle dos registros deletados (Coluna D_E_L_E_T_) Toda excluso de registro feita no Banco de Dados ou em qualquer plataforma do SigaAdvanced / AP5, s feita logicamente, ou seja, o registro marcado como excludo (delete), e esta marca feita utilizando o campo chamado D_E_L_E_T_ , a mesma preenchida com (*) Asterisco, caso contrrio a coluna permanece com o contedo em branco. Alerta! : Quando voc utiliza o comando Set Delet on/off, o TopConnect estar tratando o dado para voc, mas se voc utiliza querys para recuperao de dados voc dever tratar este coluna (Mais informaes sobre o tratamento da coluna D_E_L_E_T_ ser apresentado em exemplos de querys em RDMAKES.

Programao SQL com Microsiga Protheus

2.5.

Constraints do Banco de dados que so criados automaticamente

2.5.1.

Criao da Estrutura de tabelas A estrutura de cada tabela do SigaAdvacend criada automaticamente, tendo em vista a no existncia da mesma no Banco de Dados. Para isto o usurio criado para o TopConnect acessar o banco de dados precisa Ter permisso de criao de tabelas, de preferncia a permisso de DBA. Neste momento a tabela TOP_FIELD estar sendo alimentada com todos os campos numricos, datas e Lgicos. Alerta! : Aps o primeiro usurio fazer a conexo com o TopConnect e a parte de verificao de tabelas j foi executada, as referncias de cada tabela selecionado no .mnu para abertura estaro em memria no TopConnect, portanto se por acaso alguma tabela for removida diretamente por um utilitrio do Banco de Dados o TopConnect ter uma informao no coerente, voc deve reiniciar o servio do Topconnect (Parando / iniciando o Servio).

2.5.2.

ndices Os ndices so criados imediatamente aps a criao da estrutura das tabelas. Os ndices criados partem do arquivo de ndices do SigaAdvanced / AP5, que o arquivo SINDEX. Existe um ndice que criado apenas uma vez no momento em que a tabela criada, este ndice tem como formao do nome = <nome da tabela> + _RECNO , este ndice e sempre composto da coluna R_E_C_N_O_ e no permite duplicidade. Alerta!: Nunca remova os ndices das tabelas, principalmente o ndice RECNO que no ser criado pelo TopConnect quando a tabela j existe. Se voc criou um ndice pelo SINDEX e depois percebeu que montou errado ou precisa elimina-lo, voc precisa elimin-lo do SINDEX e tambm do Banco de Dados.

2.5.3.

Defaults So constraints de validao de campos que no so informados, nos comandos de insero e alterao, ou seja, se voc no possui os defaults criados o Banco de Dados estar deixando estes campos com valor nulo. Os defaults so criados no momento da criao das tabelas. Alerta!: Se voc fizer qualquer operao de transferncia via Banco de Dados que no transfira os Defaults, e logo em seguida voc utilizar o sistema , estar correndo risco de inserir nulos na Base de Dados. Se isto acontecer voc poder Ter problemas com o TopConnect Server, ele poder travar ou derrubar conexes com dados indevidos. A soluo neste caso utilizar o utilitrio DEFAULT que esta disponvel no site da Microsiga.

Programao SQL com Microsiga Protheus

Este um exemplo de script para MSSQL Server que o TopConnect estar disparando para o Banco de Dados quando a tabela SA1990 no existir no Banco.
CREATE TABLE [dbo].[SA1990] ( [A1_FILIAL] [varchar] (2) NULL , [A1_COD] [varchar] (6) NULL , [A1_LOJA] [varchar] (2) NULL , [A1_NOME] [varchar] (40) NULL , [A1_NREDUZ] [varchar] (20) NULL , [A1_TIPO] [varchar] (1) NULL , ... [D_E_L_E_T_] [varchar] (1) NULL , [R_E_C_N_O_] [int] NULL ) GO CREATE UNIQUE CLUSTERED INDEX [SA1990_RECNO] ON [dbo].[SA1990]([R_E_C_N_O_]) ON [PRIMARY] GO ALTER TABLE [dbo].[SA1990] WITH NOCHECK ADD CONSTRAINT [DF__SA1990__A1_FILIA__06648751] DEFAULT (' ') FOR [A1_FILIAL], CONSTRAINT [DF__SA1990__A1_COD__0758AB8A] DEFAULT (' ') FOR [A1_COD], CONSTRAINT [DF__SA1990__A1_LOJA__084CCFC3] DEFAULT (' ') FOR [A1_LOJA], CONSTRAINT [DF__SA1990__A1_NOME__0940F3FC] DEFAULT (' ') FOR [A1_NOME], CONSTRAINT [DF__SA1990__A1_NREDU__0A351835] DEFAULT (' ') FOR [A1_NREDUZ], CONSTRAINT [DF__SA1990__A1_TIPO__0B293C6E] DEFAULT (' ') FOR [A1_TIPO], ... CONSTRAINT [DF__SA1990__D_E_L_E___6E57F396] DEFAULT (' ') FOR [D_E_L_E_T_], CONSTRAINT [DF__SA1990__R_E_C_N___6F4C17CF] DEFAULT (0) FOR [R_E_C_N_O_] GO CREATE INDEX [SA19901] ON [dbo].[SA1990]([A1_FILIAL], [A1_COD], [A1_LOJA], [R_E_C_N_O_]) ON [PRIMARY] GO CREATE INDEX [SA19902] ON [dbo].[SA1990]([A1_FILIAL], [A1_NOME], [A1_LOJA], [R_E_C_N_O_]) ON [PRIMARY] GO CREATE INDEX [SA19903] ON [dbo].[SA1990]([A1_FILIAL], [A1_CGC], [R_E_C_N_O_]) ON [PRIMARY] GO CREATE INDEX [SA19904] ON [dbo].[SA1990]([A1_FILIAL], [A1_TEL], [R_E_C_N_O_]) ON [PRIMARY] GO

Programao SQL com Microsiga Protheus

2.5.4.

Problemas com contedo Nulo Os Bancos de dados possuem o contedo nulo para todos os tipo de campos, mas o nosso sistema no os utiliza, se por ventura qualquer tabela tenha algumas linhas com alguma coluna com o valor nulo, isto pode provocar problemas que aparentam ser erro de ndice, como ex. Voc tem a tabela de pedidos que com os pedidos 000001,000002 e sua tabela por qualquer motivo no tem os contraints de defaults na coluna filial, agora voc faz a insero do pedido 0000003 o sistema ir apresentar um Browse ordenado por pedido da seguinte forma: Considere a filial do arquivo de pedido de forma compartilhada.(Filiial=Branco) Filial Pedido --------- -----------Null 000003 000001 000002 Neste exemplo voc percebe que o pedido 000003 aparece em primeira ordem, sendo o ndice filial+pedido, ou seja, o valor nulo na tabela ASCII(Binary Order) aparece antes do caracter espao em branco. Este problema muitas vezes causa a impresso que o ndice esta com problemas, por que a tela de Browse do Sigaadvanced / AP5 no apresenta a coluna filial. Alerta!: Tabelas com contedo nulo, geram vrios problemas no sistema, provavelmente deve gerar erros no TopConnect que o mesmo estar derrubando as conexes quando elas fizerem acesso a este tipo de contedo (nulo). Existe um utilitrio que ajusta este problema se voc o tiver, o mesmo esta disponvel no site da Microsiga, com o nome de DEFAULT.exe

Programao SQL com Microsiga Protheus

2.6.

Manuteno do Banco de dados 2.6.1. Aumentando a performance executando a operao de PACK Esporadicamente voc deve fazer uma manuteno no Banco de dados, quanto as registros excludos logicamente, os mesmo devem ser excludos fisicamente, por que a sua existncia em grande quantidade e de forma seqencial gera um grave problema de performance no acesso aos dados. Alerta!: Se voc tiver este problema, utilize a operao de Pack do utilitrio SDU na tabela que possui registros excludos , ou utilize o programa fonte PACK para fazer esta operao em todas as tabelas. Segue abaixo exemplo de fonte em RDMAKE, para fazer um pack em qualquer Banco de dados. Exemplo de fonte em ADVPL para executar um Pack no Banco de Dados , esta rotina j prev problema de estouro da rea de LOG/RollBack de um Back de Dados
/* Funo PACK Autor Emerson/Vicente Data 16.12.99 Descrio Rotina RDMAKE para eliminar os registros deletados do banco Uso RDMake <Programa.Ext> -w Exemplo RDMake Pack.prw */ @ 96,42 TO 323,505 DIALOG oDlg5 TITLE "Rotina de Pack" @ 8,10 TO 84,222 @ 91,168 BMPBUTTON TYPE 1 ACTION Execute(OkProc) @ 91,196 BMPBUTTON TYPE 2 ACTION Close(oDlg5) @ 23,14 SAY "Este programa ira fazer um pack em todos arquivos abertos pelo Advanced." ACTIVATE DIALOG oDlg5 Return nil Function OkProc Close(oDlg5) Processa( {|| Execute(RunProc) } ) Return /* Funcao RunProc Descrio Executa o Processamento */ Function RunProc DbSelectArea("SX2") NrecnoSX2 := SX2->(Recno()) DbGoTop() ProcRegua(reccount()) While !Eof() If Select(SX2->X2_CHAVE) > 0 cQuery := 'SELECT MAX(R_E_C_N_O_) RECNO FROM ' + SX2->X2_ARQUIVO dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), 'CONT', .F., .T.) nCont := 1 While nCont <= CONT->RECNO cQuery := "DELETE FROM "+SX2->X2_ARQUIVO cQuery := cQuery + " WHERE D_E_L_E_T_ = '*'" cQuery := cQuery + " AND R_E_C_N_O_ between "+Str(nCont)+" AND "+Str(nCont+1024) nCont := nCont + 1024 TCSQLEXEC(cQuery) Enddo DbSelectArea("CONT") DbCloseArea() Endif

Programao SQL com Microsiga Protheus

DbSelectArea("SX2") dbSkip() incproc() Enddo return

2.7.

DBFNTX x TopConnect 2.7.1. ndices de produo Todos os SGDB's utilizam o conceito de ndices de produo portando uma aplicao que utilize o TOPConnect no necessita ter todos os ndices abertos para que os mesmos sejam atualizados. 2.7.2. Funes em chaves de ndices Devido ao fato de os SGDB's no suportarem o uso de funes nos ndices o TOPConnect no tem como suportar este tipo de implementao. As nicas funes suportadas so STR e DTOS. Para a criao de ndices que contenham campos caracter e numricos na chave apenas uma regra deve ser obedecida. A funo STR deve obrigatoriamente receber como parmetros valores idnticos a definio da tabela. Exemplo: Em um arquivo com a seguinte estrutura: CAMPO1 Caracter de 10 posies. CAMPO2 Numrico de 14 Posies com 2 decimais. Para se criar um ndice que ordene o arquivo por CAMPO1 + CAMPO2 dever o seguinte comando ser utilizado: INDEX ON CAMPO1+STR(CAMPO2,14,2) TO ARQIND No caso do SigaAdvanced voc deve colocar o ndice na tabela SINDEX.

2.7.3.

ndices condicionais Nos gerenciadores de banco de dados no existe a figura dos ndices condicionais. Para se obter resultados semelhantes aos ndices condicionais o TOPConnect agregou nova funcionalidade ao filtro do SigaAdvanced / AP5. Considere uma aplicao que crie o seguinte ndice: INDEX ON CODIGO,NOME FOR ESTADO = "SP" AND SALDO > 10000 Com o TOPConnect este ndice seria o mesmo que: SET FILTER TO ESTADO = "SP" .AND. SALDO > 10000 .AND. ORDERBY(CODIGO,NOME)

Programao SQL com Microsiga Protheus

dbSetOrder(0) O TOPConnect permite o uso da funo OrderBy nos filtros o que reproduz o mesmo efeito de um ndice filtrado. O TOPConnect disponibiliza os dados na ordem solicitada pela clusula OrderBy na Ordem 0 do arquivo, no interferindo assim com os ndices do arquivo. 2.7.4. Chaves numricas compostas Os SGDB's no suportam ndices que contenham expresses ADVPL onde dois campos numricos so somados na chave. Exemplo: INDEX ON CPOVAL1 + CPOVAL2 TO ARQIND 2.7.5. Expresses de filtro com funes e variveis Uma vez que o TOPConnect utiliza a arquitetura Cliente/Servidor o servidor no tem como avaliar o contedo de uma varivel de memria ou o retorno de uma funo do cliente. O TOPConnect permite a utilizao de variveis e funes nos filtros porm necessrio ter em mente que a avaliao deste filtro ocorrer no cliente e no no servidor o que poder resultar em problemas de performance. Analisando o seguinte filtro : SET FILTER TO CODIGO > "01000" .AND. CODIGO < "02000" Este filtro contem apenas campos e constantes o que permite que sua avaliao seja feita no servidor e que apenas os registros que obedeam ao filtro venha para o cliente. Agora este: SET FILTER TO CODIGO > RetornaCodigo() Considerando que RetornaCodigo uma funo ADVPL da aplicao todas as linhas deste arquivo sero avaliadas no cliente. Visando minimizar os problemas de performance o TOPConnect conta com um sistema chamado SFE (Smart Filter Engine) o que faz com que o mximo possvel de uma expresso seja avaliada no servidor. Pr exemplo: SET FILTER TO ESTADO = 'SP' .AND. SALDO > 10000 .AND. CODIGO > RetornaCodigo() Nesta expresso somente viro para o cliente os registros onde os campos ESTADO e SALDO obedeam ao filtro e ento o campo CODIGO ser avaliado no cliente.

Programao SQL com Microsiga Protheus

2.8.

Comandos Neste captulo mencionaremos apenas os comandos da linguagem ADVPL que tem a sua funcionalidade alterada ou complementada e os novos comandos implementados pelo TOPConnect via RDD. Para a utilizao destes comandos o programa dever conter a seguinte instruo: #INCLUDE "TOPCONN.CH" 2.8.1. APPEND FROM Em uma aplicao ADVPL o comando APPEND FROM utilizado para se inserir registros na Work Area corrente com registros vindos de outro arquivo DBF. No TOPConnect o comando APPEND FROM importara registros de um arquivo DBF para uma tabela do banco de dados. No ADVPL opcionalmente poder ser especificado o parmetro VIA "TOPCONN" o que far com que registros de uma tabela sejam inseridos na Work Area corrente. Exemplo SELECT CLIENTES //Importa registros de um DBF APPEND FROM c:\temp\newcli.dbf Ou SELECT CLIENTES //Importa registros da tabela NEWCLI APPEND FROM NEWCLI VIA "TOPCONN" 2.8.2. COPY TO Em uma aplicao ADVPL o comando COPY TO utilizado para se copiar a estrutura e os registros da Work Area corrente para um arquivo DBF. No TOPConnect o comando COPY TO utilizado para exportar a estrutura e os registros de uma tabela do banco de dados para um arquivo DBF. Assim como no comando APPEND FROM no ADVPL o parmetro opcional VIA tambm pode ser especificado.

Programao SQL com Microsiga Protheus

2.8.3.

USE Abre uma tabela no banco de dados. Sintaxe: USE [<xcTable> [INDEX <xcIndex list>] [ALIAS <xcAlias>] [EXCLUSIVE | SHARED] [NEW] [READONLY] VIA "TOPCONN" <cTable> O nome da tabela a ser aberta. INDEX <cIndex List> Especifica o nome de 1 a 15 ndices a serem abertos na Work Area corrente. ALIAS < cAlias> Especifica um nome para a Work Area onde a tabela ser aberta EXCLUSIVE Especifica que apenas este usurio ter acesso a esta tabela. Todas as outras tentativas de colocar esta mesma tabela em uso falharo. SHARED Especifica que a tabela ser aberta em modo compartilhado. NEW Abre a tabela <cTable> na prxima Work Area disponvel. Se esta clausula no for especificada, <xcTable> ser na Work Area corrente. READONLY Abre <cTable> apenas para leitura. VIA "TOPCONN" Este parmetro indica ao ADVPL que esta Work Area ser gerenciada pelo TOPconnect. Se nenhum parmetro for especificado a tabela aberta na Work Area corrente ser fechada. Exemplo //Abre a tabela de Clientes em uma nova Work Area USE clientes SHARED NEW VIA "TOPCONN"

2.8.4.

BEGIN, COMMIT, ROLLBACK TRANSACTION Marca o incio de uma transao no banco de dados. Desde o ponto em que uma aplicao executa um BEGIN TRANSACTION cada APPEND ou REPLACE encontrado at um COMMIT TRANSACTION ou ROLLBACK TRANSACTION sero considerados uma nica transao. Os demais usurios somente tero acesso aos novos registros ou s modificaes aps um COMMIT TRANSACTION Exemplo #INCLUDE "TOPCONN.CH" SELECT CLIENTES if !Rlock() Alert("Registro em uso!") Return .f. Endif BEGIN TRANSACTION //Atualiza saldo no cadastro de clientes REPLACE SALDO WITH SALDO nValor

Programao SQL com Microsiga Protheus

//Adiciona um pedido SELECT PEDIDOS APPEND BLANK REPLACE NUM WITH cNumero REPLACE VALOR WITH nValor SELECT ITEMS APPEND BLANK REPLACE NUM WITH cNumero REPLACE QUANT WITH nQuant ..... APPEND BLANK REPLACE NUM WITH cNumero REPLACE QUANT WITH nQuant ..... COMMIT TRANSACTION

Programao SQL com Microsiga Protheus

2.9.

Funes 2.9.1. TCCANOPEN Verifica a existncia de tabelas e ndices no servidor. Sintaxe TCCanOpen(cTable [, cIndice]) =>lgico Exemplo //Testa a existncia da tabela customer IF !TCCanOpen("CUSTOMER") dbCreate("CUSTOMER", aStru, "TOPCONN") ENDIF USE CUSTOMER SHARED NEW VIA "TOPCONN" //Testa a existncia do ndice IF !TCCanOpen("CUSTOMER","CUSTCOD") INDEX ON CODIGO TO CUSTCOD ELSE SET INDEX TO CUSTCOD ENDIF ... 2.9.2. TCCONTYPE Especifica o protocolo de comunicao a ser utilizado pelo TOPConnect. Sintaxe TCConType(<cType>) Onde <cType> pode ser: TCPIP Utiliza o protocolo TCP/IP. NPIPE Utiliza o protocolo Named Pipes. APPC Utiliza o protocolo APPC. BRIDGE Utiliza o utilitrio TOPBrigde para comunicao de estaes DOS NPIPE com servidor AS/400 utilizando TCP/IP. Exemplo #INCLUDE "TOPCONN.CH" //Especifica conexo TCP/IP TCConType("TCPIP") //Conecta-se ao ambiente SIGAADV no Microsoft SQL-Server TCLink("MSSQL/SIGAADV") 2.9.3. TCDELFILE Exclui uma tabela no servidor. Sintaxe TCDelFile(<cTable>) Onde <cTable> o nome da tabela a ser excluda. Exemplo

Programao SQL com Microsiga Protheus

TCDelFile("CUSTOMER")

2.9.4.

TCGETDB Retorna o Tipo de Banco de Dados corrente cDataBase := TCGETDB() Onde os valores de retorno so : MSSQL MSSQL7 ORACLE DB2 SYBASE ANYWHERE ANYSYBASE INFORMIX Microsoft SQL-Server 6.5 Microsoft SQL-Server 7.0 Oracle IBM Universal Database Sybase SQL-Server Sybase SQL Anywhere Sybase SQL Anywhere (Emulando Sybase SQL-Server) Informix

2.9.5.

TCLINK Abre uma conexo com o Servidor TOPConnect. Sintaxe nCon := TCLink(<cConectString>,<cServer>) Onde o parmetro <cConnectString> composto por: Para TOPConnect NT : Nome do Banco de Dados / Nome do Ambiente Para TOPConnect/400: Nome do Ambiente O parmetro <cServer> contm: Para conexes NamedPipe, APPC e Brigde : O nome do servidor TOPConnect Para conexes TCP/IP : O endereo IP do servidor TOPConnect Para o TOPConnect NT acessando Oracle, um ambiente o nome do Alias criado com o utilitrio SQL-Net. Para o TOPConnect NT acessando os demais SGDB's um ambiente um System DSN criado atravs do ODBC Data Source Administrator. Para o TOPConnect AS/400 um ambiente uma Library criada atravs do comando CRTTOPENV do TOPConnect. Para informaes sobre a criao de ambientes consulte o manual de instalao do TOPConnect. Esta a lista de Bancos de Dados hoje suportados e seus respectivos nomes compor a string de conexo com o TOPConnect NT: Microsoft SQL-Server 6.5 MSSQL

Programao SQL com Microsiga Protheus

Microsoft SQL-Server 7.0 MSSQL7 Oracle ORACLE IBM Universal Database DB2 Sybase SQL-Server SYBASE Sybase SQL Anywhere ANYWHERE Sybase SQL Anywhere (Emulando Sybase SQL-Server) ANYSYBASE Informix INFORMIX A funo TCLink retorna ou o nmero da conexo ou um valor negativo contendo o cdigo do erro. Exemplo //Conecta-se ao Microsoft SQL-Server no ambiente SIGAADV //Protocolo Named Pipes TCConType("NPIPE") nCon := TCLink("MSSQL/SIGAADV","TOPSRV") if nCon < 0 //Conexes com retorno < 0 significam erro Alert("Falha de conexo com o TOPConnect") endif //Protocolo TCP/IP TCConType("TCPIP") //Conecta-se ao Oracle no ambiente TESTES nCon := TCLink("ORACLE/TESTES",172.16.1.2) //Protocolo APPC //Conecta-se ao AS/400 no ambiente PRODUCAO nCon := TCLink("PRODUCAO","TOP400")

Programao SQL com Microsiga Protheus

2.9.6.

TCQUERY Executa uma Query no servidor e coloca seu retorno em uma WorkArea. Sintaxe: TCQUERY [<cSQLExpr> [ALIAS <xcAlias>] [NEW] VIA "TOPCONN" <cSQLExpr> Expresso SQL a ser enviada ao servidor. ALIAS < cAlias> Especifica um nome para a Work Area a ser aberta NEW Abre a tabela <cTable> na prxima Work Area disponvel. Se esta clausula no for especificada, <xcTable> ser na Work Area corrente. VIA "TOPCONN" Este parmetro indica ao ADVPL que esta Work Area ser gerenciada pelo TOPconnect. A Work Area criada com o comando TCQUERY READ-ONLY, portanto no permitido o uso de APPEND's ou REPLACE's. O TOPConnect tem apenas um cursor para a Query executada portando apenas os seguintes comandos so suportados em uma Work Area criada com TCQUERY: GO TOP - DbGoTop() GO BOTTOM - DbGoBottom() SKIP - DbSkip() Eof() Bof() Obs: Ao executar uma Query que retorne um ou mais valores calculados, o nome dos campos da WorkArea sero COLUMN1, COLUMN2... COLUMNn. Exemplo //Abre a tabela de Clientes em uma nova Work Area cQuery := "SELECT a.codigo, b.nome FROM CLIENTES a, CLIDATA b ; WHERE a.CODIGO = b.CODIGO ORDER BY CODIGO,NOME" TCQUERY cQuery ALIAS CLIENTES NEW VIA "TOPCONN" dbGoTop() While !Eof() ? CODIGO,NOME dbSkip() end USE cQuery := 'SELECT SUM(VALOR),SUM(SALDO) FROM CUSTOMER' TCQUERY cQuery NEW VIA "TOPCONN" ?COLUMN1 //Somatoria dos valores ?COLUMN2 //Somatoria dos saldos

Programao SQL com Microsiga Protheus

2.9.7.

TCQUIT Encerra todas as conexes com o TOPConnect Sintaxe TCQuit()

2.9.8.

TCSETCONN Seleciona conexo ativa. Sintaxe TCSETCONN(<nConn>) Onde <nConn> o nmero da conexo. Exemplo // Abre conexo com o ambiente de Produo nCon1 := TCLink("MSSQL/PRODUCAO") if nCon1 < 0 Alert("Falha conectando ambiente de Produo") QUIT endif // Abre conexo com o ambiente de Testes nCon2 := TCLink("MSSQL/TESTES") if nCon2 < 0 then Alert("falha conectando ambiente de Testes") QUIT endif TCSetConn(nCon1) //Abre tabela de Clientes no ambiente de produo USE CUSTOMER ALIAS PROD SHARED NEW VIA "TOPCONN" TCSetConn(nCon2) //Abre tabela de Clientes no ambiente de testes USE CUSTOMER ALIAS TEST SHARED NEW VIA "TOPCONN" ...

2.9.9.

TCSETFIELD Esta funo serve como apoio ao comando TCQUERY, na recuperao de campos tipo NUMERIC, DATE e LOGICAL, pois os mesmos so gravados fisicamente no Banco de Dados como caracteres, e no caso dos numricos como float. Sintaxe TCSetField(<cAlias>, <cField> ,<cType>, [<Prec.Inteira>,<Prec.Decimal>] ) Onde <cAlias> o alias da WorkArea, <cField> o nome do campo e <cType> o tipo desejado para o campo.

Programao SQL com Microsiga Protheus

Exemplo TCQUERY "SELECT NOME, DATA, MARRIED, VALOR FROM CUSTOMER" ALIAS QUERY VIA "TOPCONN" TCSetField("QUERY","DATA","D") TCSetField("QUERY","VALOR","N",12,2) Dentro de um programa ADVPL j podemos considerar como um campo data no mais um campo caracter como o seu armazenamento. O campo Data s retornado como um campo caracter por que estamos utilizando a funo TCQUERY, se no o tratamento automtico. 2.9.10. TCSPEXEC Executa uma Stored Procedure no Banco de Dados. Devido a uma limitao em alguns dos Bancos de Dados suportados na obteno dos tipos de parmetros (se so de INPUT e/ou OUTPUT) todos as Stored Procedures a serem executadas atravs do TOPConnect devero obedecer o seguinte padro de nomenclatura de seus parmetros : Parmetros de INPUT devem comear com IN_... Ex. IN_VALOR. Parmetros de OUTPUT devem comear com OUT_... Ex. OUT_CODIGO Aps a execuo de uma Stored Procedure o TOPConnect retornar ao ADVPL um array com 'n' elementos, onde n o nmero de parmetros de OUTPUT da Stored Procedure. Sintaxe <aRet> := TCSPExec(<cSPName>,[<xParam1>,<xParam2>...<xParamN>]) Onde <aRet> um array com os parmetros de retorno da Stored Procedure e <cSPName> o nome da Stored Procedure a ser executada e os demais parmetros variam conforme a definio da Stored Procedure. Exemplo //Verifica se a Stored Procedure Teste existe no Servidor If TCSPExist("TESTE") //Executa a Stored Procedure Teste aRet := TCSPExec("TESTE","JOSE",1000) if aRet <> nil For i:= 1 to Len(aRet) //Mostra os valores de retorno ?aRet[i] Next Else ?"Erro executando Stored Procedure" ?"Mensagem: "+TCSQLError() Endif EndIf

Programao SQL com Microsiga Protheus

2.9.11. TCSPEXIST Verifica a existncia de uma determinada Stored Procedure no servidor. Sintaxe <lExist> := TCSPExist(<cSPName>) Onde <lExist> indica se a Stored Procedure existe ou no e <cSPName> o nome da Stored Procedure procurada. Exemplo If SPExist("CALCCUSTO") TCSPExec("CALCCUSTO") Endif 2.9.12. TCSQLERROR Retorna o ltimo erro registrado pelo TOPConnect durante a execuo de uma Query. Sintaxe <cError> := TCSQLError() Onde <cError> a mensagem de erro. Exemplo If TCSQLExec("UPDATE CUSTOMER SET VALUE=0") < 0 then ?TCSQLError() Endif

OBS: Esta a mesma mensagem que esta registrada no log de eventos do TopConnect Manager.

2.9.13. TCSQLEXEC Executa comandos SQL no servidor. Sintaxe <nRet> := TCSQLExec(<cCommand>) Onde <nRet> retorna um valor negativo em caso de erros e <cCommand> e o comando SQL a ser executado. Exemplo TCSQLExec("UPDATE CUSTOMER SET VALUE=0)

Programao SQL com Microsiga Protheus

2.9.14. TCSRVTYPE Retorna o Tipo do Servidor onde esta sendo executado o TOPConnect. Sintaxe <cType> := TCSrvType() Onde <cType> o tipo do servidor podendo Ter seu contedo igual a "WinNT" ou "AS/400". Exemplo TCLink("MSSQL/TESTE","TOPSRV") ?TCSrvtype() 2.9.15. TCUNLINK Encerra uma conexo com o TOPConnect. Sintaxe TCUnlink(<nConn>) Onde <nConn> o nmero da conexo retornado pela funo TCLink() Exemplo TCConType("NPIPE") nConn := TCLink("MSSQL/TOPCONN","TOPSRV") TCUnLink(nConn) 2.9.16. TCCHKOBJ* Verifica a existncia de um objeto no servidor AS/400 Sintaxe <nError> := TCChkObj(<cObj>,<cLibrary>,<cType>) Onde: <nError> 0 quando o objeto existe ou o nmero do erro no AS/400. <cLibrary> o nome da biblioteca que deve conter o objeto. <cType> o tipo de objeto AS/400. Ex: *FILE, *PGM, etc. Exemplo nError := TCChkObj("CALCCUST","PRODUCAO","*PGM") ESTA FUNO SE APLICA APENAS PARA O TOPCONNECT AS/400 ( * )Funes apenas para o TOPConnect rodando em servidores AS/400.

Programao SQL com Microsiga Protheus

2.9.17. TCEXEERROR* Retorna uma string com a mensagem de erro retornada pela execuo das funes TCPGMEXE() e TCSYSEXE(). Sintaxe <cError> := TCExeError() Onde <cError> a string com a mensagem de erro. Exemplo ?TCExeError() ( * )Funes apenas para o TOPConnect rodando em servidores AS/400.

2.9.18. TCPGMEXE* Executa um programa no servidor AS/400 TCPGMEXE( program name ) ( * )Funes apenas para o TOPConnect rodando em servidores AS/400. 2.9.19. TCSYSEXE* cCommand := "CRTCBLMOD MODULE("+cTDataBase+"/"+ cName+"F"+cCrrEmp+") " cCommand += "SRCFILE("+cTDataBase+"/QSPSRC) " cCommand += "SRCMBR("+cName+"F"+cCrrEmp+") " cCommand += "REPLACE(*YES)" TCSysExe( cCommand )

( * )Funes apenas para o TOPConnect rodando em servidores AS/400.

Programao SQL com Microsiga Protheus

2.10. Performance 2.10.1. Otimizando seu cdigo A linguagem ADVPL tem um enfoque posicional, recuperando os dados utilizando orientao a registros, enquanto aos Bancos de Dados SQL recuperam os dados por blocos de dados. Devido a esta diferena conceitual, vrios pontos devem ser levados em considerao para que se possa obter uma boa performance e utilizar os recursos de uma aplicao Client/Server. 2.10.2. Leitura Sequencial Operaes de leitura seqencial de uma tabela podem levar a problemas de performance. Vamos analisar o seguinte cdigo: dbSelectArea("CLIENTES") nValor := 0 Do While !Eof() If ESTADO = "SP" nValor += SALDO Endif DbSkip() End O cdigo acima far com que todas as linhas(registros) da tabela venham para o Client, o que ir gerar um nmero de Queries no servidor igual ao nmero de linhas da tabela e cada uma delas ir recuperar apenas uma linha, subtilizando a capacidade de processamento do servidor. O cdigo acima poderia ser substitudo por: TCQUERY "SELECT SUM(SALDO) ; FROM CLIENTES ; WHERE ESTADO = 'SP'" NEW nValor := COLUMN1 Com a utilizao do comando TCQUERY todo a somatria feita no servidor retornando assim para a aplicao apenas uma linha com o resultado desejado.

Programao SQL com Microsiga Protheus

2.10.3. O uso de filtros O uso de filtros em aplicaes ADVPL so conhecidos como fonte de problemas de performance. Isto se deve ao fato de que todos os registros so avaliados pela estao. O mesmo no ocorre utilizando o TOPConnect, pois o filtro avaliado pelo prprio servidor vindo para a estao apenas os registros que respeitem a condio do filtro. Para que um filtro tenha uma boa performance necessrio que a expresso do filtro corresponda a um ndice no servidor, caso contrrio, para poder avaliar o filtro o servidor SQL ter que ler linha a linha da tabela. 2.10.4. Stored Procedures O uso de Stored Procedures a maneira mais eficiente de uma aplicao se utilizar dos benefcios da arquitetura Cliente/Servidor. O TOPConnect suporta o uso de Stored Procedures conforme documentado na funo TCSPExec()

Programao SQL com Microsiga Protheus

2.11. Integrao com outros aplicativos 2.11.1. Incluindo registros nas tabelas do SigaAdvanced / AP5 As tabelas criadas no Banco de dados pode receber inseres de outros aplicativos, esta insero deve ser feita contemplando as seguintes operaes : Antes de inserir o registro voc deve obter o nmero mximo da coluna R_E_C_N_O_ existente na tabela Deste nmero voc deve somar 1 Logo em seguida fazer a insero propriamente dita do registro Se o registro no for inserido com sucesso voc deve voltar ao primeiro passo.

Alerta!: Em alguns Bancos de Dados o Topconnect estar registrando no log de eventos do Topconnect Manager, um mensagem de alerta dizendo que existe duplicidade de registro. (Desconsiderar esta mensagem, de tempos em tempos voc deve limpar o Log do TopConnect.

2.11.2. Excluindo registros ( Sempre Marcar ) Quando houver necessidade de excluso de registro por outros aplicativos voc deve apenas fazer uma operao de alterao do registro, colocando o smbolo de * na coluna D_E_L_E_T_, principalmente se esta operao for concorrente com o SigaAdvanced / AP5.

2.11.3. Vantagens e Desvantagens As vantagens deste processo a agilidade na integrao entre os sistemas, no existe a necessidade de gerar arquivos textos, para depois fazermos a integrao. Principalmente em situaes on-line , utilizar o recurso do Banco uma das melhores sadas. As desvantagens deste processo, so que voc deve estar ciente de todas atualizaes que so feitas na base de dados no sistema, j que o sistema esta desta forma vulnervel a problemas inesperados. Normalmente aconselhamos a sempre fazer a atualizao em tabelas especficas e depois criar rotinas pelo sistema o qual repassaro os dados destas tabelas para as tabelas definitivas, desta forma vamos evitar problemas na atualizao de verso, ou at em alguma mudana de estrutura que o configurador faa.(Voc estar perdendo os triggers desta tabela).

Programao SQL com Microsiga Protheus

3. Ferramenta importante 3.1. Instalador de Stored Procedures no Banco de Dados

Alguns clientes utilizam rotinas como Stored Procedures para agilizar alguns processos crticos do sistema, para instalao destas Storeds Procedures voc devem possuir o arquivo com o nome de SIGAXXX.SPS, onde o XXX o tipo de Banco de Dados que o Cliente estar utilizando ex: SIGASQ7 (MSSQL 7.0), SIGAIFX (INFORMIX), SIGAORA (ORACLE)

Aps a confirmao desta operao todas as Procedures que estiverem disponveis neste arquivo sero compiladas para a empresa em questo, se o cliente tiver mais do que uma empresa e ele deseja instalar as procedures em todas as empresas ele precisa entrar em cada empresa. Se houver qualquer problema na instalao das Stores Procedures ser gerado um arquivo de log chamado SPBuild.LOG no diretrio \SIGAADV\. E tambm ser apresentado o erro no Log do TopConnect.