bando de dados postgres ou mysql.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

scom
Usuário Nível 3
Usuário Nível 3
Mensagens: 133
Registrado em: 15 Nov 2004 10:49
Localização: Dourados/MS

bando de dados postgres ou mysql.

Mensagem por scom »

ola amigos. alguem usa banco de dados postrgres ou mysql, tenho um sistema feito em clipper+dbf e preciso migrar para esses bando de dados postrgres ou mysql, alguem tem os caminhos das pedras pra me dar uma ajuda?

Robson
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

bando de dados postgres ou mysql.

Mensagem por lugab »

Eu ouvi falar, e até queria a confirmação dos experientes colegas aqui do fórum, que seria mais fácil migrar de dbf para FireBird
lugab
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

bando de dados postgres ou mysql.

Mensagem por fladimir »

SCOM bando de dados é Acess.. rsrs (brincadeira... se alguém usa...)

Bom falando sério vc disse q tem clipper + dbf e quer migrar, agora pra ter uma visão melhor e quem sabe melhor orientar, qual segmento q seu sistema atende e qual seria uma idéia de tamanho de tabelas (do seu banco no geral) num cliente de grande porte?

Pergunto pois os BD tem diferenças, alguns tem limites de tamanho, tipos de licenças e etc...

Outra questão q vc tem q pensar é: Porque realmente eu preciso mudar? Pois se vc usa o clipper poderia migrar para o xHarbour ou o Harbour e ter ganhos de performance e talvez por um tempo continuar com os dbfs e posteriormente migrar, o que em xHarbour ou Harbour é mais fácil pois vc terá acesso nativo (necessita conhecimento de SQL) ou através de RDDs (se bem q vc tem isso no clipper tb).

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
scom
Usuário Nível 3
Usuário Nível 3
Mensagens: 133
Registrado em: 15 Nov 2004 10:49
Localização: Dourados/MS

bando de dados postgres ou mysql.

Mensagem por scom »

OLA Fladimir

atende e qual seria uma idéia de tamanho de tabelas (do seu banco no geral) num cliente de grande porte?
R: No caso andei fazendo pesquisas na internet e ja como vou começar do zero me aconselharão a fazer com POSTGRESQL por se um banco totalmente free e a performace do Mysql com ele fica se milessimos de segundos mais rapido com mysql, mas que o POSTRGRES ja é mais pra grande porte e mais seguro.

Outra questão q vc tem q pensar é: Porque realmente eu preciso mudar?
R: pelo fato de poder executar comandos sql e mais rapidez ma busca de dados gerando menos trafico na rede e mais segurança porque os DBF não tem segurança menhuma qualque um que tenha um pouco de conhecimento usa um DBU ou DBASE e abre os arquivos sendo que MYSQL ou POSTGRES tem senha.

por que a principio me parece que tenho que migrar meu sistema para Xharbour ou Harbour e ja que vou faze isso ja queria fazer esse novo sistema ja com bando de dados CLIENTES/SERVIDOR.

agora se tivese alguma maneira ótima e funcional pra usar o clipper com MYSQL ou POSTEGRES seria muito bom, mas ai me esbaro no problema de maquinas com WIN 7 64 bits que o clipper não roda ja o harbour o u xharbour roda sem problema.



Robson
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

bando de dados postgres ou mysql.

Mensagem por fladimir »

Robson, acredito q vc mesmo já sabe as respostas... eu iria sugerir o PosGreSQL pelos motivos q vc mesmo disse, com relação a segurança vc tb já disse td... e com relação a usar o Clipper com os BDs q vc citou não saberia dizer...

Então baseado no q pude levantar do teu universo, acredito q PostGreSQL ou MySQL vc estara bem servido, qto a migrar para xHarbour ou Harbour tb acredito ser o caminho para vc encontrar mais ferramentas e apoio para seu objetivo, aki mesmo no fórum tem muita coisa, fora a Internet....

Agora um fato q vc deve pensar é aprender SQL (não sei se vc já sabe), mas pra usar nativo, digamos assim seu o uso de um RDD para ter maior transparência e performance, na minha opinião.

Grande abraço.

Sucesso!!!
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

bando de dados postgres ou mysql.

Mensagem por sygecom »

Eu uso Postgresql com xHarbour + SQLRDD e estou satisfeito com o resultado.

