maria_Connect / FWCONNECT Ayuda

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

Moderador: Moderadores

Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

maria_Connect / FWCONNECT Ayuda

Mensagem por Ruben Dario »

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

maria_Connect / FWCONNECT Ayuda

Mensagem por JoséQuintas »

O que é oDBF?
o que é oRS?

oRS:Seek() porque isso????
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

maria_Connect / FWCONNECT Ayuda

Mensagem por MSDN »

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.
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

maria_Connect / FWCONNECT Ayuda

Mensagem por Ruben Dario »

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

maria_Connect / FWCONNECT Ayuda

Mensagem por JoséQuintas »

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:

Código: Selecionar todos

   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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

maria_Connect / FWCONNECT Ayuda

Mensagem por jairfab »

//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 do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

maria_Connect / FWCONNECT Ayuda

Mensagem por jairfab »

//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 do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

maria_Connect / FWCONNECT Ayuda

Mensagem por jairfab »

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

Código: Selecionar todos


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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

maria_Connect / FWCONNECT Ayuda

Mensagem por JoséQuintas »

Credo, que desperdício de recursos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

maria_Connect / FWCONNECT Ayuda

Mensagem por jairfab »

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

Código: Selecionar todos


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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

maria_Connect / FWCONNECT Ayuda

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

maria_Connect / FWCONNECT Ayuda

Mensagem por JoséQuintas »

Tá aí.... parcial, mas é encima do recordset, que pode vir de qualquer base de dados
test.png
test.png (6 KiB) Exibido 2007 vezes

Código: Selecionar todos

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:

Código: Selecionar todos

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:

Código: Selecionar todos

#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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

maria_Connect / FWCONNECT Ayuda

Mensagem por MSDN »

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.
Responder