Jump to content
Fivewin Brasil

DATABASE


Luiz Arruda (ICO)

Recommended Posts

Boa Tarde ..

Alguém poderia dizer porque o código abaixo não está salvando no DBF ??

Eu clico no buttom "cadastrar" e nada acontece ...

 
Procedure Entrada()
  Local oGet[8]
  Select 1
  USE BDADOS ALIAS OCLI Exclusive
  
  DATABASE oCli
 
 Define Dialog oDlg Resource "#1001"
      Redefine Get oGet[1] Var oCli:Comp   ID 4007 Of oDlg
      Redefine Get oget[2] Var oCli:Data   ID 4008 Of oDlg
      Redefine Get oGet[3] Var oCli:Loja   ID 4009 Of oDlg
      Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg
      Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg
      Redefine Get oGet[4] Var oCli:Marca  ID 4018 oF oDlg
      Redefine Get oGet[5] Var oCli:Valor  ID 4014 Of oDlg
      Redefine Get oGet[6] Var oCli:obs    ID 4012 Of oDlg  
 Redefine Button obtn Prompt "Cadastrar" ID 4016 Action (oCli:Save())
  
 Activate Dialog oDlg Centered
 Return(.t.)
 
Obrigado..
Link to comment
Share on other sites



Procedure Entrada()

Local oGet[8]

Select 1

USE BDADOS ALIAS OCLI Exclusive

/* // Ordem dos Indices do seu banco de dados.
OrdListAdd( "CARDAPIO", "CODIGO", "DESCRICAO" )
OrdDescend( ,,.F. ) // - Decrescente
*/

DATABASE oCli

oCli:Load()
oCli:SetBuffer( .T. ) // ou: .F. // teste ai

Define Dialog oDlg Resource "#1001"

Redefine Get oGet[1] Var oCli:Comp ID 4007 Of oDlg
Redefine Get oget[2] Var oCli:Data ID 4008 Of oDlg
Redefine Get oGet[3] Var oCli:Loja ID 4009 Of oDlg
Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg
Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg
Redefine Get oGet[4] Var oCli:Marca ID 4018 oF oDlg
Redefine Get oGet[5] Var oCli:Valor ID 4014 Of oDlg
Redefine Get oGet[6] Var oCli:obs ID 4012 Of oDlg

// Melhor passar para um funcao e travar o registro se em rede.
// Depois destrave. Ou use o comando de trava/destrava da classe,
// Veja tambem se voce não tem desvios no programa, se tiver, voce
// perdera o SetBuffer e nao conseguira gravar, ai teras que usar o
// Replace normal ou descobrir onde perdeu o "Foco" do DATABASE.
Redefine Button obtn Prompt "Cadastrar" ID 4016 Action (oCli:Save())

Activate Dialog oDlg Centered

Return(.t.)



Xeiros no kangotyyyy... kkkkkkkkkkkkkkkk


abs,

Link to comment
Share on other sites


Procedure Entrada()

Local oGet[8]

Select 1

USE BDADOS ALIAS OCLI Exclusive

DATABASE oCli

oCli:SetBuffer( .T. ) //dentro da função já faz o load()

Define Dialog oDlg Resource "#1001"

Redefine Get oGet[1] Var oCli:Comp ID 4007 Of oDlg

Redefine Get oget[2] Var oCli:Data ID 4008 Of oDlg

Redefine Get oGet[3] Var oCli:Loja ID 4009 Of oDlg

Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg

Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg

Redefine Get oGet[4] Var oCli:Marca ID 4018 oF oDlg

Redefine Get oGet[5] Var oCli:Valor ID 4014 Of oDlg

Redefine Get oGet[6] Var oCli:obs ID 4012 Of oDlg

Redefine Button obtn Prompt "Cadastrar" ID 4016 Action (oCli:Save(),oCli:SetBuffer( .F. ))


Activate Dialog oDlg Centered

Return(.t.)

Dentro da Função Save() já existe o tratamento de trava, embora simples, mas tem, portanto crie a sua, agora senão houver necessidade assim vai dar certo.
Link to comment
Share on other sites

Interessante... nem um das duas formas funcionou...

.. e não tem desvio, não tem chamadas para lugar nem um o PRG é só isso ai mesmo. nada mais

 
Procedure Entrada()
  Local oGet[8]
  Select 1
  USE BDADOS ALIAS OCLI Exclusive New 
  
  DATABASE oCli
  oCli:Load()
  oCli:SetBuffer( .T. ) 
   
 Define Dialog oDlg Resource "#1001"
   Redefine Get oGet[1] Var oCli:Comp   ID 4007 Of oDlg
   Redefine Get oget[2] Var oCli:Data   ID 4008 Of oDlg
   Redefine Get oGet[3] Var oCli:Loja   ID 4009 Of oDlg
   Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg
   Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg
   Redefine Get oGet[4] Var oCli:Marca  ID 4018 oF oDlg
   Redefine Get oGet[5] Var oCli:Valor  ID 4014 Of oDlg
   Redefine Get oGet[6] Var oCli:obs    ID 4012 Of oDlg  
   Redefine Button obtn Prompt "Cadastrar" ID 4016 Action (oCli:Save(),oCli:SetBuffer( .F. ))
 Activate Dialog oDlg Centered
 Return(.t.)
Link to comment
Share on other sites

// dentro da função já faz o load()

Se houver desvio na função, ele perde o foco e terá que fazer oDbf:Load() novamente, não sei se é um defeito, mas comigo acontece 3 por 4, ai para não perder tempo uso o SEEK() e os REPLACES normais.

E é um pé no S... saber onde foi que eu perdi o foco do DATABASE em um código de 15.000 linhas ou mais...

abs,

Link to comment
Share on other sites

Interessante... nem um das duas formas funcionou...

.. e não tem desvio, não tem chamadas para lugar nem um o PRG é só isso ai mesmo. nada mais

 
Procedure Entrada()
  Local oGet[8]
  Select 1
  USE BDADOS ALIAS OCLI Exclusive New 
  
  DATABASE oCli
  oCli:Load()
  oCli:SetBuffer( .T. ) 
   
 Define Dialog oDlg Resource "#1001"
   Redefine Get oGet[1] Var oCli:Comp   ID 4007 Of oDlg
   Redefine Get oget[2] Var oCli:Data   ID 4008 Of oDlg
   Redefine Get oGet[3] Var oCli:Loja   ID 4009 Of oDlg
   Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg
   Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg
   Redefine Get oGet[4] Var oCli:Marca  ID 4018 oF oDlg
   Redefine Get oGet[5] Var oCli:Valor  ID 4014 Of oDlg
   Redefine Get oGet[6] Var oCli:obs    ID 4012 Of oDlg  
   Redefine Button obtn Prompt "Cadastrar" ID 4016 Action (oCli:Save(),oCli:SetBuffer( .F. ))
 Activate Dialog oDlg Centered
 Return(.t.)

Ponha os indices do .CDX do objeto oCli

Link to comment
Share on other sites

Aferra, nao vejo nenhum problema em ele usar ALIAS, veja como faço:



IF NetUse( "ORCAMENT", .T. )
//-> Nova Ordem
OrdListAdd( "ORCAMENT", "PEDIDO" ) // indice por pedido, só tem 1 kkkkkkkkkkk
OrdDescend( ,,.F. ) // - Decrescente
DATABASE DbPedidos
DbPedidos:Gotop()
DbPedidos:Load()
DbPedidos:SetBuffer( .T. )
ELSE
MsgStop( "Banco de Dados dos PEDIDOS Bloqueado", "Cuidado!" )
RETURN NIL
ENDIF

FUNCTION NetUse( cDbf, lShared )

LOCAL cAlias := cFileName( cDbf )
LOCAL bAlias := cFileName( cDbf )

// CONTROLE DE PARAMETROS DE ENTRADA =====================
If cDbf = NIL .OR. !File( cDbf + ".DBF" )
MsgStop( "NOME DO ARQUIVO INCORRETO" + CRLF + CRLF + ;
"NÃO ACHEI BANCO DE DADOS." + CRLF + CRLF + ;
cDbf + ".DBF", "ERRO FATAL!!" )
RETURN( .F. )
ENDIF

IIf( lShared = NIL, lShared := .F., lShared )
// ======================================================

IF lShared = .T.
USE ( cDbf ) ALIAS ( cAlias := GetNewAlias( cAlias ) ) ;
VIA "DBFCDX" SHARED NEW
ELSE
USE ( cDbf ) ALIAS ( cAlias ) VIA "DBFCDX" EXCLUSIVE NEW
ENDIF

IF !NetErr()
RETURN( .T. )
ENDIF

// Se nÆo podemos abrir, solicita repeti‡Æo
MsgStop( "IMPOSSIVEL ABRIR BANCO DE DADOS: " + cAlias + CRLF + ;
OemToAnsi( "BLOQUEADO POR OUTRO USUµRIO." ), ;
"ERRO FATAL DE REDE! FECHAR BANCO DE DADOS." )

RETURN( .F. )
Link to comment
Share on other sites


// ------------------------------------------------------------------------
// Funci¢n ...: GetNewAlias
// Descripci¢n: Asigna un nuevo alias £nico, es decir, que no exista.
// Es imprescindible para trabajo en MDI, al poder abrir
// la misma ventana varias veces.
// Par metros : cAlias -> Alias asignado previamente.
// Devolve ..: un alias £nico.
// Notas .....: Extraida de un ejemplo del uso MDI en Fivewin
// \SAMPLES\TESTMDI8.PRG
// ------------------------------------------------------------------------
FUNCTION GetNewAlias( cAlias )
STATIC n := 0
RETURN cAlias + StrZero( ++n, 4 )

Link to comment
Share on other sites




SELECT( DbClientes:cAlias )

IF lAppend //-> INCLUSAO NO BANCO DE DADOS - DATABASE

DbClientes:SetOrder( 1 ) // Ordenado Por Raz_Matric
DbClientes:GoBottom()
DbClientes:Blank()

XCID_COB := SPACE(20)
XUF_COB := SPACE(02)
XCEP_COB := SPACE(09)
XCON_COB := SPACE(30)
XDEPTO_COB := SPACE(20)
XFONE_COB := SPACE(22)
XFAX_COB := SPACE(14)

ELSE //-> ALTERACAO NO BANCO DE DADOS

IF EOF()

MsgStop( OemToAnsi( "Aten‡Æo Usu rio: " ) +CRLF+ ;
OemToAnsi( "Banco de Dados Est Vazio, Cadastre " ) +CRLF+ ;
OemToAnsi( "os Elementos Para Esta Opera‡Æo. " ) +CRLF+ ;
OemToAnsi( "Acesso NÆo Permitido ao Banco de Dados" ), ;
OemToAnsi( "Mensagem de Erro Para o Usu rio. " ) )

GO TOP

RETURN( .F. )

ENDIF

IF .NOT. ( XALTERADADOS )

MsgStop( OemToAnsi( "Aten‡Æo Usu rio: " ) +CRLF+ ;
OemToAnsi( "Opera‡Æo Inv lida! " ) +CRLF+ ;
OemToAnsi( "Vocˆ NÆo Tem Autoriza‡Æo Para " ) +CRLF+ ;
OemToAnsi( "Alterar os Dados do Cliente. " ), ;
OemToAnsi( "Mensagem de Erro Para o Usu rio. " ) )

RETURN( .F. )

ENDIF

// DIGA AOS GETS QUEM E QUEM NO BANCO DE DADOS NA ALTERACAO

nRecNo := (DbClientes:cAlias)->( RecNo() )
DbClientes:GoTo( nRecNo )
nOldRecNo := (DbClientes:cAlias)->( RecNo() )

nCodigo := ( DbClientes:Raz_Matric ) //Codigo

XRAZMATRIC := ( DbClientes:cAlias )->Raz_Matric
XDESTNOME := ( DbClientes:cAlias )->Dest_Nome
XENDECLI := ( DbClientes:cAlias )->End
XNUMERO := ( DbClientes:cAlias )->Numero
XCOMPLEMENT := ( DbClientes:cAlias )->Complement
XBAIRCLI := ( DbClientes:cAlias )->Bai
XCIDACLI := ( DbClientes:cAlias )->Cid
XUFDACIDADE := ( DbClientes:cAlias )->Uf
XCEPCLI := ( DbClientes:cAlias )->Cep

ENDIF


Ou diretamente nos GETS apontando para o .DBF mas mostre a ele qual é o indice a alterar, geralmente o primeiro, CODIGO por exemplo.

Link to comment
Share on other sites

Assim eu consegui.. só que sempre cria um registro vazio na entrada da dialog, e é só um mesmo, olhando a gente até sabe onde tá criando

mas se eu tirar tirar o oCli:append ou oCli:Blnak ali do inicio ou do Action para de funcionar geral...

Tudo bem por enquanto, é só excluir o registro vazio ao fechar a janela que fica OK, mas ainda espero uma solução

Obrigado a todos que ajudaram...

      
DATABASE oCli
  oCli:SetBuffer( .T. ) 
  oCli:Append()
  oCli:Blank() 
  oCli:gotop()
Define Dialog oDlg Resource "#1001"
   
   Redefine Get oGet[1] Var oCli:Comp   ID 4007 Of oDlg
   Redefine Get oget[2] Var oCli:Data   ID 4008 Of oDlg
   Redefine Get oGet[3] Var oCli:Loja   ID 4009 Of oDlg
   Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg
   Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg
   Redefine Get oGet[4] Var oCli:Marca  ID 4018 oF oDlg
   Redefine Get oGet[5] Var oCli:Valor  ID 4014 Of oDlg
   Redefine Get oGet[6] Var oCli:obs    ID 4012 Of oDlg 
                                
Redefine Button obtn Prompt "Cadastrar" ID 4016 Action  ;
                              ( oCli:Save(),;
                                      oCli:SetBuffer(.t.),;
                                      oCli:Append(),;
                                      oCli:Blank(),;
                                      oDlg:refresh(),;   
                                      odlg:Update())
Link to comment
Share on other sites

Ola amigos

Ico EU uso muito esta classe, inclusive adaptei ela para usar com a SQLRDD e ficou show de bola, de repente você pode esta usando uma classe que estava com bug, pois estou vendo que você esta usando a FWH 9.07 é isso mesmo né, pois ela tem alguns bugs mesmo, se você quiser me enviar posso analisa-la e te enviar corrigida e te mostrar a forma correta para você usar, pois a forma acima esta errada, você não precisa dar um APPEND. não precisa colocar nem no INICIO nem NA GRAVAÇÃO... o METHOD SAVE já faz isso pra você.

Fico no aguardo.

Link to comment
Share on other sites

Boa Tarde ..

Alguém poderia dizer porque o código abaixo não está salvando no DBF ??

Eu clico no buttom "cadastrar" e nada acontece ...

 
Procedure Entrada()
  Local oGet[8]
  Select 1
  USE BDADOS ALIAS OCLI Exclusive
  
  DATABASE oCli
 
 Define Dialog oDlg Resource "#1001"
      Redefine Get oGet[1] Var oCli:Comp   ID 4007 Of oDlg
      Redefine Get oget[2] Var oCli:Data   ID 4008 Of oDlg
      Redefine Get oGet[3] Var oCli:Loja   ID 4009 Of oDlg
      Redefine Get oGet[4] Var oCli:Numero ID 4010 Of oDlg
      Redefine Get oGet[3] Var oCli:Garant ID 4011 Of oDlg
      Redefine Get oGet[4] Var oCli:Marca  ID 4018 oF oDlg
      Redefine Get oGet[5] Var oCli:Valor  ID 4014 Of oDlg
      Redefine Get oGet[6] Var oCli:obs    ID 4012 Of oDlg  
 Redefine Button obtn Prompt "Cadastrar" ID 4016 Action (oCli:Save())
  
 Activate Dialog oDlg Centered
 Return(.t.)
 
Obrigado..

Faça assim: Save(oCli)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...