LetoDBf (fork) -> LetoDb com espinafre
Moderador: Moderadores
LetoDBf (fork) -> LetoDb com espinafre
Olá pessoal,
Não sei o motivo, mas ao comentar essa linha, não dá mais erro.
// produtos->(DbUNLOCK())
Não sei o motivo, mas ao comentar essa linha, não dá mais erro.
// produtos->(DbUNLOCK())
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
LetoDBf (fork) -> LetoDb com espinafre
Bom dia
E tem uma função nova para isso
Passe a usar DBRunlock() para destravar o registro...
Rubens
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ê
"
LetoDBf (fork) -> LetoDb com espinafre
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
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
Código: Selecionar todos
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)
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)
LetoDBf (fork) -> LetoDb com espinafre
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.
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.
LetoDBf (fork) -> LetoDb com espinafre
Tem essa função LETO_GETSERVERVERSION() Nunca usei.porter escreveu:Gostaria de saber, como faço para saber qual a versão do LETODBF
►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)
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)
LetoDBf (fork) -> LetoDb com espinafre
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.
“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.
LetoDBf (fork) -> LetoDb com espinafre
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() ?
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() ?
Código: Selecionar todos
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)
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)
LetoDBf (fork) -> LetoDb com espinafre
Fiz o teste:
Na minha aplicação fiz a execução hwg_msginfo(leto_UDF( "elktest" ))
A pergunta é: a tabela foi criada no servidor ou no cliente (no computador onde executou a chamada)?
Na minha aplicação fiz a execução hwg_msginfo(leto_UDF( "elktest" ))
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)
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)
LetoDBf (fork) -> LetoDb com espinafre
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()
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)
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)
LetoDBf (fork) -> LetoDb com espinafre
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?
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.
“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.
LetoDBf (fork) -> LetoDb com espinafre
Manda a estrutura da tabela e coloca novamente o que você quer testar, farei o teste.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?
►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)
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)
LetoDBf (fork) -> LetoDb com espinafre
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.
Era algo assim (fiz de cabeça, da uma revisada ai por favor se não escrevi nada errado... Kkkk):
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.
Código: Selecionar todos
/*
* 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' },;
Código: Selecionar todos
#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()
returnSun 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.
“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.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
LetoDBf (fork) -> LetoDb com espinafre
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
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
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
LetoDBf (fork) -> LetoDb com espinafre
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.
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.
“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.
LetoDBf (fork) -> LetoDb com espinafre
É dessa forma que eu faço é até uma dica antiga do ItamarItamar 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
►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)
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)
