SQL Intermediario

download SQL Intermediario

of 36

Transcript of SQL Intermediario

  • 7/28/2019 SQL Intermediario

    1/36

    Programao SQL com SIGA Advanced / AP5

    Programao SQL (Intermedirio)

    Com SigaAdvanced/ AP5

    Windows NT Server , Windows Workstation, Windows 95/98 e SQL Server so marcasregistradas 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 daMicroSiga.CopyRight 2000 Microsiga Software S.A.

  • 7/28/2019 SQL Intermediario

    2/36

    Programao SQL com SIGA Advanced / AP5

    ndice

    1. Introduo ao ambiente Relacional1.1. Objetivos1.2. Conceitos Bsicos de Banco de Dados1.3. Conhecendo a estrutura de Armazenamento dos dados

    1.3.1. LOG do Banco de dados1.3.1.1. Controle Transacional1.3.1.2. Segurana e Backup1.3.1.3. Construindo Querys evitando problemas com estouro da rea de

    LOG1.3.2. rea temporria do Banco de Dados

    1.4. Normalizao de Base de Dados1.5. MER (Modelo Entidade Relacionamento)1.6. Diferenas cruciais entre ambientes DBF e SQL

    1.6.1. DBF Trabalha de forma posicional com acesso compartilhado1.6.2. SQL Trabalha de forma relacional (Teoria dos conjuntos) e o acesso de

    forma centralizada

    2. TopConnect2.1. Informaes gerais2.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. Portabilidade2.4.2. Funo da coluna R_E_C_N_O_

    2.4.2.1. Limite de registros2.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 tabelas2.5.2. ndices2.5.3. Defaults2.5.4. Problemas com contedo Nulo

    2.6. Manuteno do Banco de dados2.6.1. Aumentando a performance executando a operao de PACK

    2.7. DBFNTX x TopConnect2.7.1. ndices de produo2.7.2. Funes em chaves de ndices

    2.7.3. ndices condicionais2.7.4. Chaves numricas compostas2.7.5. Expresses de filtro com funes e variveis

    2.8. Comandos2.8.1. APPEND FROM2.8.2. COPY TO2.8.3. USE2.8.4. BEGIN, COMMIT, ROLLBACK TRANSACTION

  • 7/28/2019 SQL Intermediario

    3/36

    Programao SQL com SIGA Advanced / AP5

    2.9. Funes2.9.1. TCCANOPEN2.9.2. TCCONTYPE

    2.9.3. TCDELFILE2.9.4. TCGETDB2.9.5. TCLINK2.9.6. TCQUERY2.9.7. TCQUIT2.9.8. TCSETCONN2.9.9. TCSETFIELD2.9.10. TCSPEXEC2.9.11. TCSPEXIST2.9.12. TCSQLERROR2.9.13. TCSQLEXEC2.9.14. TCSRVTYPE2.9.15. TCUNLINK2.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. Performance2.10.1. Otimizando seu cdigo2.10.2. Leitura Sequencial2.10.3. O uso de filtros2.10.4. Stored Procedures

    2.11. Integrao com outros aplicativos2.11.1. Incluindo registros nas tabelas do SigaAdvanced / AP52.11.2. Excluindo registros ( Sempre Marcar )

    2.11.3. Vantagens e Desvantagens

    3. Utilitrio importante3.1. Instalador de Stored Procedures no Banco de Dados

  • 7/28/2019 SQL Intermediario

    4/36

    Programao SQL com SIGA Advanced / AP5

    1. Introduo ao ambiente Relacional1.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 SQLdesta forma pretendemos aumentar a facilidade de manuseio dos componentesenvolvidos tanto na anlise e deteco de erros, e quais possveis aes para san-los,antes de recorrer ao suporte interno. Demonstraremos tambm como otimizar programasatravs da linguagem SQL em seus RDMAKES e futuras implementaes para asprximas verses.Todos os tpicos mencionados podero servir como base de consulta, para escrita deprogramas e resoluo de problemas.

    1.2. Conceitos Bsicos de Banco de Dados

    Os conceitos bsicos dos Bancos de Dados relacionais so bem diferenciados dosconhecidos DBFs. Estes conceitos bsicos so teis principalmente para saberresponder eventuais perguntas que nossos clientes podero efetuar sobre nossosistema.

    SQL quer dizer : Structured Query Language , que foi desenvolvido inicialmente pelaIBM Corporation.

    Um banco de dados no trabalha em funo de registros, ou Arquivos como nsestamos acostumados a ver e fazer em linguagem de programao Clipper. o SQLutiliza a teoria de conjuntos conhecida pr todos, que tem o objetivo de resolver osproblemas dos usurios com comandos simples, chamados de querys ( Requisio eAlterao 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 nodisco (DATABASE) que o prprio banco se encarregara de administrar, no sentido decriar tabelas, ndices, e todos os objetos envolvidos no sistema. A nomenclatura mudaum pouco: ao invs de CAMPOS temos COLUNAS e ao invs de REGISTROS temosLINHAS.

    Os ndices trabalham de forma semelhante ao DBF, e so utilizados com duasfinalidades : a de termos uma chave de acesso extremamente rpida, e de garantirmosuma chave nica em uma tabela. A partir do momento que indicamos uma chave nicaem uma tabela, o prprio banco de dados passa a garantir que no existir dadosduplicados, 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 StoredProcedures, que so programas ou funes escritas como qualquer linguagemconhecida ( Clipper, Pascal etc.), s que no padro ANSI / SQL.

    Uma Trigger funciona como um gatilho, s que este disparado no a cada campoalterado, e sim a cada Incluso, Alterao ou Excluso de uma linha da tabela. OsTriggers tambm so escritos como as Stored Procedures, ou seja, como umprograma qualquer, que pode efetuar qualquer tipo de validao, atualizao emoutras tabelas, etc...Hoje no utilizamos no Siga Advanced nenhuma Trigger. Em alguns casos especficosem clientes, as mesmas podero ser utilizadas.

  • 7/28/2019 SQL Intermediario

    5/36

    Programao SQL com SIGA Advanced / AP5

    Uma Foreign Key ( Chave Estrangeira ) uma ligao entre tabelas que so criadasnas mesmas. So estas que garantem que nunca o Cliente X ser excludo se omesmo 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 qualquercodificao para isto.

    O Siga Advanced/AP5 no trabalha hoje com o conceito de chaves estrangeiras nobanco de dados.

    O uso de um Banco de Dados SQL se faz necessrio pela segurana dos dados e pelafcil 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 sendoprejudicada. Nos prximos tpicos estaremos demonstrando como melhorar e otimizaro SGDB (Sistema Gerenciador de Banco de Dados) para o melhor aproveitamento dosistema.

    Para empresas que fazem uma grande utilizao de banco de dados normalmenteencontramos um profissional chamado DBA (Data Base Administrator), que tem afuno de administrar o banco de dados, quanto a otimizao, configurao, backups esegurana. Sabemos que na prtica isto s funciona para empresas grandes, portantotemos que saber o mnimo possvel de cada banco de dados para podermos identificarproblemas e solues que se adequam melhor instalao do cliente.

  • 7/28/2019 SQL Intermediario

    6/36

    Programao SQL com SIGA Advanced / AP5

    1.3. Conhecendo a estrutura de Armazenamento dos dados

    1.3.1. LOG do Banco de dados

    1.3.1.1. Controle Transacional

    Toda e qualquer operao de incluso, alterao ou excluso de registro armazenada primeiramente na rea de LOG. Se voc faz uma incluso nobanco de dados de uma simples linha o mesmo garante a incluso completada linha (insero de todas as colunas). Este fato garantido pela definio noseu banco de dados de uma transao implicita. Agora vamos supor que voc

    tenha uma operao que necessite que vrias incluses, alteraes eexcluses realizadas s sejam efetuadas quando todas as operaes tenhamsido efetuadas com sucesso, caso contrrio todas as operaes devem sercanceladas.

    Para definio de transao pelo usurio, normalmente se utilizam oscomandos BEGIN e COMMIT , para definir incio e fim de uma transaorespectivamente. Para o cancelamento de um transao sem sucessonormalmente chamamos de ROLLBACK.

    A rea de LOG do Banco de dados normalmente definida com 25% dotamanho da rea de dados, mas este fator depende muito do nmero deusurios 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 mesmaestar sendo transferida para a rea real dos dados. Este tramite detransferncia chamado de CheckPoint , este ponto configuravl de acordo oSGDB utilizado. Para bancos de dados de maior escala, o processo de checkpoint s realizado aps o Backup da rea de LOG.

    O LOG tambm utilizado para fazer o backup de grande bancos de dados,guardando somente as alteraes efetuados em um determinado intervalo de

  • 7/28/2019 SQL Intermediario

    7/36

    Programao SQL com SIGA Advanced / AP5

    tempo. Em clientes com base de dados pequenas, no utilizamos este tipo derecurso.

    1.3.1.3. Construindo Querys evitando problemas com estouro da rea deLOG

    Conhecendo melhor o processo de gravao do banco de dados, percebemosque quanto menor for o nmero de operaes de insero, alterao e exclusorealizados dentro de uma transao melhor ser a performance. Banco de dadosque possuem grandes transaes ocasionam problemas de deadlock. Realizaode grandes updates na base de dados sem informar a clausula Wheredelimitando um intervalo de linhas a serem modificados. Na alterao e exclusode linhas, precisamos tomar cuidado sempre com o intervalo de registros, se foro caso devemos executar vrias vezes o mesmo blocos de comandos, mudandoo 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 emsituaes que o SGDB precisa gerar arquivo temporrios para resolver as querysque estamos solicitando, normalmente operaes que exigem um determinadaordenao no resultado e no existe nenhum ndice correspondente. Devemostomar cuidado com querys que necessitem rea de trabalho, por que elas estaroperdendo mais tempo com i/o de disco.

  • 7/28/2019 SQL Intermediario

    8/36

    Programao SQL com SIGA Advanced / AP5

    1.4. Normalizao de Base de Dados

    A normalizao de Base de dados tem como objetivo, definir a estrutura de entidades eseus atributos eliminando vrios problemas de definio de armazenamento dos dados,que no momento da implementao sero percebidos. Existe at cinco nveis denormalizao , mas somente utilizamos at o terceiro nvel, atualmente no existeequipamento capaz de administrar um Banco de dados normalizado totalmente.

    Com a pratica vamos perceber que a normalizao muito boa, mas o seu excesso geraproblemas na programao, portanto temos sempre que fazer o mximo de normalizaomas devemos estar consciente de quanto conseguiremos de vantagem com isto.

    Existe casos que a desnormalizao uma das melhores solues, para facilitar odesenvolvimento da aplicao ou para ganharmos performance.

    A primeira forma normal diz que devemos definir a entidade e seus atributos, e destesatributos devemos definir um atributo chave de relao.

    Ex.: Entidade = PedidoAtributos = Data Emisso, Produto , Quantidade ,etc.

    Neste caso criaremos um campo cdigo que define a sua chave principal derelacionamento, criaremos o Cdigo. Nunca utilize mais de um coluna agregada comcampo chave.(Este tipo de campo gera vrios problemas na programao SQL)

    A segunda forma normal diz que devemos subdividir os atributos que ocorrem mais deque uma vez, em uma outra entidade.(Esta entidade deve ter um campo chave,atendendo a primeira forma normal).

    Ex.: Entidade = PedidoAtributos = Nmero do Pedido (Chave), Data de Emisso, etc.

    Entidade = Itens do PedidoAtributos = Nmero, item (Nmero+item = chave), Quantidade, etc..

    A terceira forma normal diz que devemos eliminar colunas que so concebidas porcalculo de outras colunas de mesma entidade.

    Ex.: Entidade = PedidoAtributos = Total do Pedido, Quantidade Total, etc.

  • 7/28/2019 SQL Intermediario

    9/36

    Programao SQL com SIGA Advanced / AP5

    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. Almde apresentar todo o fluxo do dado dentro de um Banco de Dados. No caso doSigaAdvanced / 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 emcada MER do correspondente mdulo.

    Sempre que possvel ao desenvolver processos especficos no sistema procure desenharo MER para detectar os problemas antes de sair desenvolvendo o produto.

  • 7/28/2019 SQL Intermediario

    10/36

    Programao SQL com SIGA Advanced / AP5

    1.6. Diferenas cruciais entre ambientes DBF e SQL1.6.1. DBF Trabalha de forma posicional com acesso compartilhado

    Quando trabalhamos em um ambiente posicional, vrios regras de programao edefinio como apresentamos acima, no precisam ser cumpridas. E mesmo assimos processos so rpidos e de fcil manuseio. Este ambiente utiliza o modoShared de controle de arquivos do sistema operacional, ou seja, o servidor destesarquivos apenas um mero repositrio de dados, nada processado no Server. Adesvantagem de utilizar estes arquivos normalmente taxada pelo problemasgerados 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 deforma centralizada

    Agora quando trabalhamos com Base de Dados Relacional, a estrutura totalmentediferente. Devemos atender vrias exigncias como controle de acesso ao dadoque muito mais restrito, a programao feita na aplicao deve ser bem otimizadapara evitar requisies desnecessrias, o SGDB precisa utilizar processamento doServidor para recuperar um dado solicitado pela aplicao. O Banco de Dadossuporta grande capacidade de armazenamento de dados, garantindo sua integridadecomo um todo. A desvantagem do Banco de Dados a necessidade deequipamentos potentes para atender a demanda.

  • 7/28/2019 SQL Intermediario

    11/36

    Programao SQL com SIGA Advanced / AP5

    2. TopConnect

    2.1. Informaes geraisO TOPConnect foi desenvolvido em linguagem C pela Microsiga e utilizado hojepelo SigaAdvanced / AP5 atravs da linguagem ADVPL (Advanced ProtheusLanguage). Ele tambm pode ser utilizado por aplicaes XBASE que queiram trocar abase de dados de DBF para SQL.Os gerenciadores de banco de dados hoje suportados so:

    MS-SQL Server 6.5 e 7.0 ( MSSQL / MSSQL7 ) Oracle 7.3.4, 8.0.5 e 8i ( ORACLE ) IBM Universal Database 5.0 ( DB2 ) DB2/400 ( AS/400 ) Sybase Anywhere ( ANYWHERE / ANYSYB )

    Sybase SQL-Server ( SYBASE ) Informix ( INFORMIX )

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

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

  • 7/28/2019 SQL Intermediario

    12/36

    Programao SQL com SIGA Advanced / AP5

    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 soarmazenados de forma diferente da definida na tabela SX3, porem a aplicao recebe odado 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, paraque 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 2A1_COD C 6A1_LOJA C 2A1_DESC C 1A1_EMISSAO C 8A1_VEND1 C 6...Ex.: Tabela TOP_FIELD

    FIELD_TABLE FIELD_NAME FIELD_TYPE FIELD_PREC FIELD_DEC------------------------------------------------------ -------------------------------- ------------------ ------------------ ----------------dbo.SA1010 A1_COMIS P 5 2dbo.SA1010 A1_DESC P 2 0dbo.SA1010 A1_LC P 14 2dbo.SA1010 A1_EMISSAO D 8 0dbo.SA1010 A1_MCOMPRA P 17 2dbo.SA1010 A1_METR P 7 2dbo.SA1010 @@HAS_DFT_VAL@@ X 0 0...Neste exemplo vocs percebero que na tabela TOP_FIELD s existe os camponumricos, 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 estararmazenado como 40,39999999. Quando formos utilizar querys voc deveutilizar a funo TCSETFIELD para resolver esta situao.(Veja funoTCSETFIELD).Importante tambm salientar que qualquer modificao efetuada em arquivoSX3 diretamente, ou seja, sem utilizar o configurador, voc pode Ter problemascom inconsistncia de estrutura da tabela do Banco de Dados e TOP_FIELDcontra o dicionrio de dados. Para resolver este problema voc dever removeros dados da Tabela do Banco de dados, eliminar a tabela e deixa-la criarnovamente e depois importar os dados via APPEND(Utilize SDU/CFG-AP5), ouvoc pode ajustar o dicionrio de dados manualmente conforme estrutura noBanco de Dados.

  • 7/28/2019 SQL Intermediario

    13/36

    Programao SQL com SIGA Advanced / AP5

    2.3. 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, ouseja, 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 vocutilizar um utilitrio do prprio Banco para fazer o Acesso.

    Na maioria dos problemas este logo de erros o ponto principal para descobrir o queesta acontecendo, entre o Topconnect e o Banco de dados. Voc s estar recebendomensagens se o link entre o Banco de dados e o Topconnect estiver funcionando.

    2.4. Sistema de controle de Registros2.4.1. Portabilidade

    Acreditamos que muitos j perguntaro por que da existncia da colunaR_E_C_N_O_ no Banco de dados, mesmo os que no conhecem esta coluna temcomo objetivo manter a portabilidade de uma Base DBF e Banco ADS para umBanco de Dados qualquer e tambm entre Banco de dados. Se voc possui suaaplicao trabalhando em DBF , voc pode porta-la independente de modificaespara uma Base SQL, e se voc j esta em uma base SQL do tipo MSSQL SQLServer e gostaria de porta-la para ORACLE, voc pode fazer isto sem nenhumproblema.

    Alerta! : Se voc possui programas especficos desenvolvidos (RDMAKES), vocprecisa que os mesmos estejam desenvolvidos nos padres de compatibilidadeexigidos pela Microsiga. Voc ver mais adiante exemplos de programas e umaapresentao 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 seqencialde controle de registro, mais conhecido como ID (identificador). Este identificador utilizado pela aplicao na pesquisa e posicionamento de registro.

  • 7/28/2019 SQL Intermediario

    14/36

    Programao SQL com SIGA Advanced / AP5

    Esta coluna no possui repetio, ela sempre preenchida com o valor mximo dacoluna 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 Dadosdo Sigaadvanced / AP5 voc deve seguir as orientaes do Captulo Integraescom outros aplicativos.

    2.4.2.1. Limite de registros

    O limite de registros em uma tabela de 2,147,483,648 , este nmeronormalmente deve ser levado em considerao para as tabelas querecebem muita insero de registro seguidas de muitas excluses fsica doregistro.

    2.4.2.2. Renumerao da coluna RECNO

    Quando os registros so deletados pelo sistema, os mesmos so apenasmarcados, para excluso fsica acontece em quando executamos aoperao que conhecemos com Pack de registros. Aps esta operao acoluna R_E_C_N_O_ no renumerada. No existe a necessidade defazer a renumerao desta coluna, a no ser que voc esteja perto deestourar o maior nmero possvel nesta coluna. Neste caso voc precisarextrair os dados do Banco de Dados para uma Base DBF e logo emseguida 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 doSigaAdvanced / 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_ , amesma preenchida com (*) Asterisco, caso contrrio a coluna permanece com ocontedo em branco.

    Alerta! : Quando voc utiliza o comando Set Delet on/off, o TopConnect estartratando o dado para voc, mas se voc utiliza querys para recuperao de dadosvoc dever tratar este coluna (Mais informaes sobre o tratamento da colunaD_E_L_E_T_ ser apresentado em exemplos de querys em RDMAKES.

  • 7/28/2019 SQL Intermediario

    15/36

    Programao SQL com SIGA Advanced / AP5

    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 emvista a no existncia da mesma no Banco de Dados. Para isto o usurio criadopara o TopConnect acessar o banco de dados precisa Ter permisso de criaode tabelas, de preferncia a permisso de DBA.

    Neste momento a tabela TOP_FIELD estar sendo alimentada com todos oscampos numricos, datas e Lgicos.

    Alerta! : Aps o primeiro usurio fazer a conexo com o TopConnect e a parte deverificao de tabelas j foi executada, as referncias de cada tabela selecionadono .mnupara abertura estaro em memria no TopConnect, portanto se poracaso alguma tabela for removida diretamente por um utilitrio do Banco de Dadoso TopConnect ter uma informao no coerente, voc deve reiniciar o servio doTopconnect (Parando / iniciando o Servio).

    2.5.2. ndices

    Os ndices so criados imediatamente aps a criao da estrutura das tabelas. Osndices criados partem do arquivo de ndices do SigaAdvanced / AP5, que oarquivo SINDEX. Existe um ndice que criado apenas uma vez no momento emque a tabela criada, este ndice tem como formao do nome = + _RECNO , este ndice e sempre composto da coluna R_E_C_N_O_ eno permite duplicidade.

    Alerta!: Nunca remova os ndices das tabelas, principalmente o ndice RECNOque no ser criado pelo TopConnect quando a tabela j existe. Se voc criou umndice 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 comandosde insero e alterao, ou seja, se voc no possui os defaultscriados o Bancode Dados estar deixando estes campos com valor nulo. Os defaults so criadosno momento da criao das tabelas.

    Alerta!: Se voc fizer qualquer operao de transferncia via Banco de Dados queno transfira os Defaults, e logo em seguida voc utilizar o sistema , estarcorrendo risco de inserir nulos na Base de Dados. Se isto acontecer voc poderTer problemas com o TopConnect Server, ele poder travar ou derrubar conexescom dados indevidos. A soluo neste caso utilizar o utilitrio DEFAULT queesta disponvel no site da Microsiga.

  • 7/28/2019 SQL Intermediario

    16/36

    Programao SQL com SIGA Advanced / AP5

    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 ADDCONSTRAINT [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

  • 7/28/2019 SQL Intermediario

    17/36

    Programao SQL com SIGA Advanced / AP5

    2.5.4. Problemas com contedo Nulo

    Os Bancos de dados possuem o contedo nulo para todos os tipo de campos, maso nosso sistema no os utiliza, se por ventura qualquer tabela tenha algumaslinhas com alguma coluna com o valor nulo, isto pode provocar problemas queaparentam ser erro de ndice, como ex. Voc tem a tabela de pedidos que com ospedidos 000001,000002 e sua tabela por qualquer motivo no tem os contraints dedefaults na coluna filial, agora voc faz a insero do pedido 0000003 o sistemair 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

    000001000002

    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 comproblemas, por que a tela de Browse do Sigaadvanced / AP5 no apresenta acoluna filial.

    Alerta!: Tabelas com contedo nulo, geram vrios problemas no sistema,provavelmente deve gerar erros no TopConnect que o mesmo estar derrubandoas 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 siteda Microsiga, com o nome de DEFAULT.exe

  • 7/28/2019 SQL Intermediario

    18/36

    Programao SQL com SIGA Advanced / AP5

    2.6. Manuteno do Banco de dados2.6.1. Aumentando a performance executando a operao de PACK

    Esporadicamente voc deve fazer uma manuteno no Banco de dados, quanto asregistros excludos logicamente, os mesmo devem ser excludos fisicamente, por quea sua existncia em grande quantidade e de forma seqencial gera um graveproblema de performance no acesso aos dados.

    Alerta!: Se voc tiver este problema, utilize a operao de Pack do utilitrio SDUna tabela que possui registros excludos , ou utilize o programa fonte PACK parafazer esta operao em todas as tabelas.

    Segue abaixo exemplo de fonte em RDMAKE, para fazer um pack em qualquerBanco de dados.

    Exemplo de fonte em ADVPL para executar um Pack no Banco de Dados , estarotina j prev problema de estouro da rea de LOG/RollBack de um Back de Dados

    /*Funo PACK Autor Emerson/Vicente Data 16.12.99Descrio Rotina RDMAKE para eliminar os registros deletados do bancoUso RDMake -wExemplo 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 oDlg5Return nil

    Function OkProc

    Close(oDlg5)Processa( {|| Execute(RunProc) } )Return

    /*Funcao RunProcDescrio Executa o Processamento*/Function RunProcDbSelectArea("SX2")NrecnoSX2 := SX2->(Recno())DbGoTop()ProcRegua(reccount())While !Eof()

    If Select(SX2->X2_CHAVE) > 0cQuery := 'SELECT MAX(R_E_C_N_O_) RECNO FROM ' + SX2->X2_ARQUIVOdbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), 'CONT', .F., .T.)nCont := 1While nCont RECNO

    cQuery := "DELETE FROM "+SX2->X2_ARQUIVOcQuery := 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)EnddoDbSelectArea("CONT")DbCloseArea()

    EndifDbSelectArea("SX2")dbSkip()

    incproc()Enddoreturn

  • 7/28/2019 SQL Intermediario

    19/36

    Programao SQL com SIGA Advanced / AP5

    2.7. DBFNTX x TopConnect2.7.1. ndices de produo

    Todos os SGDB's utilizam o conceito de ndices de produo portando uma aplicaoque utilize o TOPConnect no necessita ter todos os ndices abertos para que osmesmos 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 oTOPConnect 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 chaveapenas uma regra deve ser obedecida. A funo STR deve obrigatoriamentereceber 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 oseguinte 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 TOPConnectagregou 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)

    dbSetOrder(0)

    O TOPConnect permite o uso da funo OrderBy nos filtros o que reproduz o mesmoefeito de um ndice filtrado.

    O TOPConnect disponibiliza os dados na ordem solicitada pela clusula OrderBy naOrdem 0 do arquivo, no interferindo assim com os ndices do arquivo.

  • 7/28/2019 SQL Intermediario

    20/36

    Programao SQL com SIGA Advanced / AP5

    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 temcomo avaliar o contedo de uma varivel de memria ou o retorno de uma funo docliente.

    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 noservidor 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 sejafeita no servidor e que apenas os registros que obedeam ao filtro venha para ocliente.

    Agora este:SET FILTER TO CODIGO > RetornaCodigo()

    Considerando que RetornaCodigo uma funo ADVPL da aplicao todas as linhasdeste arquivo sero avaliadas no cliente.

    Visando minimizar os problemas de performance o TOPConnect conta com umsistema chamado SFE (Smart Filter Engine) o que faz com que o mximo possvel deuma 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 ESTADOe SALDO obedeam ao filtro e ento o campo CODIGO ser avaliado no cliente.

  • 7/28/2019 SQL Intermediario

    21/36

    Programao SQL com SIGA Advanced / AP5

    2.8. Comandos

    Neste captulo mencionaremos apenas os comandos da linguagem ADVPL que tem a suafuncionalidade alterada ou complementada e os novos comandos implementados peloTOPConnect 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 inserirregistros na Work Area corrente com registros vindos de outro arquivo DBF.No TOPConnect o comando APPEND FROM importara registros de um arquivoDBF para uma tabela do banco de dados.

    No ADVPL opcionalmente poder ser especificado o parmetro VIA "TOPCONN" oque far com que registros de uma tabela sejam inseridos na Work Area corrente.

    ExemploSELECT CLIENTES

    //Importa registros de um DBFAPPEND FROM c:\temp\newcli.dbfOuSELECT CLIENTES

    //Importa registros da tabela NEWCLIAPPEND FROM NEWCLI VIA "TOPCONN"

    2.8.2. COPY TO

    Em uma aplicao ADVPL o comando COPY TO utilizado para se copiar aestrutura e os registros da Work Area corrente para um arquivo DBF.

    No TOPConnect o comando COPY TO utilizado para exportar a estrutura e osregistros de uma tabela do banco de dados para um arquivo DBF.

    Assim como no comando APPEND FROM no ADVPL o parmetro opcional VIAtambm pode ser especificado.

  • 7/28/2019 SQL Intermediario

    22/36

    Programao SQL com SIGA Advanced / AP5

    2.8.3. USE

    Abre uma tabela no banco de dados.Sintaxe:

    USE [

    [INDEX ][ALIAS ] [EXCLUSIVE | SHARED][NEW] [READONLY]VIA "TOPCONN"

    O nome da tabela a ser aberta.INDEX Especifica o nome de 1 a 15 ndices a serem abertos naWork Area corrente.ALIAS < cAlias> Especifica um nome para a Work Area onde a tabela serabertaEXCLUSIVE 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 na prxima Work Area disponvel. Se esta clausulano for especificada, ser na Work Area corrente.READONLY Abre apenas para leitura.VIA "TOPCONN" Este parmetro indica ao ADVPL que esta Work Area sergerenciada pelo TOPconnect.Se nenhum parmetro for especificado a tabela aberta na Work Area corrente serfechada.

    Exemplo

    //Abre a tabela de Clientes em uma nova Work AreaUSE 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 cadaAPPEND ou REPLACE encontrado at um COMMIT TRANSACTION ouROLLBACK TRANSACTION sero considerados uma nica transao.Os demais usurios somente tero acesso aos novos registros ou s modificaesaps um COMMIT TRANSACTIONExemplo#INCLUDE "TOPCONN.CH"

    SELECT CLIENTESif !Rlock()Alert("Registro em uso!")Return .f.

    EndifBEGIN TRANSACTION

    //Atualiza saldo no cadastro de clientes

    REPLACE SALDO WITH SALDO nValor

    //Adiciona um pedido

  • 7/28/2019 SQL Intermediario

    23/36

    Programao SQL com SIGA Advanced / AP5

    SELECT PEDIDOSAPPEND BLANK

    REPLACE NUM WITH cNumeroREPLACE VALOR WITH nValor

    SELECT ITEMS

    APPEND BLANK

    REPLACE NUM WITH cNumeroREPLACE QUANT WITH nQuant

    .....

    APPEND BLANK

    REPLACE NUM WITH cNumeroREPLACE QUANT WITH nQuant

    .....

    COMMIT TRANSACTION

  • 7/28/2019 SQL Intermediario

    24/36

    Programao SQL com SIGA Advanced / AP5

    2.9. Funes2.9.1. TCCANOPEN

    Verifica a existncia de tabelas e ndices no servidor.Sintaxe

    TCCanOpen(cTable [, cIndice]) =>lgico

    Exemplo//Testa a existncia da tabela customerIF !TCCanOpen("CUSTOMER")

    dbCreate("CUSTOMER", aStru, "TOPCONN")ENDIFUSE CUSTOMER SHARED NEW VIA "TOPCONN"

    //Testa a existncia do ndiceIF !TCCanOpen("CUSTOMER","CUSTCOD")

    INDEX ON CODIGO TO CUSTCODELSE

    SET INDEX TO CUSTCODENDIF...

    2.9.2. TCCONTYPE

    Especifica o protocolo de comunicao a ser utilizado pelo TOPConnect.Sintaxe

    TCConType()

    Onde 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 DOSNPIPE com servidor AS/400 utilizando TCP/IP.Exemplo#INCLUDE "TOPCONN.CH"

    //Especifica conexo TCP/IPTCConType("TCPIP")

    //Conecta-se ao ambiente SIGAADV no Microsoft SQL-ServerTCLink("MSSQL/SIGAADV")

    2.9.3. TCDELFILE

    Exclui uma tabela no servidor.Sintaxe

    TCDelFile()

    Onde o nome da tabela a ser excluda.ExemploTCDelFile("CUSTOMER")

  • 7/28/2019 SQL Intermediario

    25/36

    Programao SQL com SIGA Advanced / AP5

    2.9.4. TCGETDB

    Retorna o Tipo de Banco de Dados corrente

    cDataBase := TCGETDB()

    Onde os valores de retorno so :

    MSSQL Microsoft SQL-Server 6.5MSSQL7 Microsoft SQL-Server 7.0ORACLE OracleDB2 IBM Universal DatabaseSYBASE Sybase SQL-ServerANYWHERE Sybase SQL AnywhereANYSYBASE Sybase SQL Anywhere

    (Emulando Sybase SQL-Server)INFORMIX Informix

    2.9.5. TCLINK

    Abre uma conexo com o Servidor TOPConnect.Sintaxe

    nCon := TCLink(,)

    Onde o parmetro composto por:

    Para TOPConnect NT : Nome do Banco de Dados / Nome do AmbientePara TOPConnect/400: Nome do Ambiente

    O parmetro contm:Para conexes NamedPipe, APPC e Brigde : O nome do servidor TOPConnectPara conexes TCP/IP : O endereo IP do servidor TOPConnectPara o TOPConnect NT acessando Oracle, um ambiente o nome do Alias criadocom o utilitrio SQL-Net.

    Para o TOPConnect NT acessando os demais SGDB's um ambiente um SystemDSN criado atravs do ODBC Data Source Administrator.

    Para o TOPConnect AS/400 um ambiente uma Library criada atravs docomando CRTTOPENV do TOPConnect.

    Para informaes sobre a criao de ambientes consulte o manual de instalaodo TOPConnect.

    Esta a lista de Bancos de Dados hoje suportados e seus respectivos nomescompor a string de conexo com o TOPConnect NT:

    Microsoft SQL-Server 6.5 MSSQLMicrosoft SQL-Server 7.0 MSSQL7Oracle ORACLEIBM Universal Database DB2Sybase SQL-Server SYBASESybase SQL Anywhere ANYWHERESybase SQL Anywhere

  • 7/28/2019 SQL Intermediario

    26/36

    Programao SQL com SIGA Advanced / AP5

    (Emulando Sybase SQL-Server) ANYSYBASEInformix INFORMIX

    A funo TCLink retorna ou o nmero da conexo ou um valor negativo contendo ocdigo do erro.

    Exemplo

    //Conecta-se ao Microsoft SQL-Server no ambiente SIGAADV//Protocolo Named PipesTCConType("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/IPTCConType("TCPIP")

    //Conecta-se ao Oracle no ambiente TESTESnCon := TCLink("ORACLE/TESTES",172.16.1.2)

    //Protocolo APPC//Conecta-se ao AS/400 no ambiente PRODUCAOnCon := TCLink("PRODUCAO","TOP400")

  • 7/28/2019 SQL Intermediario

    27/36

    Programao SQL com SIGA Advanced / AP5

    2.9.6. TCQUERY

    Executa uma Query no servidor e coloca seu retorno em uma WorkArea.Sintaxe:

    TCQUERY [

    [ALIAS ][NEW]VIA "TOPCONN"

    Expresso SQL a ser enviada ao servidor.ALIAS < cAlias> Especifica um nome para a Work Area a ser abertaNEW Abre a tabela na prxima Work Area disponvel. Se esta clausulano for especificada, ser na Work Area corrente.VIA "TOPCONN" Este parmetro indica ao ADVPL que esta Work Area sergerenciada 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 apenasos seguintes comandos so suportados em uma Work Area criada comTCQUERY: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 AreacQuery := "SELECT a.codigo, b.nome FROM CLIENTES a, CLIDATA b ; WHEREa.CODIGO = b.CODIGO ORDER BY CODIGO,NOME"TCQUERY cQuery ALIAS CLIENTES NEW VIA "TOPCONN"dbGoTop()While !Eof()

    ? CODIGO,NOMEdbSkip()

    endUSE

    cQuery := 'SELECT SUM(VALOR),SUM(SALDO) FROM CUSTOMER'TCQUERY cQuery NEW VIA "TOPCONN"?COLUMN1 //Somatoria dos valores?COLUMN2 //Somatoria dos saldos

  • 7/28/2019 SQL Intermediario

    28/36

    Programao SQL com SIGA Advanced / AP5

    2.9.7. TCQUIT

    Encerra todas as conexes com o TOPConnectSintaxeTCQuit()

    2.9.8. TCSETCONN

    Seleciona conexo ativa.

    SintaxeTCSETCONN()Onde o nmero da conexo.Exemplo

    // Abre conexo com o ambiente de ProduonCon1 := TCLink("MSSQL/PRODUCAO")if nCon1 < 0

    Alert("Falha conectando ambiente de Produo")QUIT

    endif

    // Abre conexo com o ambiente de TestesnCon2 := TCLink("MSSQL/TESTES")

    if nCon2 < 0 thenAlert("falha conectando ambiente de Testes")QUIT

    endif

    TCSetConn(nCon1)

    //Abre tabela de Clientes no ambiente de produoUSE CUSTOMER ALIAS PROD SHARED NEW VIA "TOPCONN"

    TCSetConn(nCon2)

    //Abre tabela de Clientes no ambiente de testesUSE CUSTOMER ALIAS TEST SHARED NEW VIA "TOPCONN"...

    2.9.9. TCSETFIELD

    Esta funo serve como apoio ao comando TCQUERY, na recuperao de campostipo NUMERIC, DATE e LOGICAL, pois os mesmos so gravados fisicamente noBanco de Dados como caracteres, e no caso dos numricos como float.

    SintaxeTCSetField(, ,, [,] )

    Onde o alias da WorkArea, o nome do campo e otipo desejado para o campo.

    Exemplo

  • 7/28/2019 SQL Intermediario

    29/36

    Programao SQL com SIGA Advanced / AP5

    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 nomais um campo caracter como o seu armazenamento.

    O campo Data s retornado como um campo caracter por que estamosutilizando 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 obtenodos tipos de parmetros (se so de INPUT e/ou OUTPUT) todos as StoredProcedures a serem executadas atravs do TOPConnect devero obedecer oseguinte 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 ADVPLum array com 'n' elementos, onde n o nmero de parmetros de OUTPUT daStored Procedure.

    Sintaxe := TCSPExec(,[,...])

    Onde um array com os parmetros de retorno da Stored Procedure e o nome da Stored Procedure a ser executada e os demaisparmetros variam conforme a definio da Stored Procedure.

    Exemplo//Verifica se a Stored Procedure Teste existe no ServidorIf TCSPExist("TESTE")

    //Executa a Stored Procedure TesteaRet := 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()

    EndifEndIf

  • 7/28/2019 SQL Intermediario

    30/36

    Programao SQL com SIGA Advanced / AP5

    2.9.11. TCSPEXIST

    Verifica a existncia de uma determinada Stored Procedure no servidor.Sintaxe := TCSPExist()

    Onde indica se a Stored Procedure existe ou no e o nomeda Stored Procedure procurada.

    ExemploIf SPExist("CALCCUSTO")

    TCSPExec("CALCCUSTO")Endif

    2.9.12. TCSQLERROR

    Retorna o ltimo erro registrado pelo TOPConnect durante a execuo de umaQuery.

    Sintaxe := TCSQLError()

    Onde a mensagem de erro.ExemploIf TCSQLExec("UPDATE CUSTOMER SET VALUE=0") < 0 then

    ?TCSQLError()Endif

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

    2.9.13. TCSQLEXEC

    Executa comandos SQL no servidor.Sintaxe

    := TCSQLExec()

    Onde retorna um valor negativo em caso de erros e e ocomando SQL a ser executado.

    ExemploTCSQLExec("UPDATE CUSTOMER SET VALUE=0)

  • 7/28/2019 SQL Intermediario

    31/36

    Programao SQL com SIGA Advanced / AP5

    2.9.14. TCSRVTYPE

    Retorna o Tipo do Servidor onde esta sendo executado o TOPConnect.Sintaxe

    := TCSrvType()

    Onde o tipo do servidor podendo Ter seu contedo igual a "WinNT" ou"AS/400".ExemploTCLink("MSSQL/TESTE","TOPSRV")?TCSrvtype()

    2.9.15. TCUNLINK

    Encerra uma conexo com o TOPConnect.Sintaxe

    TCUnlink()

    Onde o nmero da conexo retornado pela funo TCLink()ExemploTCConType("NPIPE")nConn := TCLink("MSSQL/TOPCONN","TOPSRV")TCUnLink(nConn)

    2.9.16. TCCHKOBJ*

    Verifica a existncia de um objeto no servidor AS/400

    Sintaxe

    := TCChkObj(,,)

    Onde: 0 quando o objeto existe ou o nmero do erro no AS/400. o nome da biblioteca que deve conter o objeto. o tipo de objeto AS/400. Ex: *FILE, *PGM, etc.ExemplonError := TCChkObj("CALCCUST","PRODUCAO","*PGM")ESTA FUNO SE APLICA APENAS PARA O TOPCONNECT AS/400

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

  • 7/28/2019 SQL Intermediario

    32/36

    Programao SQL com SIGA Advanced / AP5

    2.9.17. TCEXEERROR*

    Retorna uma string com a mensagem de erro retornada pela execuo dasfunes TCPGMEXE() e TCSYSEXE().Sintaxe := TCExeError()

    Onde 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.

  • 7/28/2019 SQL Intermediario

    33/36

    Programao SQL com SIGA Advanced / AP5

    2.10. Performance2.10.1. Otimizando seu cdigo

    A linguagem ADVPL tem um enfoque posicional, recuperando os dados utilizandoorientao a registros, enquanto aos Bancos de Dados SQL recuperam os dadospor blocos de dados.Devido a esta diferena conceitual, vrios pontos devem ser levados emconsiderao para que se possa obter uma boa performance e utilizar os recursosde uma aplicao Client/Server.

    2.10.2. Leitura Sequencial

    Operaes de leitura seqencial de uma tabela podem levar a problemas deperformance.Vamos analisar o seguinte cdigo:dbSelectArea("CLIENTES")nValor := 0Do While !Eof()

    If ESTADO = "SP"nValor += SALDO

    EndifDbSkip()

    End

    O cdigo acima far com que todas as linhas(registros) da tabela venham para oClient, o que ir gerar um nmero de Queries no servidor igual ao nmero de linhasda tabela e cada uma delas ir recuperar apenas uma linha, subtilizando acapacidade de processamento do servidor.

    O cdigo acima poderia ser substitudo por:TCQUERY "SELECT SUM(SALDO) ;

    FROM CLIENTES ;WHERE ESTADO = 'SP'" NEW

    nValor := COLUMN1Com a utilizao do comando TCQUERY todo a somatria feita no servidorretornando assim para a aplicao apenas uma linha com o resultado desejado.

  • 7/28/2019 SQL Intermediario

    34/36

    Programao SQL com SIGA Advanced / AP5

    2.10.3. O uso de filtros

    O uso de filtros em aplicaes ADVPL so conhecidos como fonte de problemasde performance. Isto se deve ao fato de que todos os registros so avaliados pelaestao.

    O mesmo no ocorre utilizando o TOPConnect, pois o filtro avaliado pelo prprioservidor vindo para a estao apenas os registros que respeitem a condio dofiltro.

    Para que um filtro tenha uma boa performance necessrio que a expresso dofiltro corresponda a um ndice no servidor, caso contrrio, para poder avaliar o filtroo 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 seutilizar dos benefcios da arquitetura Cliente/Servidor.

    O TOPConnect suporta o uso de Stored Procedures conforme documentado nafuno TCSPExec()

  • 7/28/2019 SQL Intermediario

    35/36

    Programao SQL com SIGA Advanced / AP5

    2.11. Integrao com outros aplicativos2.11.1. Incluindo registros nas tabelas do SigaAdvanced / AP5

    As tabelas criadas no Banco de dados pode receber inseres de outrosaplicativos, esta insero deve ser feita contemplando as seguintes operaes :

    Antes de inserir o registro voc deve obter o nmero mximo da colunaR_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 deeventos do Topconnect Manager, um mensagem de alerta dizendo que existeduplicidade 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 vocdeve 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 como SigaAdvanced / AP5.

    2.11.3. Vantagens e Desvantagens

    As vantagens deste processo a agilidade na integrao entre os sistemas, noexiste a necessidade de gerar arquivos textos, para depois fazermos aintegrao. 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 todasatualizaes que so feitas na base de dados no sistema, j que o sistema estadesta forma vulnervel a problemas inesperados.

    Normalmente aconselhamos a sempre fazer a atualizao em tabelas especficase depois criar rotinas pelo sistema o qual repassaro os dados destas tabelaspara as tabelas definitivas, desta forma vamos evitar problemas na atualizao deverso, ou at em alguma mudana de estrutura que o configurador faa.(Vocestar perdendo os triggers desta tabela).

  • 7/28/2019 SQL Intermediario

    36/36

    Programao SQL com SIGA Advanced / AP5

    3. Ferramenta importante3.1. Instalador de Stored Procedures no Banco de Dados

    Alguns clientes utilizam rotinas como Stored Procedures para agilizar alguns processoscrticos do sistema, para instalao destas Storeds Procedures voc devem possuir oarquivo com o nome de SIGAXXX.SPS, onde o XXX o tipo de Banco de Dados que oCliente 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 umaempresa e ele deseja instalar as procedures em todas as empresas ele precisa entrarem 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.