Página 1 de 1
maria_Connect / FWCONNECT Ayuda
Enviado: 20 Dez 2019 21:58
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
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 10:32
por JoséQuintas
O que é oDBF?
o que é oRS?
oRS:Seek() porque isso????
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 10:53
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.
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 20:11
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
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 20:54
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.
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 22:38
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
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 22:41
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.
maria_Connect / FWCONNECT Ayuda
Enviado: 21 Dez 2019 22:47
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
maria_Connect / FWCONNECT Ayuda
Enviado: 22 Dez 2019 03:55
por JoséQuintas
Credo, que desperdício de recursos.
maria_Connect / FWCONNECT Ayuda
Enviado: 22 Dez 2019 11:04
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
maria_Connect / FWCONNECT Ayuda
Enviado: 22 Dez 2019 14:00
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.
maria_Connect / FWCONNECT Ayuda
Enviado: 22 Dez 2019 14:38
por JoséQuintas
Tá aí.... parcial, mas é encima do recordset, que pode vir de qualquer base de dados

- test.png (6 KiB) Exibido 2002 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.
maria_Connect / FWCONNECT Ayuda
Enviado: 22 Dez 2019 15:03
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.