Clipper On Line • Ver Tópico - maria_Connect / FWCONNECT Ayuda

maria_Connect / FWCONNECT Ayuda

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

maria_Connect / FWCONNECT Ayuda

Mensagempor Ruben Dario » 20 Dez 2019 21:58

Saludos Al Forum

He tratador de hacer una busqueda de un registro uso los siguientes Commandos.
oDbf:Filter := "variable = 'abc' " // exactly like ADO
// OR
oDbf:SetFilter( "variable='abc' " )
no me funciona me dice que registro no existe, cometiendo, no me funciona

Ahora uso de Seek cuando ejecuto el queryn ya tengo ordenado.
oRs:Seek( 'abc' )
no me funciona me dice que registro no existe, cometiendo, no me funciona

Ahora uso de Locate
oDbf:Locate( "variable = 'abc' " )
no me funciona me dice que registro no existe, cometiendo, no me funciona

Alquien me puede orientar que error estoy cometiendo.
Usando ADO no me funciona.

Uso fwh 18.11 y bcc74 y harbour 3.2

Gracias
Ruben Dario
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 115
Data de registro: 14 Jun 2015 23:19
Cidade/Estado: Colombia
Curtiu: 3 vezes
Mens.Curtidas: 0 vez

maria_Connect / FWCONNECT Ayuda

Mensagempor JoséQuintas » 21 Dez 2019 10:32

O que é oDBF?
o que é oRS?

oRS:Seek() porque isso????
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor MSDN » 21 Dez 2019 10:53

Nesse caso em específico, melhor perguntam nos fóruns exclusivos do Fivewin, pois trata-se de uma classe do Fivewin feita para acessar a manipular dados com MariaDB.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor Ruben Dario » 21 Dez 2019 20:11

Gracias por tu respuesta
Son esto lo Query, a esto me refiero

cSelect = "Select * from ....."

oDBF:= SerConx:RowSet( cSelect )

oRS := SerConx:RowSet( cSelect )

oRS:Seek --> Supuesta mente es una instrucción de busqueda
segun la documentacion se usa asi
Works even if the connection to server is lost.

SEEK:

oRs:Sort := <fieldname>
// OR
oRs:SetOrder( <fieldname> )

oRs:Seek( <value>, [lSoft], [lWild] ) --> lSuccess
Ruben Dario
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 115
Data de registro: 14 Jun 2015 23:19
Cidade/Estado: Colombia
Curtiu: 3 vezes
Mens.Curtidas: 0 vez

maria_Connect / FWCONNECT Ayuda

Mensagempor JoséQuintas » 21 Dez 2019 20:54

Isso é específico do que está usando, e não entendi porque indicou isto "exactly like ADO"

Nem faz muito sentido aplicar o filtro após seleção do ADO, exceto em browses.
Mas, um exemplo:

   LOCAL oADO, oRs

   oADO := win_OleCreate( "ADODB.Connection" )
   oADO:ConnectionString := "sdfdsfddf"
   oADO:Open()
   oRs := oADO:Execute( "SELECT * FROM TABELA" )
   oRs:Filter( "valor=10" )
  ...
   oRs:Close()
   oADO:Close()


Mas isto é ADO, não tem a ver com o que está usando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor jairfab » 21 Dez 2019 22:38

//oRs: tanto pode vim de um dbf como de um banco de dados mysql ou mariadb
// Exemplo

//oCn := FW_DemoDB( "ADO" ) // ado
//oCn := FW_DemoDB() // mariadb
//oCn := FW_DemoDB(1) // mariadb
//oCn := FW_DemoDB(2) // mariadb
//oCn := FW_DemoDB(5) // mariadb e ainda pode ter a su
//DBUSEAREA(.T.,,"CUSTOMER","CUST",.T.) // dbf
//database oCn

//oRs := TDatabase():Open( nil, "TESTEDIT", "DBFCDX", .T. )

//USE customer NEW ALIAS "CUSTNEW" SHARED VIA "DBFCDX"
//oRs := TDataBase():New( Select( "CUSTNEW" ) )

//oRs := oCn:RowSet( "SELECT ID,FIRST,CITY,SALARY FROM customer" )

entre outras formas de acesso que não vou relacionar aqui.

Mas não ficou muito claro o que realmente você esta utilizando, aparentemente poderia ser um problema de índice.

ou pode ser que no select você não informou este índice
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 243
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Suzano
Curtiu: 0 vez
Mens.Curtidas: 13 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor jairfab » 21 Dez 2019 22:41

//oRS:Seek() porque isso????

Tem o mesmo efeito que o seek em uma dbf, porem precisa do índice no banco de dados e/ou no select.
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 243
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Suzano
Curtiu: 0 vez
Mens.Curtidas: 13 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor jairfab » 21 Dez 2019 22:47

Um exemplo de abertura de tabelas utilizando dbf, e outros bancos de dados coloquei 5 formas mas tem muitas outras