É mais fácil você dar uma estudada de como funciona os SGBD do que alguém lhe explicar como instalar e configurar esses SGBD como postgresql.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

bando de dados postgres ou mysql.

Mensagem por gilsonpaulo »

Use o MariaDB, nao tem licensa dupla, é um fork do MySQL, usa os mesmos comandos e dlls para acesso do MySQL, pois quem desenvolve é o ex dono do MySQL. Vc pode usar o HeidiSQL para criar os bancos e tabelas.

Seque trecho de um sistema com MariaDB (MySQL)

Código: Selecionar todos

#include <hmg.ch>

Function fornecedor

	Private	fAlt:=.f.,fInc:=.f.
	Private	aFornecedor:={}
	Private	aGridOrd := { { || ChgOrd(1)}, { || ChgOrd(2)} }
	
	oServer := TMySQLServer():New("ip ou dominio do servidor", "usuario", "senha")

	If oServer:NetErr()
		MsgStop("Servidor de Base de Dados não foi encontrado!!!")
		Main.Release
	Endif

        oServer:SelectDB("ducler")

	Load Window Fornecedor
	Fornecedor.Center
	Fornecedor.Activate
	
Return(nil)
********************************************************************************
Function fornecedor_form_oninit

	Local oQuery
	Local oRow
	Local i
	Local oCnpj,oTipo
	
	fornecedor.txt_codigo.Enabled			:= .f.
	fornecedor.txt_descricao.Enabled		:= .f.
	fornecedor.txt_cep.Enabled				:= .f.
	fornecedor.combo_pessoa.Enabled		:= .f.
	fornecedor.txt_ibge.Enabled			:= .f.
	fornecedor.txt_endereco.Enabled		:= .f.
	fornecedor.txt_numero.Enabled			:= .f.
	fornecedor.txt_bairro.Enabled			:= .f.
	fornecedor.txt_cidade.Enabled			:= .f.
	fornecedor.txt_uf.Enabled				:= .f.
	fornecedor.txt_cnpj.Enabled			:= .f.
	fornecedor.txt_insc.Enabled			:= .f.
	fornecedor.txt_telefone.Enabled		:= .f.
	fornecedor.txt_fax.Enabled				:= .f.
	fornecedor.txt_celular.Enabled		:= .f.
	fornecedor.txt_contato.Enabled		:= .f.
	fornecedor.txt_email.Enabled			:= .f.
	fornecedor.txt_web.Enabled				:= .f.
	fornecedor.btn_gravar.Enabled			:= .f.
	fornecedor.btn_cancelar.Enabled		:= .f.

	fornecedor.grid_fornecedor.DeleteAllItems()
	
	oQuery := oServer:Query("Select * From fornecedor Order By razao_social" )	
	
	for i := 1 To oQuery:LastRec()
		oRow := oQuery:GetRow(i)
   	
   	oCnpj:=''
   	oTipo:=''
   	
		if len(alltrim(oRow:fieldGet(11))) = 14
   		oCnpj:=transform(oRow:fieldGet(11), '@R 99.999.999/9999-99')
		endif
		
		if len(alltrim(oRow:fieldGet(11))) = 11	
			oCnpj:=transform(oRow:fieldGet(11), '@R 999.999.999-99')
		endif
		
		fornecedor.grid_fornecedor.additem({strzero(oRow:fieldGet(01),6,0),;
															     oRow:fieldGet(02),;
			 										 transform(oRow:fieldGet(13), '@R (99)9999-9999'),;
		  											 transform(oRow:fieldGet(14), '@R (99)9999-9999'),;
	  												 transform(oRow:fieldGet(15), '@R (99)9999-9999'),;
																  oRow:fieldGet(17),;
													 transform(oRow:fieldGet(03), '@R 99999-999'),;
												  		    str(oRow:fieldGet(04)),;
																  oRow:fieldGet(05),;
																  oRow:fieldGet(06),;
																  oRow:fieldGet(07),;
																  oRow:fieldGet(08),;
																  oRow:fieldGet(09),;
																  oRow:fieldGet(10),;
																  oCnpj,;				//oRow:fieldGet(11)
																  oRow:fieldGet(12),;
																  oRow:fieldGet(16),;
																  oRow:fieldGet(18),;
																  oRow:fieldGet(19)})
		oQuery:Skip(1)
	next

	oQuery:Destroy()

  	fornecedor.grid_fornecedor.SetFocus
	fornecedor.grid_fornecedor.Value	:=	1
	
Return(nil)
********************************************************************************
Function fornecedor_btn_incluir_action

	fInc := .t.

	fornecedor.btn_incluir.Enabled		:= .f.
	fornecedor.btn_alterar.Enabled		:= .f.
	fornecedor.btn_excluir.Enabled		:= .f.
	fornecedor.btn_procura.Enabled		:=	.f.
	fornecedor.btn_sair.Enabled			:= .f.
	fornecedor.btn_gravar.Enabled			:= .t.
	fornecedor.btn_cancelar.Enabled		:= .t.

	fornecedor.txt_descricao.Enabled		:= .t.
	fornecedor.txt_cep.Enabled				:= .t.
	fornecedor.combo_pessoa.Enabled		:= .t.
	fornecedor.txt_endereco.Enabled		:= .t.
	fornecedor.txt_numero.Enabled			:= .t.
	fornecedor.txt_bairro.Enabled			:= .t.
	fornecedor.txt_cidade.Enabled			:= .t.
	fornecedor.txt_uf.Enabled				:= .t.
	fornecedor.txt_cnpj.Enabled			:= .t.
	fornecedor.txt_insc.Enabled			:= .t.
	fornecedor.txt_telefone.Enabled		:= .t.
	fornecedor.txt_fax.Enabled				:= .t.
	fornecedor.txt_celular.Enabled		:= .t.
	fornecedor.txt_contato.Enabled		:= .t.
	fornecedor.txt_email.Enabled			:= .t.
	fornecedor.txt_web.Enabled				:= .t.
	fornecedor.grid_fornecedor.Enabled	:=	.f.
	fornecedor.txt_descricao.Setfocus

	fornecedor.txt_codigo.Value		:= ''
	fornecedor.txt_descricao.Value	:= ''
	fornecedor.txt_cep.Value			:= ''
	fornecedor.combo_pessoa.Value		:=	0
	fornecedor.txt_ibge.Value			:= ''
	fornecedor.txt_endereco.Value		:= ''
	fornecedor.txt_numero.Value		:= ''
	fornecedor.txt_bairro.Value		:= ''
	fornecedor.txt_cidade.Value		:= ''
	fornecedor.txt_uf.Value				:= ''
	fornecedor.txt_cnpj.Value			:=	''
	fornecedor.txt_insc.Value			:= ''
	fornecedor.txt_telefone.Value		:= ''
	fornecedor.txt_fax.Value			:= ''
	fornecedor.txt_celular.Value		:= ''
	fornecedor.txt_contato.Value		:= ''
	fornecedor.txt_email.Value			:= ''
	fornecedor.txt_web.Value			:= ''

Return(nil)
********************************************************************************
Function fornecedor_btn_alterar_action

	Local i

	i := fornecedor.grid_fornecedor.Value

	if i == 0 
		Return(nil)
	endif

	fAlt := .t.

	fornecedor.btn_incluir.Enabled		:= .f.
	fornecedor.btn_alterar.Enabled		:= .f.
	fornecedor.btn_excluir.Enabled		:= .f.
	fornecedor.btn_procura.Enabled		:=	.f.
	fornecedor.btn_sair.Enabled			:= .f.
	fornecedor.btn_gravar.Enabled			:= .t.
	fornecedor.btn_cancelar.Enabled		:= .t.

	fornecedor.txt_descricao.Enabled		:= .t.
	fornecedor.txt_cep.Enabled				:= .t.
	fornecedor.combo_pessoa.Enabled		:= .t.
	fornecedor.txt_endereco.Enabled		:= .t.
	fornecedor.txt_numero.Enabled			:= .t.
	fornecedor.txt_bairro.Enabled			:= .t.
	fornecedor.txt_cidade.Enabled			:= .t.
	fornecedor.txt_uf.Enabled				:= .t.
	fornecedor.txt_cnpj.Enabled			:= .t.
	fornecedor.txt_insc.Enabled			:= .t.
	fornecedor.txt_telefone.Enabled		:= .t.
	fornecedor.txt_fax.Enabled				:= .t.
	fornecedor.txt_celular.Enabled		:= .t.
	fornecedor.txt_contato.Enabled		:= .t.
	fornecedor.txt_email.Enabled			:= .t.
	fornecedor.txt_web.Enabled				:= .t.
	fornecedor.grid_fornecedor.Enabled	:=	.f.

Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_btn_gravar_action

	if fInc = .t.
		grava_inclusao()
	endif

	if fAlt = .t.
		grava_alteracao()
	endif
		
Return(nil)
********************************************************************************
Function grava_inclusao

	Local	fCod,fDes,fCep,fTipo,fIbge,fEnd,fnum,fBai,fCid,fUf,fCnpj,fInsc,fFone,fFax,fCel,fCont,fMail,fWeb
	Local oQuery
	Local i
	Local oCnpj

	fDes	:=	fornecedor.txt_descricao.Value
	fCep	:=	strtran(fornecedor.txt_cep.Value,"-")
	fTipo	:=	str(fornecedor.combo_pessoa.Value)
	fIbge	:=	fornecedor.txt_ibge.Value
	fEnd	:=	fornecedor.txt_endereco.Value
	fNum	:=	fornecedor.txt_numero.Value
	fBai	:=	fornecedor.txt_bairro.Value
	fCid	:=	fornecedor.txt_cidade.Value
	fUf	:=	fornecedor.txt_uf.Value
	fCnpj	:=	strtran(strtran(strtran(fornecedor.txt_cnpj.Value,"."),"-"),"/")
	fInsc	:=	fornecedor.txt_insc.Value
	fFone	:=	strtran(strtran(strtran(fornecedor.txt_telefone.Value,"("),")"),"-")
	fFax	:=	strtran(strtran(strtran(fornecedor.txt_fax.Value,"("),")"),"-")
	fCel	:=	strtran(strtran(strtran(fornecedor.txt_celular.Value,"("),")"),"-")
	fCont	:=	fornecedor.txt_contato.Value
	fMail	:=	fornecedor.txt_email.Value
	fWeb	:=	fornecedor.txt_web.Value

	oQuery:=oServer:Query("select fornecedor from controle")
	oRow := oQuery:GetRow(i)
	fCod:=strzero(oRow:FieldGet(01)+1,6,0)
	oQuery:Destroy()

	oQuery:=oServer:Query("insert into fornecedor (codigo,razao_social,cep,tipo_pessoa,ibge,endereco,numero,bairro,cidade,uf,cnpj_cpf,insc_rg,telefone,fax,celular,contato,email,web) values ("+fCod+",'"+fDes+"','"+fCep+"',"+fTipo+",'"+fIbge+"','"+fEnd+"','"+fNum+"','"+fBai+"','"+fCid+"','"+fUf+"','"+fCnpj+"','"+fInsc+"','"+fFone+"','"+fFax+"','"+fCel+"','"+fCont+"','"+fMail+"','"+fWeb+"')")
	oQuery:Destroy()
	
	oQuery := oServer:Query("Select * From fornecedor where codigo="+fCod+"")	
	
	oRow := oQuery:GetRow(i)
   	
  	oCnpj:=''
   	
	if len(alltrim(oRow:fieldGet(11))) = 14
  		oCnpj:=transform(oRow:fieldGet(11), '@R 99.999.999/9999-99')
	endif
		
	if len(alltrim(oRow:fieldGet(11))) = 11	
		oCnpj:=transform(oRow:fieldGet(11), '@R 999.999.999-99')
	endif
		
	fornecedor.grid_fornecedor.additem({strzero(oRow:fieldGet(01),6,0),;
														     oRow:fieldGet(02),;
		 										 transform(oRow:fieldGet(13), '@R (99)9999-9999'),;
	  											 transform(oRow:fieldGet(14), '@R (99)9999-9999'),;
  												 transform(oRow:fieldGet(15), '@R (99)9999-9999'),;
															  oRow:fieldGet(17),;
												 transform(oRow:fieldGet(03), '@R 99999-999'),;
				  		     							 str(oRow:fieldGet(04)),;
															  oRow:fieldGet(05),;
															  oRow:fieldGet(06),;
															  oRow:fieldGet(07),;
															  oRow:fieldGet(08),;
															  oRow:fieldGet(09),;
															  oRow:fieldGet(10),;
															  oCnpj,;				//oRow:fieldGet(11)
															  oRow:fieldGet(12),;
															  oRow:fieldGet(16),;
															  oRow:fieldGet(18),;
															  oRow:fieldGet(19)})

	oQuery:Destroy()

	oQuery:=oServer:Query("update controle set fornecedor="+fCod+"")
	oQuery:Destroy()

   ChgOrd(2)
	
	for i:=1 to fornecedor.grid_fornecedor.itemcount
		if fornecedor.grid_fornecedor.item(i)[1] = fCod
			fornecedor.grid_fornecedor.Value	:=	i
		endif
	next

	fInc := .f.

	fornecedor.btn_incluir.Enabled		:= .t.
	fornecedor.btn_alterar.Enabled		:= .t.
	fornecedor.btn_excluir.Enabled		:= .t.
	fornecedor.btn_sair.Enabled			:= .t.
	fornecedor.btn_procura.Enabled		:=	.t.
	fornecedor.btn_gravar.Enabled			:= .f.
	fornecedor.btn_cancelar.Enabled		:= .f.

	fornecedor.txt_descricao.Enabled		:= .f.
	fornecedor.txt_cep.Enabled				:= .f.
	fornecedor.combo_pessoa.Enabled		:= .f.
	fornecedor.txt_endereco.Enabled		:= .f.
	fornecedor.txt_numero.Enabled			:= .f.
	fornecedor.txt_bairro.Enabled			:= .f.
	fornecedor.txt_cidade.Enabled			:= .f.
	fornecedor.txt_uf.Enabled				:= .f.
	fornecedor.txt_cnpj.Enabled			:= .f.
	fornecedor.txt_insc.Enabled			:= .f.
	fornecedor.txt_telefone.Enabled		:= .f.
	fornecedor.txt_fax.Enabled				:= .f.
	fornecedor.txt_celular.Enabled		:= .f.
	fornecedor.txt_contato.Enabled		:= .f.
	fornecedor.txt_email.Enabled			:= .f.
	fornecedor.txt_web.Enabled				:= .f.
	fornecedor.grid_fornecedor.Enabled	:=	.t.
	fornecedor.grid_fornecedor.Setfocus

Return(nil)
********************************************************************************
Function grava_alteracao

	Local	fCod,fDes,fCep,fTipo,fIbge,fEnd,fnum,fBai,fCid,fUf,fCnpj,fInsc,fFone,fFax,fCel,fCont,fMail,fWeb
	Local oQuery
	Local i
	Local oCnpj,oTipo

	i := fornecedor.grid_fornecedor.Value

	if i = 0 
		Return(nil)
	endif

	fCod	:=	fornecedor.txt_codigo.Value
	fDes	:=	fornecedor.txt_descricao.Value
	fCep	:=	strtran(fornecedor.txt_cep.Value,"-")
	fTipo	:=	str(fornecedor.combo_pessoa.Value)
	fIbge	:=	fornecedor.txt_ibge.Value
	fEnd	:=	fornecedor.txt_endereco.Value
	fNum	:=	fornecedor.txt_numero.Value
	fBai	:=	fornecedor.txt_bairro.Value
	fCid	:=	fornecedor.txt_cidade.Value
	fUf	:=	fornecedor.txt_uf.Value
	fCnpj	:=	strtran(strtran(strtran(fornecedor.txt_cnpj.Value,"."),"-"),"/")
	fInsc	:=	fornecedor.txt_insc.Value
	fFone	:=	strtran(strtran(strtran(fornecedor.txt_telefone.Value,"("),")"),"-")
	fFax	:=	strtran(strtran(strtran(fornecedor.txt_fax.Value,"("),")"),"-")
	fCel	:=	strtran(strtran(strtran(fornecedor.txt_celular.Value,"("),")"),"-")
	fCont	:=	fornecedor.txt_contato.Value
	fMail	:=	fornecedor.txt_email.Value
	fWeb	:=	fornecedor.txt_web.Value


	oQuery:=oServer:Query("update fornecedor set razao_social='"+fDes+"',cep='"+fCep+"',tipo_pessoa="+fTipo+",ibge='"+fIbge+"',endereco='"+fEnd+"',numero='"+fNum+"',bairro='"+fBai+"',cidade='"+fCid+"',uf='"+fUf+"',cnpj_cpf='"+fCnpj+"',insc_rg='"+fInsc+"',telefone='"+fFone+"',fax='"+fFax+"',celular='"+fCel+"',contato='"+fCont+"',email='"+fMail+"',web='"+fWeb+"' where codigo='"+fCod+"'")

	fornecedor.grid_fornecedor.Cell(i,02)	:=	fornecedor.txt_descricao.Value
	fornecedor.grid_fornecedor.Cell(i,03)	:=	fornecedor.txt_telefone.Value
	fornecedor.grid_fornecedor.Cell(i,04)	:=	fornecedor.txt_fax.Value
	fornecedor.grid_fornecedor.Cell(i,05)	:=	fornecedor.txt_celular.Value
	fornecedor.grid_fornecedor.Cell(i,06)	:=	fornecedor.txt_contato.Value
	fornecedor.grid_fornecedor.Cell(i,07)	:=	fornecedor.txt_cep.Value
	fornecedor.grid_fornecedor.Cell(i,08)	:=	fornecedor.combo_pessoa.Value
	fornecedor.grid_fornecedor.Cell(i,09)	:=	fornecedor.txt_ibge.Value
	fornecedor.grid_fornecedor.Cell(i,10)	:=	fornecedor.txt_endereco.Value
	fornecedor.grid_fornecedor.Cell(i,11)	:=	fornecedor.txt_numero.Value
	fornecedor.grid_fornecedor.Cell(i,12)	:=	fornecedor.txt_bairro.Value
	fornecedor.grid_fornecedor.Cell(i,13)	:=	fornecedor.txt_cidade.Value
	fornecedor.grid_fornecedor.Cell(i,14)	:=	fornecedor.txt_uf.Value
	fornecedor.grid_fornecedor.Cell(i,15)	:=	fornecedor.txt_cnpj.Value
	fornecedor.grid_fornecedor.Cell(i,16)	:=	fornecedor.txt_insc.Value
	fornecedor.grid_fornecedor.Cell(i,18)	:=	fornecedor.txt_email.Value
	fornecedor.grid_fornecedor.Cell(i,19)	:=	fornecedor.txt_web.Value

   ChgOrd(2)
	
	for i:=1 to fornecedor.grid_fornecedor.itemcount
		if fornecedor.grid_fornecedor.item(i)[1] = fCod
			fornecedor.grid_fornecedor.Value	:=	i
		endif
	next

	fAlt := .f.

	fornecedor.btn_incluir.Enabled		:= .t.
	fornecedor.btn_alterar.Enabled		:= .t.
	fornecedor.btn_excluir.Enabled		:= .t.
	fornecedor.btn_sair.Enabled			:= .t.
	fornecedor.btn_procura.Enabled		:=	.t.
	fornecedor.btn_gravar.Enabled			:= .f.
	fornecedor.btn_cancelar.Enabled		:= .f.

	fornecedor.txt_descricao.Enabled		:= .f.
	fornecedor.txt_cep.Enabled				:= .f.
	fornecedor.combo_pessoa.Enabled		:= .f.
	fornecedor.txt_endereco.Enabled		:= .f.
	fornecedor.txt_numero.Enabled			:= .f.
	fornecedor.txt_bairro.Enabled			:= .f.
	fornecedor.txt_cidade.Enabled			:= .f.
	fornecedor.txt_uf.Enabled				:= .f.
	fornecedor.txt_cnpj.Enabled			:= .f.
	fornecedor.txt_insc.Enabled			:= .f.
	fornecedor.txt_telefone.Enabled		:= .f.
	fornecedor.txt_fax.Enabled				:= .f.
	fornecedor.txt_celular.Enabled		:= .f.
	fornecedor.txt_contato.Enabled		:= .f.
	fornecedor.txt_email.Enabled			:= .f.
	fornecedor.txt_web.Enabled				:= .f.
	fornecedor.grid_fornecedor.Enabled	:=	.t.
	fornecedor.grid_fornecedor.Setfocus

Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_grid_fornecedor_onchange

	Local	fCod,fDes,fCep,fTipo,fIbge,fEnd,fnum,fBai,fCid,fUf,fCnpj,fInsc,fFone,fFax,fCel,fCont,fMail,fWeb
	Local oQuery
	Local aGridRow
	Local i
	
	i := fornecedor.grid_fornecedor.Value

	if i = 0 
		Return(nil)
	endif

	aGridRow	:= fornecedor.grid_fornecedor.Item (i)
	fcod		:=	aGridRow[01]
	fDes		:=	aGridRow[02]
	fCep		:=	aGridRow[07]
	fTipo		:= val(aGridRow[08])
	fIbge		:=	aGridRow[09]
	fEnd		:=	aGridRow[10]
	fNum		:=	aGridRow[11]
	fBai		:=	aGridRow[12]
	fCid		:=	aGridRow[13]
	fUf		:=	aGridRow[14]
	fCnpj		:=	aGridRow[15]
	fInsc		:=	aGridRow[16]
	fFone		:=	aGridRow[03]
	fFax		:=	aGridRow[04]
	fCel		:=	aGridRow[05]
	fCont		:=	aGridRow[06]
	fMail		:=	aGridRow[18]
	fWeb		:=	aGridRow[19]
	
	fornecedor.txt_codigo.Value		:= fCod
	fornecedor.txt_descricao.Value	:= fDes
	fornecedor.txt_cep.Value			:= fCep
	fornecedor.combo_pessoa.Value		:=	fTipo
	fornecedor.txt_ibge.Value			:= fIbge
	fornecedor.txt_endereco.Value		:= fEnd
	fornecedor.txt_numero.Value		:= fNum
	fornecedor.txt_bairro.Value		:= fBai
	fornecedor.txt_cidade.Value		:= fCid
	fornecedor.txt_uf.Value				:= fUf
	fornecedor.txt_cnpj.Value			:=	fCnpj
	fornecedor.txt_insc.Value			:= fInsc
	fornecedor.txt_telefone.Value		:= fFone
	fornecedor.txt_fax.Value			:= fFax
	fornecedor.txt_celular.Value		:= fCel
	fornecedor.txt_contato.Value		:= fCont
	fornecedor.txt_email.Value			:= fMail
	fornecedor.txt_web.Value			:= fWeb
	                                    
Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_txt_cep_onlostfocus

	Local oCep
	Local oQuery
	Local oRow
	Local i

	oCep:=strtran(fornecedor.txt_cep.Value,"-")
	
	oQuery:=oServer:Query("select abrev_tipo,nome_log,extenso_ba,nome_local,uf_log from cep2007 where cep8_log='"+oCep+"'")
	
	oRow := oQuery:GetRow(i)
	
	if !empty(oRow:fieldGet(1))
		fornecedor.txt_endereco.Value	:=	alltrim(oRow:fieldGet(1))+" "+alltrim(oRow:fieldGet(2))
		fornecedor.txt_bairro.Value	:=	alltrim(oRow:fieldGet(3))
		fornecedor.txt_cidade.Value	:=	alltrim(oRow:fieldGet(4))
		fornecedor.txt_uf.Value			:=	alltrim(oRow:fieldGet(5))
		oQuery:Destroy()
		
		oQuery:=oServer:Query("select codigo from ibge where cidade='"+fornecedor.txt_cidade.Value+"'")
		oRow := oQuery:GetRow(i)
		fornecedor.txt_ibge.Value		:=	oRow:fieldGet(1)
		oQuery:Destroy()
	else
		oQuery:Destroy()
	endif

Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_btn_procura_action

	Load Window pesfor
	pesfor.Center
	pesfor.Activate
	
Return(nil)
********************************************************************************
Function pesfor_txt_pesfor_onenter

	Local oQuery
	Local oRow
	Local i
	Local	pProcura
	Local	oCnpj,oTipo

	pProcura	:=	pesfor.txt_pesfor.Value

   pesfor.release

   Wait Window "Aguarde, Pesquisando Fornecedores" NoWait

	fornecedor.grid_fornecedor.DeleteAllItems()

	oQuery := oServer:Query("Select * From fornecedor where codigo like '%"+pProcura+"%' or razao_social like '%"+pProcura+"%' Order By razao_social" )	
	
	for i := 1 To oQuery:LastRec()
		oRow := oQuery:GetRow(i)
   	
   	oCnpj:=''
   	oTipo:=''
   	
		if len(alltrim(oRow:fieldGet(11))) = 14
   		oCnpj:=transform(oRow:fieldGet(11), '@R 99.999.999/9999-99')
		endif
		
		if len(alltrim(oRow:fieldGet(11))) = 11	
			oCnpj:=transform(oRow:fieldGet(11), '@R 999.999.999-99')
		endif
		
		fornecedor.grid_fornecedor.additem({strzero(oRow:fieldGet(01),6,0),;
															     oRow:fieldGet(02),;
			 										 transform(oRow:fieldGet(13), '@R (99)9999-9999'),;
		  											 transform(oRow:fieldGet(14), '@R (99)9999-9999'),;
	  												 transform(oRow:fieldGet(15), '@R (99)9999-9999'),;
																  oRow:fieldGet(17),;
													 transform(oRow:fieldGet(03), '@R 99999-999'),;
												  		    str(oRow:fieldGet(04)),;
																  oRow:fieldGet(05),;
																  oRow:fieldGet(06),;
																  oRow:fieldGet(07),;
																  oRow:fieldGet(08),;
																  oRow:fieldGet(09),;
																  oRow:fieldGet(10),;
																  oCnpj,;				//oRow:fieldGet(11)
																  oRow:fieldGet(12),;
																  oRow:fieldGet(16),;
																  oRow:fieldGet(18),;
																  oRow:fieldGet(19)})
		oQuery:Skip(1)
	next

	oQuery:Destroy()

	Wait Clear

  	fornecedor.grid_fornecedor.SetFocus
	fornecedor.grid_fornecedor.Value	:=	1

