[There's also an english version (not well translated), of this document]

Como instalar este programa
---------------------------
	
	O final deste arquivo ir crescendo  medida em que forem sendo feitas
	atualizaes. Futuramente escreveremos um documento melhor para
	este programa.  Desculpem-nos qualquer inconveniente.

	POR FAVOR, leia TUDO pois tem muitas coisas que no so muito bvias e
	outras que apesar de intuitivas podem trazer um ganho de produtividade
	compensador.


O arquivo "sqlforms"  o executvel principal (em Tcl/tk) e possui um
diretrio aonde deve se encontrar toda a hierarquia de arquivos dos
programas.  Para modificar este diretrio edite este arquivo (sqlforms),
modificando o "set sld(dir) path/to/sqlforms/hierarchy" para conter o
local da instalao, por exemplo:

set sld(dir) /usr/postgres/sqlforms


A primeira linha de sqlforms contm um comando para sua auto-execuo pelo
shell, comeando por "#!".  Devemos mudar tambm a o path para o executvel
do pgtksh, o wish modificado com suporte para o PostgreSQL, que 
distribuido junto com este ltimo.

Este programa usa um arquivo ".sqlformsrc" localizado no diretrio home do
usurio.  Caso no exista este arquivo, automticamente ser criado.
Os fontes de caracteres mais usados so postscript. Para us-los, devemos
coloc-los em um diretrio, (/usr/X11/lib/fonts/freefont) ou outro
qualquer e efetuar a instalao em X atravs dos comandos:

xset fp+ /usr/X11/lib/fonts/freefont
xset fp rehash

Estes comandos podem ser colocados no .xinitrc para serem executados na
inicializao do X.

Caso os fontes visualizados no correspondam (por exemplo, Iglesia  um font
tipo antigo, gtico, bem desenhado), voce precisa fazer esta instala, ou
usar os fontes que voce tenha disponveis.  Modifique ento o arquivo
"sqlforms" como descrito acima, especialmente a varivel:

	"set sld(fontfamilies) { my font-families }"

para conter uma lista dos fonts de caracteres que voce desejar.


Para melhor apresentao dos menus e alguns outros detalhes,  interessante
ter as seguintes linhas no .Xdefaults do home do usurio:

!------------------------------------
! defaults for wish (tcl/tk)
!------------------------------------

*wish*Font: -*-helvetica-*-r-*-*-18-*-*-*-*-*-*-*
pgedit*font: -*-helvetica-*-r-*-*-18-*-*-*-*-*-*-*

*controle*font: -*-lucida-*-r-*-*-16-*-*-*-*-*-*-*
*Button*text: Boto
*Menubutton*relief: groove


Outras opes podem ser customizadas aqui tambm. Consulte os manuais do X e
do Tcl/tk para descobrir quais (so muitas!!!).





Como usar este editor de formulrios
------------------------------------

Priemriamente, devemos selecionar um "database" (File-Database) e em seguida
a tabela ou classe desejada (File-Class).
Depois podemos escolher objectos para colocar no formulrio.  Os tipos de
objetos mais interessantes so "entry", que permitem a entrada ou
visualizao de dados das tabelas.  Para colocar labels indicando o nome de
um campo, use Object-Text no menu.  Estilos diferentes, tamanhos diferentes
de caracteres ou cores diferentes, podem ser selecionados nos menus Options
e Fonts.  Para melhor visualizao podemos ter tambm linhas (Objects-Line),
caixas (Objects-Box) e frames (Objects-Frame) que colocam respecitvamente
linhas, quadros coloridos ou simples molduras, com larguras de linha, cores
e cor de preenchimento (fillcolor) selecionveis. A mesma coisa se aplica
aos textos (Object-Text).

Para colocar um destes objetos, use o boto <1> do mouse, click no ponto e
arraste, soltando no outro ponto.  Caso algo fique errado, use o boto do
meio <2> para corrigir.  Dois tipos de correo so possveis diretamente: o
posicionamento, se clicarmos em qualquer ponto de um objeto e arrastarmos
este at a nova posio, ou redimensionamento, se o ponto clicado for
prximo  ltima extermidade introduzida do objeto.  Finalmente,  possvel
tambm editar outras opes clicando duas vezes o boto <2>, rapidamente
sobre o objeto.  Observe que clicando o boto <1> no edita o objeto, mas
introduz outro objeto do mesmo tipo.  Um pouco de prtica ajuda!

Como default, aps a carga do programa, nenhum tipo de objeto est
selecionado, portanto, o que pode ser indicado pelo cursor em forma de
flexa.  Quando executamos o menu Objects-??? (qualquer objeto exceto
"no-object") o cursor  modificado de acordo com o tipo de objeto.
No caso de textos, existem dois tipos: (1) texto normal, a partir do ponto
escolhido; (2) textos mais longos, delimitados por uma caixa.  Em ambos os
casos, aperecer no final da tela (parte abaixo da linha de status), uma
linha de entrada de dados, aonde o texto dever ser introduzido.  Caso
desejemos desistir de introduzir este texto, basta passar o mouse sobre essa
linha, voltando-o em seguida ao centro da janela e a linha desaparece.

Alguns objetos podem ficar obscurecendo outros previamente colocados. Para
corrigir isto, podemos mudar a ordem de posicionamento dos objetos (um sobre
o outro) selecionando o objeto desejado com o boto do meio <2> e depois
executando um destes comandos (Edit-Bring to front) ou (Edit-Send to back).

Podemos deletar objetos indesejados previamente selecionando (um de cada
vez) com o boto <2> e usando Edit-Cut.  Podemos tambm criar mltiplas
cpias de um mesmo objeto usando Edit-Copy ou Edit-Cut para coloc-lo no
buffer de edio e depois usando vrios Edit-Paste para inserir os objetos
no formulrio.  Observe que cada objeto inserido fica exatamente no seu
local original, portanto mltiplas cpias no sero visualizadas a menos que
movamos a cpia anterior para outro local.

Para uma "entry" ficar ligada a um campo de uma tabela (ou atributo de uma
classe, na linguagem de PostgreSQL), devemos introduzir primeiro o objeto e
em seguida editar suas opes (clicando sobre este com o boto <2>, duas
vezesconsecutivas, rapidamente).  Depois escolhemos o menubutton que ficar
acima da janela exibida, escolhendo a uma das opes possveis.

A string "format" mostrada ainda no est implementada. Na edio de
objetos, as cores no so mostradas de forma visual, mas podem ser
escolhidas pelo nome (veja arquivo "/var/X11R6/lib/rgb.txt" para nomes
das cores suportadas por nome no X-Windows)

Muitos comandos possuem aceleradores de teclado.  A maioria destes est
colocada ao nome do comando no menu (Ex: File --> "Save C-s", que significa
que Control-s pode ser usado para salvar um arquivo).  Tambm podemos chamar
os menus por Alt-tecla (Ex: Alt-F no lugar do menu "File") e em seguida
escolher a letra sublinhada do sub-comando.  Outra forma de usar os menus 
"destacando" o menu para uma janela (toplevel) independente, clicando na
opo de cima do menu, identificada por uma linha tracejada, o que nos
permite posicionar a janela criada em qualquer lugar mais conveniente.

Para navegao nas tabelas, os aceleradores so (todos com a telca "Alt"):

Alt-Home	Consulta (retrieve)
Alt-End		Limpa formulrio (clean form)
Alt-Insert	Grava ou Atualiza (record)
Alt-Delete	Apaga, remove (Delete) Cuidado!!!
Alt-Left	Registro anterior (prev)
Alt-Right	Registro seguinte (next)
Alt-Up		Primeiro registr (first)
Alt-Down	ltimo registro (last)


Os arquivos salvos podem ter extenso .frm  mas isto  meramente uma
conveno. Qualquer nome serve.  Acompanha um exemplo para consulta do
arquivo 'nvmarca', com dois campos.  Execute File-Load , selecione rildo.frm
como arquivo a carregar e em seguida Alt-Home para obter o primeiro registro 
e verificar como fica sua apresentao...



Usando mltiplas tabelas e relacionamentos
------------------------------------------

Podemos criar formulrios com mais de uma tabela ao mesmo tempo,
relacionando as consultas a diferentes tabelas (usando SQL diretamente para
isso). Por exemplo, se desejarmos mostrar em um mesmo formulrio dados do
cliente (tabela nvclient) e do convenio (tabela nvconv) associado a este
cliente, de forma que ao mudarmos de cliente, automaticamente o convenio
correspondente ser mostrado.
O procedimento para fazer isso  simples:
	(1) escolher o banco de dados (File-Database)
	(2) escolher a "base class" (File-Base class), que ser a tabela bsica
		para atualizaes.
	(3) escolher uma tabela qualquer (File-Class) e inserir algumas entradas
		no formulrio, conforme desejado. Podemos tambm colocar textos 
		identificando estas entradas.
		O topo da tela (ao lado direito dos menus), mostra qual a tabela
		(class) corretemente selecionada.
	(4) escolher outra tabela e repetir o procedimento com outras entradas
		Podemos repetir este passo com quantas tabelas desejarmos.
	(5) Criar os relacionamentos (File-Relationship-New) de forma que
		cada tabela que no seja a "base class" tenha um campo que 
		repetido na "base class". No exemplo acima, a "base class" 
		nvclient, e o relacionamento  entre 
		(nvclient.convenio <--> nvconv.codigo), isto ,
		na tabela de clientes, existe um campo que identifica qual este
		convenio e o codigo do convenio est presente igualmente (com o
		mesmo valor, mas com nome possivelmente diferente) na tabela de
		convenios. O comando de relacionamentos cria um novo toplevel com
		dois botes na parte de cima. Clicando cada um destes botes
		escolheremos quais tabelas a relacionar.  Ao selecionar as duas
		tabelas, teremos duas listas (que podem ser roladas com o boto <2>
		do mouse, arrastando) que indicam os campos de cada tabela.
		Clicando em um campo (atributo) de cada tabela e em seguida no
		boto "make" (situado em baixo da janela) criaremos um
		relacionamento novo, que poder ser visto na parte inferior da
		janela. Para destruir um relacionamento, basta clicar com o boto
		<1> no mesmo.

No devemos usar vrias tabelas sem efetuar os devidos relacionamentos,
seno obteremos o produto cartesiano das mesmas, o que significa que teremos
uma quantidade N x M de registros (instncias), o que  normal e esperado
em SQL.  Para maiores detalhes consulte algum livro-texto sobre banco de
dados.