static function OpenTable()

   local uTable

   SWITCH nDataType

   CASE 1 // DBF
      USE STATES NEW SHARED VIA "DBFCDX"
      uTable   := ALIAS()
      EXIT

   case 2 // TDatabase para abrir um dbf tem outras formas mas pra dbf prefiro esta
      uTable   := TDatabase():Open( nil, "STATES", "DBFCDX", .T. )
      if !uTable:Used()
         uTable   := nil
      endif
      EXIT

   case 3 // FWMariaDB

      //oCn := maria_Connect( server, database, user, password )
      oCn      := FW_DemoDB()
      uTable   := oCn:RowSet( "states" )
      EXIT

   case 4 // ADO

      //oCn   := FW_OpenAdoConnection( "MSSQL,208.91.198.196,gnraore3_,fwhmsdemo,fwh@2000#", .t. )
      oCn      := FW_DemoDB( "ADO" )
      uTable   := FW_OpenRecordSet( oCn, "states" )
      EXIT

   case 5 // DOLPHIN

      oCn      := FW_DemoDB( "DLP" )
      uTable   := oCn:Query( "SELECT * FROM states" )

      EXIT
   END

return uTable

Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 243
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Suzano
Curtiu: 0 vez
Mens.Curtidas: 13 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor JoséQuintas » 22 Dez 2019 03:55

Credo, que desperdício de recursos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor jairfab » 22 Dez 2019 11:04

KKKKKK os recursos exixtem para serem utilizados alguns utilizama de uma forma outros de outras formas, mas para mim, isto não parece desperdício, quem quiser pode escrever este mesmo código e depois fazer a sua própria analise.
OBS: Este mesmo código serve para dbf ;
Para banco de dados tipo mysql , mariadb ;
Precisa trocar a conexão pra acessar os banco de dados, mas o restante não muda!
A parte de oRec:seek(), oRec:gotop(), oDbf:Blank(), oDbf:Append() e a maioria dos comando que estamos acostumados a utilizar em dbf estao presente nestas class simplesmente para compatibilizar a utilização em dbf e sgdb. No entanto isto não impede de utilizarmos comando nativo sql.
Tipo: oTable:Append( "FILENAME,PHOTO", { cFile, MEMOREAD( cFile ) } ) ou oTable:Update( "FILENAME,PHOTO", { cFile, MEMOREAD( cFile ) } )
oCn:Insert( "reservations", "start,end,name,room_id,status,paid", aData, .T. ) ou oCn:Upsert( "reservations", "start,end,name,room_id,status,paid", aData )

Entre outras tantas formas que já conhecemos no sql ...

O que eu posso afirmar seria a redução do tamanho do código que temos de escrever sem considerar a compatibilidade com alguns tipos de sgdb, eu so tenho a agradecer o Antonio Linhares por ter criados estas class maravilhosas pois com as mesmsas facilitou o meu trabalho no minimo em 70% ....

Exemplo: inclusão e alteração


function teste( lTipo  )
Local oDlg, oFont, oRec
   
   oRec  := TDataBase():Open( nil, "c:\fwh\samples\states.dbf", "DBFCDX", .t.  ) // Abertura do banco de dados 
   
   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14 // Definicao da fonte
   DEFINE DIALOG oDlg SIZE 400,240 PIXEL TRUEPIXEL FONT oFont  TITLE If( lTipo , "Inclusão", "Alteração" ) // Criacao da janela
   
   @ 040,030 SAY "Codigo  :" GET oRec:ID        SIZE 100,24 PIXEL PICTURE "999999" READONLY
   @ 070,030 SAY "Nome    :" GET oRec:Name  SIZE 300,24 PIXEL
   @ 100,030  SAY "Cidade :" GET oRec:City     SIZE 300,24 PIXEL

   @ 160,030 BTNBMP PROMPT "Gravar"   SIZE 100,40 PIXEL OF oDlg FLAT   ACTION ( oRec:Save(), oDlg:End() )  // Gravar e Fechar a janela
   @ 160,270 BTNBMP PROMPT "Cancelar" SIZE 100,40 PIXEL OF oDlg FLAT   ACTION ( oDlg:End() )                     // Fechar a janela

   ACTIVATE DIALOG oDlg CENTERED ON PAINT oDlg:Box( 20, 10, 150, 390 )
   RELEASE FONT oFont

   oRec:Close()

return nil
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 243
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Suzano
Curtiu: 0 vez
Mens.Curtidas: 13 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor JoséQuintas » 22 Dez 2019 14:00

fivewin é Windows.
ADO existe no Windows, e trabalha com qualquer base de dados, inclusive DBF.
O que ele fez foi reinventar a roda, e deixar programadores presos ao Fivewin.

Vou até fazer uns testes pra confirmar se dá pra fazer mais do que faço hoje, essa parte dos GETs.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor JoséQuintas » 22 Dez 2019 14:38

Tá aí.... parcial, mas é encima do recordset, que pode vir de qualquer base de dados

test.png
test.png (6 KiB) Visualizado 1420 vezes


