Clipper On Line • Ver Tópico - LetoDBf (fork) -> LetoDb com espinafre

LetoDBf (fork) -> LetoDb com espinafre

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor porter » 07 Nov 2018 18:45

Olá pessoal,
Não sei o motivo, mas ao comentar essa linha, não dá mais erro.

// produtos->(DbUNLOCK())
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor rubens » 08 Nov 2018 08:55

Bom dia
E tem uma função nova para isso
Passe a usar DBRunlock() para destravar o registro...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 08 Nov 2018 09:16

Porter eu uso:
APC01->( DbRLock() )

APC01->( DbCommit(), DbSkip(0), DbUnlock() )

Com LetoDb

Lembro de ter tido problemas com LetoDbf relacionado ao timeout da conexão com abertura de tabelas e gravação
Descobri que era o timeout, defini para -1 e nunca mais tive problemas. Eu uso o LetoDbf (fork) atualizado

   VAR nTimeOut         AS INTEGER INIT -1
   .
   .
   Do While Leto_Connect( ::cServidorDB, , , ::nTimeOut ) < 0
      If ::nLoop > 10 .AND. ::nLoop < 15
         cIpAddServer  := hwg_GetIni( 'CONFIGURACAO', 'Addr', '', [SERVER5\LETODBSERVER.INI] )
         cPortaServer  := hwg_GetIni( 'CONFIGURACAO', 'Port', '', [SERVER5\LETODBSERVER.INI] )
         ::cServidorDB := [//] + cIpAddServer + [:] + cPortaServer + [/]
      Elseif ::nLoop > 15
         ::lConnect := .F.
         Exit
      Elseif ::nLoop <= 10
         cIpAddServer  := aNICS[nVezes,1] //"127.0.0.1"
         ::cServidorDB := [//] + cIpAddServer + [:] + cPortaServer + [/]
         nVezes ++
         If nVezes  = Len( aNICS )
            nVezes := 1
         Endif
      Endif   
      ::nLoop ++
      oClPF:DoEvents()
   Enddo 
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor porter » 08 Nov 2018 10:11

Olá pessoal,
Como disse no tópico acima, o problema ocorre quando executo UNLOCK, DBunlock ou DbrUnlock e tento abrir um novo arquivo
logo em seguida, se comentar esses comandos UNLOCK, DBunlock ou DbrUnlock, consigo normalmente abrir um novo arquivo,
vou desinstalar o LETODBF no servidor e instalar novamente para ver se dá certo.
Gostaria de saber, como faço para saber qual a versão do LETODBF, estou usando, porquê lá em serviços não consigo ver a versão,
e em programas instalados, ele não aparece.
Rubens DbrUnlock também não deu certo, Asimões vou testar essa rotina que você postou.

Obrigado.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 08 Nov 2018 10:57

porter escreveu:Gostaria de saber, como faço para saber qual a versão do LETODBF


Tem essa função LETO_GETSERVERVERSION() Nunca usei.

2018-11-08 11_59_46-Window.png
2018-11-08 11_59_46-Window.png (2.68 KiB) Visualizado 92594 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 08 Nov 2018 20:14

E o teste q propus alguém fez? poderia postar os resultados?
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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 11 Nov 2018 10:34

Olá Pessoal,

No letoudf.prg tem esse código, alguém poderia explicar como funciona isso, a função cria uma tabela em memória
Isso é executado com a função leto_UDF() ?

FUNC elktest
  LOCAL cReturn := leto_Alias()
  LOCAL cAlias := leto_Alias( "ELK" )

  cReturn += "==" + cAlias  + ";"

  IF EMPTY( cAlias )
     IF leto_dbcreate( "mem:elk",{{"name","C",32,0},{"age","N",3,0}},"DBFCDX",.T.,"ELK")
        leto_ordcreate( "ELK", "mem:elk", "name", "NAME" )
        cReturn += leto_alias("ELK") + "#"
        leto_ordcreate( "ELK", "mem:elk", "age", "AGE" )
        leto_dbclosearea()
     ENDIF
  ENDIF
RETURN cReturn
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 11 Nov 2018 10:41

Fiz o teste:

Na minha aplicação fiz a execução hwg_msginfo(leto_UDF( "elktest" ))

2018-11-11 11_38_24-.png


A pergunta é: a tabela foi criada no servidor ou no cliente (no computador onde executou a chamada)?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 11 Nov 2018 17:34

leto_dbcreate() e leto_OrdCreate() são funções para executar no servidor, através da letoudf

leto_dbcreateTemp() função cliente identica a leto_dbcreate()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 11 Nov 2018 18:37

uma dúvida isso não tem nada a ver com o teste q eu propus de indice temporario ou no caso de indice temporario filtrado tb tenho q usar essa função?

Alguém testou da forma q eu falei?
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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 11 Nov 2018 19:36

fladimir escreveu:uma dúvida isso não tem nada a ver com o teste q eu propus de indice temporario ou no caso de indice temporario filtrado tb tenho q usar essa função?

Alguém testou da forma q eu falei?


Manda a estrutura da tabela e coloca novamente o que você quer testar, farei o teste.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 12 Nov 2018 21:27

Alexandre, grato pela atenção...

Segue abaixo estrutura e chaves dos indices q utilizo

O q gostaria q testasse é criar a partir dessa tabela um indice temporario via LETO e ver se mostra correto em um BROWSE.

No ultimo teste a quase 1 ano atrás eu tinha tido um erro, mas não lembro como fiz, como não usei/testei mais o LETO não recordo totalmente os detalhes.

/*
* Estrutura clientes.dbf
*/
LOCAL aField[101]
   aField[001] := {"CODIGO"    , "C",  8,  0}
   aField[002] := {"NOME"      , "C", 60,  0}
   aField[003] := {"ENDERECO"  , "C", 60,  0}
   aField[004] := {"BAIRRO"    , "C", 25,  0}
   aField[005] := {"CIDADE"    , "C", 25,  0}
   aField[006] := {"ESTADO"    , "C",  2,  0}
   aField[007] := {"PONTOREF"  , "C", 25,  0}
   aField[008] := {"NASCIMENTO", "D",  8,  0}
   aField[009] := {"CEP"       , "C",  9,  0}
   aField[010] := {"TELEFONE"  , "C", 14,  0}
   aField[011] := {"LOJA"      , "C",  3,  0}
   aField[012] := {"TOLERANCIA", "N",  3,  0}
   aField[013] := {"BLOQUEIO"  , "N",  3,  0}
   aField[014] := {"JUROS"     , "N",  3,  0}
   aField[015] := {"DESCONTO"  , "N",  6,  2}
   aField[016] := {"DESCONTO2" , "N",  6,  2}
   aField[017] := {"RG"        , "C", 35,  0}
   aField[018] := {"INSCRICAO" , "C", 16,  0}
   aField[019] := {"CPF"       , "C", 11,  0}
   aField[020] := {"CNPJ"      , "C", 15,  0}
   aField[021] := {"EXTERNO"   , "C",  6,  0}
   aField[022] := {"TEMCASA"   , "C",  1,  0}
   aField[023] := {"TRABALHO"  , "C", 25,  0}
   aField[024] := {"CARGO"     , "C", 17,  0}
   aField[025] := {"SALARIO"   , "N",  9,  2}
   aField[026] := {"FONECOM"   , "C", 14,  0}
   aField[027] := {"FILIACAO"  , "C", 60,  0}
   aField[028] := {"CONJUGE"   , "C", 35,  0}
   aField[029] := {"NASCCONJ"  , "D",  8,  0}
   aField[030] := {"RGCONJ"    , "C", 15,  0}
   aField[031] := {"CPFCONJ"   , "C", 16,  0}
   aField[032] := {"TRABCONJ"  , "C", 20,  0}
   aField[033] := {"GANHOCONJ" , "N",  9,  2}
   aField[034] := {"CARGOCONJ" , "C", 21,  0}
   aField[035] := {"FONECONJ"  , "C", 14,  0}
   aField[036] := {"LIMITE"    , "N",  9,  2}
   aField[037] := {"CREDITO"   , "N", 12,  2}
   aField[038] := {"CADASTRO"  , "D",  8,  0}
   aField[039] := {"OBSERVACAO", "C", 70,  0}
   aField[040] := {"BLOQUEADO" , "C",  1,  0}
   aField[041] := {"AUTORIZA1" , "C", 30,  0}
   aField[042] := {"AUTORIZA2" , "C", 30,  0}
   aField[043] := {"AUTORIZA3" , "C", 30,  0}
   aField[044] := {"AUTORIZA4" , "C", 30,  0}
   aField[045] := {"DTULTCOMP" , "D",  8,  0}
   aField[046] := {"VLULTCOMP" , "N", 12,  2}
   aField[047] := {"BANCO"     , "C",  3,  0}
   aField[048] := {"AGENCIA"   , "C", 10,  0}
   aField[049] := {"CONTA"     , "C", 14,  0}
   aField[050] := {"APOSENTADO", "C",  1,  0}
   aField[051] := {"REFERENCIA", "C", 30,  0}
   aField[052] := {"VENDECRED" , "C",  1,  0}
   aField[053] := {"MES_ANO"   , "C",  4,  0}
   aField[054] := {"TIPO"      , "C",  1,  0}
   aField[055] := {"DIACOBRA"  , "C",  2,  0}
   aField[056] := {"SITUACAO"  , "C",  2,  0}
   aField[057] := {"MALADIRETA", "C",  1,  0}
   aField[058] := {"DTCADASTRO", "D",  8,  0}
   aField[059] := {"SENHA"     , "C",  5,  0}
   aField[060] := {"FANTASIA"  , "C", 30,  0}
   aField[061] := {"EMAIL"     , "C", 50,  0}
   aField[062] := {"HOME"      , "C", 35,  0}
   aField[063] := {"PRODUTOR"  , "C", 16,  0}
   aField[064] := {"REFCOM1"   , "C", 60,  0}
   aField[065] := {"REFCOM2"   , "C", 60,  0}
   aField[066] := {"REFCOM3"   , "C", 60,  0}
   aField[067] := {"VALEDESC"  , "C",  1,  0}
   aField[068] := {"PROMOCAO"  , "C",  1,  0}
   aField[069] := {"NATURALID" , "C", 25,  0}
   aField[070] := {"CODMUN"    , "C",  7,  0}
   aField[071] := {"DTULTATU"  , "D",  8,  0}
   aField[072] := {"NUMEROEND" , "C",  8,  0}
   aField[073] := {"MAXVLRPARC", "N", 12,  3}
   aField[074] := {"NRCALCADO" , "C",  2,  0}
   aField[075] := {"NRCALCCONJ", "C",  2,  0}
   aField[076] := {"CATEGORIA" , "C",  5,  0}
   aField[077] := {"GRUPO"     , "C",  5,  0}
   aField[078] := {"SUBGRUPO"  , "C",  5,  0}
   aField[079] := {"ORGAOEXP"  , "C",  2,  0}
   aField[080] := {"CARTTRAB"  , "C", 20,  0}
   aField[081] := {"AVALISTA1" , "C", 20,  0}
   aField[082] := {"DTULTSERV" , "D",  8,  0}
   aField[083] := {"VLULTSERV" , "N", 12,  2}
   aField[084] := {"CELULAR"   , "C", 14,  0}
   aField[085] := {"TEMPOSERV" , "C", 20,  0}
   aField[086] := {"QUEMCADALT", "C", 20,  0}
   aField[087] := {"AUT1_CPF"  , "C", 11,  0}
   aField[088] := {"AUT1_RG"   , "C", 21,  0}
   aField[089] := {"AUT1_NASC" , "D",  8,  0}
   aField[090] := {"AUT2_CPF"  , "C", 11,  0}
   aField[091] := {"AUT2_RG"   , "C", 21,  0}
   aField[092] := {"AUT2_NASC" , "D",  8,  0}
   aField[093] := {"AUT3_CPF"  , "C", 11,  0}
   aField[094] := {"AUT3_RG"   , "C", 21,  0}
   aField[095] := {"AUT3_NASC" , "D",  8,  0}
   aField[096] := {"AUT4_CPF"  , "C", 11,  0}
   aField[097] := {"AUT4_RG"   , "C", 21,  0}
   aField[098] := {"AUT4_NASC" , "D",  8,  0}
   aField[099] := {"LATITUDE"  , "N", 14,  8}
   aField[100] := {"LONGITUDE" , "N", 14,  8}
   aField[101] := {"NET_ID"    , "C", 20,  0}
   
// Array onde tem as chaves q uso para os indices:   
     #define ch_Files_03 {{ .f., 'clientes',  'clientes', 'codigo',                                .t.,'clientes1'  },;
                         { .f., 'clientes',  'clientes', 'nome',                                   .f.,'clientes2'  },;
                         { .f., 'clientes',  'clientes', 'cpf',                                    .f.,'clientes3'  },;
                          { .f., 'clientes',  'clientes', 'cnpj',                                  .f.,'clientes4'  },;
   { .f., 'clientes', 'clientes', 'STRZERO(Val(CharOnly("0123456789", Telefone)), LEN(Telefone))', .F.,'clientes5'  },;
           { .f., 'clientes', 'clientes', 'padr(CharOnly("0123456789", Telefone), LEN(Telefone))', .f.,'clientes6'  },;
                         { .f., 'clientes',  'clientes', 'fantasia',                               .f.,'clientes7'  },;
                         { .f., 'clientes',  'clientes', 'dtos(DtUltComp)',                        .f.,'clientes8'  },;
                     { .f., 'clientes',  'clientes', 'dtos(DtCadastro)',                           .f.,'clientes9'  },;


Era algo assim (fiz de cabeça, da uma revisada ai por favor se não escrevi nada errado... Kkkk):

#include 'rddleto.ch'

function TesteLETO()
        PRIVATE Cli1 := 10, Cli2 := 1000, cGrupo := "01" //----> Pensei q pudesse ser visibilidade tentei LOCAL, PRIVATE, STATIC, PUBLIC

   DBCLOSEALL()
   DbUseArea( .T., 'LETO', 'Clientes, 'Clientes', .T.)
   DBSETINDEX('Clientes.CDX')

   // Criando indices temporarios
   INDEX ON Clientes->Codigo  TAG Temp01  TO (arquivotmp) ;
          FOR VAL(Clientes->Codigo) >= VAL(cli1) .and.  VAL(Clientes->Codigo) <= VAL(cli2) .and.;
          Clientes->MalaDireta=="S" .and. Clientes->Situacao==cGrupo ADDITIVE MEMORY
   Browse()

   INDEX ON Clientes->Codigo  TAG Temp02  TO (arquivotmp) ;
          FOR VAL(Clientes->Codigo) >= VAL(cli1) .and.  VAL(Clientes->Codigo) <= VAL(cli2) .and.;
          Clientes->MalaDireta=="N" .and. Clientes->Situacao==cGrupo ADDITIVE MEMORY
   Browse()

return
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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor Itamar M. Lins Jr. » 13 Nov 2018 10:12

Olá!
Não vai funcionar em versão nenhuma.
Cli1,cli2,cgrupo não existem do lado do servidor. Nem com nenhum SGBD. Esqueceu que precisa usar '+' para juntar a query ?

Saudações,
Itamar M. Lins Jr
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 13 Nov 2018 11:27

Entendi, foi o q eu deduzi nos meus testes, somente trocando os valores antes de mandar pro FOR.

Blz, agradeço pela elucidação explicativa, pq eu apesar de ter visto como funcionava não entendia o porque.
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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 12:13

Itamar M. Lins Jr. escreveu:Olá!
Não vai funcionar em versão nenhuma.
Cli1,cli2,cgrupo não existem do lado do servidor. Nem com nenhum SGBD. Esqueceu que precisa usar '+' para juntar a query ?

Saudações,
Itamar M. Lins Jr

É dessa forma que eu faço é até uma dica antiga do Itamar
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Anterior Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 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
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro