Clipper On Line • Ver Tópico - FIREBIRD - MiniGui Extended

FIREBIRD - MiniGui Extended

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

FIREBIRD - MiniGui Extended

Mensagempor LUIZFILHO » 07 Ago 2013 21:28

Prezados Colegas
Preciso de ajuda, pois através de um exemplo contido na pasta \MINIGUI\SAMPLES\BASIC\FIREBIRD, me acendeu o desejo de trabalhar com SQL. Este exemplo eu compilei e funciona beleza, criei uma tabela com o IBEXPERT, substitui no exemplo, deu tudo certo, mais chegou a um ponto que não consegui entender.
Preciso selecionar um determinado registro em uma tabela CADSERV.FDB e trazer todos os valores para o FORM.
Baseado no exemplo fiz o seguiente:
"cCPF" é uma variável que pego no grid quando escolho a opçao "Alterar"

oConnection:Setsql("SELECT * FROM CADSERV WHERE CPF='"+cCPF+"'")
      
if !oConnection:Open()
  msgstop("Não foi possível conectar a Base de Dados")      
endif
   
Load window FRM_SERVID
FRM_SERVID.TxCpf.value:=transform(cCpf,"@R 999.999.999-99")
      
FRM_SERVID.TxNome.VALUE:=oConnection:Fields["NOME"]:value  ---> (aqui me retorna o erro base/1068 argument error array access)
.
.
.

Quando trabalho com DBF faço o seguinte
if !cadserv->(dbseek(cCPF))
  return .f.
endif
FRM_SERVID.TxNome.VALUE:=cadserv->nome     
.
.
.

Já pesquisei bastante e não cosegui, por issto estou recorrendo ao forum para ver se alguem com experiencia em SQL me ajuda a resolver esta questão.

Desde já Agradeço
Abraço a todos
Luiz
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
LUIZFILHO
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 15 Jul 2008 10:22
Cidade/Estado: Joao Pessoa PB
Curtiu: 0 vez
Mens.Curtidas: 1 vez

FIREBIRD - MINIGUI EXTENDED

Mensagempor alxsts » 08 Ago 2013 00:34

Olá!

Aparentemente o problema não é o SQL. Seu select está sintaticamente correto.

O erro que está acusando indica que o select não está retornando linha nenhuma do banco de dados. A variável cCpf tem conteúdo na hora que que você monta o select? Existe o CPF informado na tabela alvo do select?

Analisando o teu código, apesar de pequeno, parece ter um erro de lógica: o certo é abrir a conexão e depois executar comandos contra o banco. Ficaria assim:
if !oConnection:Open()
   msgstop("Não foi possível conectar a Base de Dados")   
endif

oConnection:Setsql("SELECT * FROM CADSERV WHERE CPF='"+cCPF+"'")

// Neste ponto, testar se veio algum resultado. Em caso afirmativo, prosseguir. Senão cancelar...

Load window FRM_SERVID
FRM_SERVID.TxCpf.value:=transform(cCpf,"@R 999.999.999-99")

De qualquer forma, o correto é, logo após executar um select, verificar se o mesmo retornou algum resultado. Não conheço Firebird nem sei qual lib você está usando para conectar mas, procure a respectiva ocumentação e verifique como fazer este teste.

Poste um trecho maior do teu código. Informe os includes e libs que está usando.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2212
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 153 vezes

FIREBIRD - MINIGUI EXTENDED

Mensagempor luiz antonio da silva » 08 Ago 2013 08:09

Olá LUIZ !

tente fazer a alteração abaixo.

if !oConnection:Open()
   msgstop("Não foi possível conectar a Base de Dados")   
endif

oConnection:Setsql("SELECT * FROM CADSERV WHERE CPF='"+cCPF+"'")

// Neste ponto, testar se veio algum resultado. Em caso afirmativo, prosseguir. Senão cancelar...
if !oConnection:eof()
    Load window FRM_SERVID
    FRM_SERVID.TxCpf.value:=transform(cCpf,"@R 999.999.999-99")
    ......
else
   msginfo("CPF: "+cCPF+" não localizado !","Retorno")
endif


Luiz antonio.
HMG 3.4.4 - SQL SERVER - ORACLE
luiz antonio da silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 158
Data de registro: 21 Nov 2006 21:12
Cidade/Estado: serrana-sp
Curtiu: 13 vezes
Mens.Curtidas: 10 vezes

FIREBIRD - MiniGui Extended

Mensagempor LUIZFILHO » 08 Ago 2013 21:28

Alexandre e Luiz Antonio, desde já agradeço pela a atenção, pelo que vejo, vocês tem conhecimento em SQL mais não trabalham com SGDB FIREBIRD, mais com esse conhecimento e a boa vontade sei que vão poder me ajudar, analisem o código abaixo:
 *
* Access a firebird database through ODBC
*
* Based on ODBC_2 sample included in MiniGui Extended distribution
* Hugo Rozas M.
* HMG Extended v1.9.98
*
*/

#include 'minigui.ch'

Memvar fColor,bfrColor,bColor
static oConnection
Function Main
   set navigation extended
   
   
   oConnection = todbc():new('DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=CADSERV.FDB;')
   oConnection:Open()
   
   *  set delete on
   *Set ToolTipBalloon On
   *set browsesync on
   set century on
   set date german

   
   Private fColor := { |x,CellRowIndex| if ( CellRowIndex/2 == int(CellRowIndex/2) , RGB( 0,0,255 ) , RGB( 0,255,0 ) ) }
   Private bColor := { |val,CellRowIndex| if ( CellRowIndex/2 == int(CellRowIndex/2) , { 222,222,222 } , { 255,255,255 } ) }
   Private bfrColor := {|| RGB(0,0,0)}, bbkColor := {|| RGB(255,255,255)}

   FOTO:="4.BMP"
 
   Load Window Frm_Princ
   Center Window Frm_Princ
   
   Frm_Princ.Maximize
   Frm_Princ.Lbl_Mensagens.Visible := .F.
   Activate Window Frm_Princ
   

Return
*-----------------------------------------------------------------
Procedure CadServid()
   
  *oConnection = todbc():new('DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=CADSERV.FDB;')                           
  *oConnection:Open()
   
   Load Window Frm_CadPes
   *Carrega_Dados(1)
   Center Window Frm_CadPes
   
   Activate Window Frm_CadPes
Return
*-----------------------------------------------------------------
Procedure Carrega_Dados(N)

FRM_CADPES.GRID_1.Deleteallitems

oConnection:Setsql('SELECT CPF,NOME FROM CADSERV ORDER BY NOME')

   if !oConnection:Open()
      msgstop("Não foi possível conectar a Base de Dados")
   else
      for i= 1 to len( oConnection:aRecordset )
         FRM_CADPES.GRID_1.additem( oConnection:aRecordset[i] )
      next
      FRM_CADPES.GRID_1.value := n
   end
   oConnection:Close()
REturn
*-----------------------------------------------------------------
Procedure tESTE()
VCOD:="12345678900"
Str := "INSERT INTO CADSERV (CPF,NOME) VALUES ("+VCOD+","+"'JOAO VICTOR'"+")"
   MSGINFO(Str)         
    oConnection:Setsql( Str )
   if !oConnection:Open()
      msgstop("Não foi possivel fazer a operação")
   end
   oConnection:Close()   