PROCEDURE Main

   LOCAL oADO, nCont, GetList := {}

   SetMode( 25, 80 )
   SetColor( "W/B" )
   CLS

   oADO := CreateCli()

   @ 1, 0 SAY "NOME.....:" GET oADO:Fields( "NOME" ):Value
   @ 2, 0 SAY "ENDERECO.:" GET oADO:Fields( "ENDERECO" ):Value
   @ 3, 0 SAY "CIDADE...:" GET oADO:Fields( "CIDADE" ):Value
   @ 4, 0 SAY "UF.......:" GET oADO:Fields( "UF" ):Value
   @ 5, 0 SAY "CEP......:" GET oADO:Fields( "CEP" ):Value
   READ
   oADO:Update()

   CLS
   FOR nCont = 1 TO oADO:Fields:Count()
      @ Row() + 1, 0 SAY oADO:Fields( nCont - 1 ):Value
   NEXT

   Inkey(0)

   RETURN


rotina que cria a tabela teste:

FUNCTION CreateCli()

   LOCAL oADO, aStru := { ;
      { "NOME", "C", 30, 0 }, ;
      { "ENDERECO", "C", 40, 0 }, ;
      { "CIDADE", "C", 30, 0 }, ;
      { "UF", "C", 2, 0 }, ;
      { "CEP", "C", 9, 0 } }

   oADO := ADOCreate( aStru )
   oADO:Open()
   oADO:AddNew()
   oADO:Fields( "NOME" ):Value     := Space(30)
   oADO:Fields( "ENDERECO" ):Value := Space(40)
   oADO:Fields( "CIDADE" ):Value   := Space(30)
   oADO:Fields( "UF" ):Value       := Space(2)
   oADO:Fields( "CEP" ):Value      := Space(9)
   oADO:Update()

   RETURN oADO


rotina que cria a tabela ADO, baseada numa estrutura igual DBF:

#include "dbstruct.ch"
#define AD_BIGINT           20
#define AD_DATE            7
#define AD_DOUBLE           5
#define AD_VARCHAR           200
#define AD_LONGVARCHAR         201

#define AD_FLD_KEYCOLUMN        0x8000
#define AD_FLD_ISNULLABLE       0x20
#define AD_FLD_MAYBENULL        0x40
#define AD_FLD_UPDATABLE        0x4

FUNCTION ADOCreate( aStru )

LOCAL oADO, oElement

oADO := win_OleCreateObject( "ADODB.Recordset" )
FOR EACH oElement IN aStru
   DO CASE
   CASE oElement[ DBS_TYPE ] == "I"
    oADO:Fields:Append( oElement[ DBS_NAME ], AD_BIGINT, oElement[ DBS_LEN ], AD_FLD_KEYCOLUMN )
   CASE oElement[ DBS_TYPE ] == "N"
    IF oElement[ DBS_DEC ] == 0
      oADO:Fields:Append( oElement[ DBS_NAME], AD_BIGINT, oElement[ DBS_LEN ] )
    ELSE
      oADO:Fields:Append( oElement[ DBS_NAME ], AD_DOUBLE, oElement[ DBS_LEN ] )
      oADO:Fields( oElement[ DBS_NAME ] ):NumericScale := oElement[ DBS_DEC ]
    ENDIF
   CASE oElement[ DBS_TYPE ] == "C"
    oADO:Fields:Append( oElement[ DBS_NAME ], AD_VARCHAR, oElement[ DBS_LEN ] )
   CASE oElement[ DBS_TYPE ] == "D"
    oADO:Fields:Append( oElement[ DBS_NAME ], AD_DATE )
   CASE oElement[ DBS_TYPE ] == "M"
    oADO:Fields:Append( oElement[ DBS_NAME ], AD_LONGVARCHAR )
   ENDCASE
NEXT

RETURN oADO


Não está preso a base de dados, e nem mesmo a linguagem de programação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

maria_Connect / FWCONNECT Ayuda

Mensagempor MSDN » 22 Dez 2019 15:03

As vezes eu discordo do Quintas, mas ele está certo. O que o Antonio fez com o Fivewin é exatamente isso, criar facilidades usando o que já existe nativamente no próprio SO, e ele não está errado nisso, viu que tinha essa brecha para ganhar dinheiro e foi lá, tá certo, errados estão os programadores que não enxergam isso, lá da década de 90 até entendo, mas hoje, com pleno 2019 quase 2020, com tanta informação, cursos grátis, etc, não tem mais como não saber certas coisas. Desde o começo dos anos 2000, a MiniGUI apareceu e veio crescendo, e hoje em dia, tudo o que o Fivewin faz ela tbem faz, pq tanto Fivewin como MiniGUI só servem para desenhar janelas gráficas usando a API do Windows, onde tudo é uma janela, como o Quintas já explicou isso aqui no Fórum tempos atrás, fora isso, o resto depende de recursos do SO, quanto a gente vai estudar outras linguagens, abre muito a cabeça em relação a isso, e ajuda inclusive a ser um programador xBase melhor, e ver que dá pra fazer muitaaa coisa com Harbour.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 9 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