Luiz Arruda (ICO) Posted August 14, 2014 Report Share Posted August 14, 2014 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.. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 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, aferra 1 Quote Link to comment Share on other sites More sharing options...
aferra Posted August 14, 2014 Report Share Posted August 14, 2014 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. Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 14, 2014 Author Report Share Posted August 14, 2014 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.) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 // 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, Quote Link to comment Share on other sites More sharing options...
aferra Posted August 14, 2014 Report Share Posted August 14, 2014 isso é verdade Kapi, estou com problema nisso, sem solução, quer dizer, a solução é para de usar a danada. rsrsrsrsrs, mas é tão pratica, senão perdesse esse focu.... Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 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 Quote Link to comment Share on other sites More sharing options...
aferra Posted August 14, 2014 Report Share Posted August 14, 2014 opa, olha o erro ai USE BDADOS ALIAS OCLI Exclusive New <- isso não pooooodyyyyyy USE BDADOS Exclusive New <- assim pooooodyyyyy Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 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. ) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 // ------------------------------------------------------------------------ // 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 ) Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 14, 2014 Author Report Share Posted August 14, 2014 Assim Funciona, porém para uma unica entrada, mesmo se eu colocar isso no action, como dou um loop limpando os dados ?? DATABASE oCli oCli:Load() oCli:SetBuffer( .T. ) oCli:Append() oCli:Blank() Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 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. Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 14, 2014 Author Report Share Posted August 14, 2014 Não.. bêbê... eu não quero mexer com variaveis, é por isso que quero DATABASE, quero digitar direto, do jeito que postei a pouco até grava, mas não dá o loop para um novo registro Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 sem problemas, APONTE nos GETS para o CAMPO do BANCO DE DADOS, mas mostre a ele qual é o indice ou indices a alterar ou incluir. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 Faciilitando sua vida: C:\FWH..\SAMPLES\DBF01.PRG Abs Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 14, 2014 Author Report Share Posted August 14, 2014 será que tô falando javanês ??? EU JÁ CONSEGUI CADASTRAR,,, não sei como dar o loop para incluir um novo registro... Quote Link to comment Share on other sites More sharing options...
aferra Posted August 14, 2014 Report Share Posted August 14, 2014 Redefine Button obtn Prompt "Cadastrar" ID 4016 Action ( oCli:Save(), oCli:Append(), oCli:Blank() ) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 Ou: oDlg:Update() Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 14, 2014 Author Report Share Posted August 14, 2014 Isso já tinha tentando, tentei tb. oCli:gotop() mas não funfam no action do buttom Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 Recarregue o banco novamente: oDbf:GoBottom(), oDbf:LOAD() abs, Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 14, 2014 Author Report Share Posted August 14, 2014 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()) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 14, 2014 Report Share Posted August 14, 2014 voce tem que colocar um IF ou IIF para dizer ao botão se é INCLUSAO ou ALTERAÇÃO, senão será sempre inclusao. Quote Link to comment Share on other sites More sharing options...
miragerr Posted August 15, 2014 Report Share Posted August 15, 2014 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. Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted August 15, 2014 Author Report Share Posted August 15, 2014 Jackson, a versão é 9.04 e por enquanto vou deixar como está, criando um registro vazio no inicio e excluindo ele ao sair da dialog, pq. se a classe do 9.04 é bugada não vai adiantar eu fazer de outra forma ... Abraços.. e Kapi, a intenção é esta mesma... só inclusão ... kapitche ? beijinho no ombro ... Quote Link to comment Share on other sites More sharing options...
crisvam Posted August 16, 2014 Report Share Posted August 16, 2014 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) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.