RETURN
*-----------------------------------------------------------------
procedure Eventos_(n)
   local cCPF:="", cNOME:="",Str

   do case
   case n == 1 .or. n == 2
      if n = 2
         cCPF    := FRM_CADPES.GRID_1.CELL( FRM_CADPES.GRID_1.VALUE, 1 )
         cNOME   := FRM_CADPES.GRID_1.CELL( FRM_CADPES.GRID_1.VALUE, 2 )
      end
      
      oConnection:Setsql("SELECT * FROM CADSERV WHERE CPF='"+cCPF+"'")
            MSGINFO("SELECT CPF,NOME FROM CADSERV WHERE CPF='"+cCPF+"'")
      if !oConnection:Open()
        msgstop("Não foi possível conectar a Base de Dados")      
      endif
      Load window FRM_SERVID
          MSGINFO(cCPF)
         FRM_SERVID.TxCpf.value:=transform(cCpf,"@R 999.999.999-99")
         *FRM_SERVID.TxNome.value:=cNome
           FRM_SERVID.TxNome.VALUE:=oConnection:Fields["NOME"]:value //é aqui que da erro
           title iif(n = 2,'Alterando Cadastro do Sevidor ','Incluindo nôvo Cadastro de Sevidor')
         *Font 'ms sans serif' size 8
          *on key escape action form1a.button2.onclick
      
      FRM_SERVID.center
      activate window FRM_SERVID
         
   case n == 3
      Str := "DELETE FROM CADSERV WHERE CPF="+str(FRM_CADPES.grid_1.cell(FRM_CADPES.grid_1.value,1))
      if msgyesno('Deletar este registro? '+hb_osnewline()+FRM_CADPES.grid_1.cell(FRM_CADPES.grid_1.value,2),'Confirma')
         oConnection:Setsql( Str )
         if !oConnection:Open()
            msgstop("Não foi possivel deletar o registro")
         else
            n := FRM_CADPES.grid_1.value
            FRM_CADPES.grid_1.deleteitem( n )
            FRM_CADPES.grid_1.value := iif(n > 1, n-1, 1)
            Frm_CADPES.statusbar.item(1) := "Registro: "+;
               ltrim(str(Frm_CADPES.grid_1.value))+" of "+alltrim(str(Frm_CADPES.grid_1.itemcount))
         end
         oConnection:Close()
         Frm_CADPES.grid_1.setfocus
      end
   endcase
   Frm_CADPES.Grid_1.SetFocus()
return
*--------------------------------------------------------------------------------
procedure salva_dados(n)
*--------------------------------------------------------------------------------
   local Str