Return(nil)
********************************************************************************
********************************************************************************
Static Function ChgOrd( nOrder )

	Local aTemp := {}
	Local nX

	for nX := 1 to fornecedor.grid_fornecedor.ItemCount
  		aadd( aTemp, fornecedor.grid_fornecedor.Item( nX ) )
	next nX

	aTemp := asort( aTemp,,,{|a,b| a[nOrder]<=b[nOrder]} )

	fornecedor.grid_fornecedor.DeleteAllItems
	
	for nX := 1 to len( aTemp )	
  		fornecedor.grid_fornecedor.AddItem( aTemp[nX] )
	next nX

	fornecedor.grid_fornecedor.Value := 1

Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_btn_excluir_action

	Local i
	Local pCod
	Local aGridRow

	i := fornecedor.grid_fornecedor.Value

	if i == 0 
		Return
	EndIf

	aGridRow	:= fornecedor.grid_fornecedor.Item (i)
	pCod		:= aGridRow [1]

	oQuery := oServer:Query("delete from fornecedor where codigo =" + pCod)

	fornecedor.grid_fornecedor.DeleteItem (i)
	fornecedor.grid_fornecedor.Setfocus
	fornecedor.grid_fornecedor.Value			:=	i

Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_btn_sair_action

	Fornecedor.release
	
