Você está na página 1de 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 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 da
MicroSiga.
CopyRight 2000 Microsiga Software S.A.

Programao SQL com SIGA Advanced / AP5

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 SIGA Advanced / AP5


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 SIGA Advanced / AP5


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...
Hoje no utilizamos no Siga Advanced nenhuma Trigger. Em alguns casos especficos
em clientes, as mesmas podero ser utilizadas.

Programao SQL com SIGA Advanced / AP5


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 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 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.
O LOG tambm utilizado para fazer o backup de grande bancos de dados,
guardando somente as alteraes efetuados em um determinado intervalo de

Programao SQL com SIGA Advanced / AP5


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 SIGA Advanced / AP5

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 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. 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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

2. TopConnect

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

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

Programao SQL com SIGA Advanced / AP5

2.3.

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
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_

Programao SQL com SIGA Advanced / AP5


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 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 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 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 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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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
DbSelectArea("SX2")
dbSkip()
incproc()
Enddo
return

Programao SQL com SIGA Advanced / AP5

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

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 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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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
//Adiciona um pedido

Programao SQL com SIGA Advanced / AP5


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 SIGA Advanced / AP5

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
TCDelFile("CUSTOMER")

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
MSSQL7
ORACLE
DB2
SYBASE
ANYWHERE
ANYSYBASE
INFORMIX

2.9.5.

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

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
Microsoft SQL-Server 7.0
Oracle
IBM Universal Database
Sybase SQL-Server
Sybase SQL Anywhere
Sybase SQL Anywhere

MSSQL
MSSQL7
ORACLE
DB2
SYBASE
ANYWHERE

Programao SQL com SIGA Advanced / AP5


(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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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

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 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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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 SIGA Advanced / AP5

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.