*    MSGINFO(str(n,2))
   if n = 1
   
      *Str := "INSERT INTO CADSERV (CPF,NOME,DATA_NASCTO,EST_CIVIL,NATURALIDADE,NACIONALIDADE,SEXO,RACA_COR,ESCOLARIDADE,FORMACAO,IDENTIDADE,"+;
        *        "ORGA_EMISSOR,UF_ORG_EMISSOR_RG,DT_EMISSAO_RG,PIS_PASEP,TITULO_ELEITOR,PAI,MAE,ENDERECO,NUMERO,CIDADE,BAIRRO,COMPLEMENTO,CEP,EMAIL)"+;
       Str := "INSERT INTO CADSERV (CPF,NOME,DATA_NASCTO,EST_CIVIL)"+;   
          " VALUES ('"+TIRAMASCARA_CHR(FRM_SERVID.TxCPF.VALUE)+;
                "','"+Alltrim(FRM_SERVID.TxNome.VALUE)+;
              "','"+DTOC(FRM_SERVID.TxNascimento.VALUE)+;
              "','"+Alltrim(Str(FRM_SERVID.Cb_EstCivil.VALUE))+;
            "')"
            /*"','"+Alltrim(FRM_SERVID.TxNaturalid.VALUE)+;
            "','"+Alltrim(Str(FRM_SERVID.Cb_Nacionalid.VALUE))+;
            "','"+Alltrim(Str(FRM_SERVID.Cb_Sexo.VALUE))+;
            "','"+Alltrim(Str(FRM_SERVID.Cb_RacaCor.VALUE))+;            
            "','"+"FRM_SERVID.Cb_Escolaridade.VALUE"+;
            "','"+"FRM_SERVID.Cb_Formacao.VALUE"+;
            "','"+"FRM_SERVID.TxIdentidade.VALUE"+;
            "','"+Alltrim(FRM_SERVID.TxOrgEmissor.VALUE)+;
            "','"+Alltrim(FRM_SERVID.TxUfEmiRg.VALUE)+;
            "','"+"FRM_SERVID.TxDtEmiRg.VALUE"+;            
            "','"+Alltrim(FRM_SERVID.TxPisPasep.VALUE)+;
            "','"+Strzero(val(FRM_SERVID.TxTitEleitor.VALUE),11)+;
            "','"+Alltrim(FRM_SERVID.TxNomePai.VALUE)+;
            "','"+Alltrim(FRM_SERVID.TxNomeMae.VALUE)+;
            "','"+Alltrim(FRM_SERVID.Txt_RuaAv.VALUE)+;
            "','"+"FRM_SERVID.Txt_Numero.VALUE"+;
            "','"+Alltrim(FRM_SERVID.Txt_Cidade.VALUE)+;
            "','"+Alltrim(FRM_SERVID.Txt_Bairro.VALUE)+;
            "','"+Alltrim(FRM_SERVID.Txt_Complemento.VALUE)+;
            "','"+Alltrim(FRM_SERVID.Txt_CEP.VALUE)+;
            "','"+Alltrim(FRM_SERVID.TxEmail.VALUE)+;
            "')"*/
            
             
                msgstop( Str )
           
   else
            cCPF := "'"+Alltrim(FRM_SERVID.TxCPF.VALUE)+"'"
      Str := "UPDATE CADSERV SET NOME='"+Alltrim(FRM_SERVID.TxNome.VALUE)+"',"+;
              " DATA_NASCTO='"+CTOD(FRM_SERVID.TxNascimento.VALUE) + "'," + ;
              " EST_CIVIL='" + Alltrim(Str(FRM_SERVID.Cb_EstCivil.VALUE)) + "'" + ;
            " NATURALIDADE='" + Alltrim(Str(FRM_SERVID.TxNauralid.VALUE)) + "'" + ;
            " NACIONALIDADE='" + Alltrim(Str(FRM_SERVID.Cb_Nacinalid.VALUE)) + "'" + ;
            " SEXO='" + Alltrim(Str(FRM_SERVID.Cb_Sexo.VALUE)) + "'" + ;
            " RACA_COR='" + Alltrim(Str(FRM_SERVID.Cb_RacaCor.VALUE)) + "'" + ;
            " ESCOLARIDADE='" + (FRM_SERVID.Cb_Escolaridade.VALUE) + "'" + ;
            " FORMACAO='" + (FRM_SERVID.Cb_Formacao.VALUE) + "'" + ;
            " IDENTIDADE='" + (FRM_SERVID.TxIdentidade.VALUE) + "'" + ;
            " ORGA_EMISSOR='" + Alltrim(FRM_SERVID.TxOrgEmissor.VALUE) + "'" + ;
            " UF_ORG_EMISSOR_RG='" + Alltrim(FRM_SERVID.TxUfEmiRg.VALUE) + "'" + ;
            " DT_EMISSAO_RG='" + CTOD(FRM_SERVID.TxDtEmiRg.VALUE) + "'" + ;
            " PIS_PASEP='" + Alltrim(FRM_SERVID.TxPisPasep.VALUE) + "'" + ;
            " TITULO_ELEITOR='" + Strzero(val(FRM_SERVID.TxTitEleitor.VALUE),11) + "'" + ;
            " PAI='" + Alltrim(FRM_SERVID.TxNomePai.VALUE) + "'" + ;
            " MAE='" + Alltrim(FRM_SERVID.TxNomeMae.VALUE) + "'" + ;
            " ENDERECO='" + Alltrim(FRM_SERVID.Txt_RuaAv.VALUE) + "'" + ;
            " NUMERO='" + FRM_SERVID.Txt_Numero.VALUE + "'" + ;
            " CIDADE='" + Alltrim(FRM_SERVID.Txt_Cidade.VALUE) + "'" + ;
            " BAIRRO='" + Alltrim(FRM_SERVID.Txt_Cidade.VALUE) + "'" + ;
            " COMPLEMENTO='" + Alltrim(FRM_SERVID.Txt_Complemento.VALUE) + "'" + ;
            " CEP='" + Alltrim(FRM_SERVID.Txt_CEP.VALUE) + "'" + ;
            " EMAIL='" + Alltrim(FRM_SERVID.TxEmail.VALUE) + "'" + ;
            " WHERE CPF =" + cCPF
            
           //msgstop( Str )
   end

   oConnection:Setsql( Str )
   if !oConnection:Open()
      msgstop("Não foi possivel fazer a operação")
   end
   oConnection:Close()
   if n == 1
      Carrega_Dados( FRM_CADPES.GRID_1.itemcount+1 )
   else
      FRM_CADPES.GRID_1.CELL( FRM_CADPES.GRID_1.VALUE, 1 ) := Alltrim(FRM_SERVID.TxCPF.VALUE)
      FRM_CADPES.GRID_1.CELL( FRM_CADPES.GRID_1.VALUE, 2 ) := Alltrim(FRM_SERVID.TxNome.VALUE)
      
   end
   FRM_CADPES.statusbar.item(1) := "Register "+ltrim(str(FRM_CADPES.GRID_1.VALUE))+" de "+alltrim(str(FRM_CADPES.GRID_1.itemcount))
   FRM_SERVID.release
   