Return(nil)
********************************************************************************
********************************************************************************
Function fornecedor_btn_cancelar_action

	Local i
	
	i := fornecedor.grid_fornecedor.Value

	fAlt:=.f.
	fInc:=.f.
	
	fornecedor.btn_incluir.Enabled		:= .t.
	fornecedor.btn_alterar.Enabled		:= .t.
	fornecedor.btn_excluir.Enabled		:= .t.
	fornecedor.btn_sair.Enabled			:= .t.
	fornecedor.txt_descricao.Enabled		:= .f.
	fornecedor.txt_cep.Enabled				:= .f.
	fornecedor.combo_pessoa.Enabled		:= .f.
	fornecedor.txt_endereco.Enabled		:= .f.
	fornecedor.txt_numero.Enabled			:= .f.
	fornecedor.txt_bairro.Enabled			:= .f.
	fornecedor.txt_cidade.Enabled			:= .f.
	fornecedor.txt_uf.Enabled				:= .f.
	fornecedor.txt_cnpj.Enabled			:= .f.
	fornecedor.txt_insc.Enabled			:= .f.
	fornecedor.txt_telefone.Enabled		:= .f.
	fornecedor.txt_fax.Enabled				:= .f.
	fornecedor.txt_celular.Enabled		:= .f.
	fornecedor.txt_contato.Enabled		:= .f.
	fornecedor.txt_email.Enabled			:= .f.
	fornecedor.txt_web.Enabled				:= .f.
	fornecedor.grid_fornecedor.Enabled	:=	.t.
	fornecedor.btn_procura.Enabled		:=	.t.
	fornecedor.btn_gravar.Enabled			:= .f.
	fornecedor.btn_cancelar.Enabled		:= .f.

	fornecedor.grid_fornecedor.Setfocus
	fornecedor.grid_fornecedor.Value			:=	i

	fornecedor_grid_fornecedor_onchange()
	
Return(nil)
********************************************************************************
********************************************************************************
Responder