return      

*------------------------------------------------------------------
/*
*/
Function Confirmar_Saida()
       
   If MSGYesNo( "Confirma Saída do Sistema??" , "SCPP" )
      Frm_Princ.Release
   EndIf
       
Return Nil
*-----------------------------------------------------------------
***************************************
Procedure TiraMascara_CHR(var)
   Local i      := 0
        Local cVAR      := AllTrim( VAR )
   Local cNewVAR   := ""

   For i := 1    To Len( cVAR )
             
      cNewVAR += Iif(  IsDigit( Substr( cVAR , i , 1 ) )  , Substr( cVAR , i , 1 ) , ""  )

   Next

                VAR :=  cNewVAR

        Return VAR


Vejam que no inicio, trago os campos CPF E NOME para o GRID, quando chamo o evento "Editar" já trago do grid o FORM de apresentação dos dados, o CPF e o NOME. Então seleciono o registro equivalente aquele CPF na Tabela CADSERF.FDB e quero atribuir os valores dos demais campos(cerca de 15) às variáveis criadas, por exemplo:vamos supor que tenho 15 variáveis e quero atribuir a elas o valor dos campos equivalentes na tabela, ficaria assim:
Variável dDataNascimeno receber o valor do campo DATA_NASCIMENO do registro selecionado na tabela;
Variável cPai receber o valor do campo PAI do registro selecionado na tabela;
Variável cMae receber o valor do campo MAE do registro selecionado na tabela;
E assim sucessivamente.

No codigo acima(LINHA 104) tento atribuir à FRM_SERVID.TxNome.VALUE o valor do campo NOME da tabela e é aí que dá erro, talvez o comando esteja errado, pois peguei de outro exemplo.

Obsevem que não foi icluida nenhuma lib.
Abraço
Luiz
LUIZFILHO
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 15 Jul 2008 10:22
Cidade/Estado: Joao Pessoa PB
Curtiu: 0 vez
Mens.Curtidas: 1 vez

FIREBIRD - MiniGui Extended

Mensagempor LUIZFILHO » 10 Ago 2013 12:04

Pessoal
Depois de algumas pesquisas e vendo outros exemplos, descobri o que queria, ou seja, tirei minha dúvida. Vou continuar com o teste que estou fazendo de uma aplicação simples, e quando concluir vou postar esta aplicação para que quem se interessar em trabalhar com MINIGUI EXTENDED e FIREBIRD, já tenha um bom começo.
Suadações e Até breve

Luiz
LUIZFILHO
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 15 Jul 2008 10:22
Cidade/Estado: Joao Pessoa PB
Curtiu: 0 vez
Mens.Curtidas: 1 vez




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro