Clipper On Line • Ver Tópico - Ler uma pequena informação no Microsoft SQL Server

Ler uma pequena informação no Microsoft SQL Server

Discussão sobre SQL

Moderador: Moderadores

 

Ler uma pequena informação no Microsoft SQL Server

Mensagempor Eduardo Pinho » 22 Fev 2020 11:51

Amigos,

Por hobby faço uns programinhas em harbour 3.0 + dbf/cdx na empresa que me ajudam bastante.
Mas outros sistemas sao feitos pelo programador oficial em VFP + Microsoft SQL Server.
Ocorre que as vezes preciso buscar só uma informaçãozinha lá no SQL, não pretendo gravar no SQL, alterar as tabelas, mas somente ler um campo ou outro, e isso as vezes me faz falta.
O problema é que nem sei por onde começar. Se eu aprender a conectar no BD, a parte de comandos query, busca de dados, o programador daqui, me dá dicas, isso é tranquilo.
Mas no prg como fazer pra conectar no BD ?
O que tenho que adicionar no main() ? (includes, requests, libs)
Tenho que adicionar algo no hbp tambem ?
E como os dados voltam ? É um array ? Um DBF temporário ? Nao manjo nada desses acessos SQL...
Se alguem puder ajudar agradeço.
Abcs
Eduardo Pinho
Colaborador

Colaborador
 
Mensagens: 71
Data de registro: 13 Jun 2014 19:30
Cidade/Estado: Niteroi
Curtiu: 2 vezes
Mens.Curtidas: 5 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor alxsts » 22 Fev 2020 17:41

Olá!

Veja o tópico
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor JoséQuintas » 23 Fev 2020 11:04

Como tá usando uma versão do Harbour antiga, e vai receber ajuda de alguém de outra linguagem de programação, talvez o mais prático seja ADO.
Confirme no 3.0 se pode ser CreateObject(), win_OleCreateObject(), ou se tem algum equivalente.
NÃO SERVE o compatível com XHarbour, no XHarbour não funciona, então compatível com XHarbour também não funciona.

cn := win_OleCreateObject( "ADODB.Connection" )
cn:ConnectionString := "xxxxxxxx"
cn:Open()

Rs := cn:Execute( "SELECT bla bla bla" )
DO WHLE ! Rs:Eof()
   ? Rs:Fields( "CODIGO" ):Value
   Rs:MoveNext()
ENDDO
Rs:Close()

Cn:Close()


Só pra lembrar: pegando a versão mais recente do hbmk2.exe, pode usar a opção -hb30 pra usá-lo no Harbour 3.0.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor alxsts » 23 Fev 2020 14:02

Olá!

O tópico Harbour+ADO+SQL Server 2008 + Automação OLE - Como fazer? contém algumas informações que podem ajudar.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor Eduardo Pinho » 24 Fev 2020 08:58

Obrigado a todos pelo suporte.

Estou avancando, Com as dicas já resolvi os problemas da compilacao adicionando a biblioteca hbwin ao hbp, gerei o exe.

Mas ao rodar, dá erro no open() Error WINOLE/1007 Argument error: OPEN (DOS Error -2147352567)

Quintas, vi num outro topico que em 2011 voce teve exatamente o mesmo erro. Lembra como resolveu?

Alguém sabe como resolver? Meu codigo de teste está assim:


REQUEST HB_CodePage_ITISB
REQUEST DBFCDX

func main

local oCn,oRs

#include "hbgtinfo.ch"
#include "inkey.ch"
Set( _SET_CODEPAGE, "ITISB" )
SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )
rddsetdefault([DBFCDX])

hb_gtinfo( HB_GTI_WINTITLE , "TESTE SQL" )

hb_gtinfo( HB_GTI_ICONFILE , [rei.ico] )
hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
hb_gtinfo( HB_GTI_FONTSIZE , 24 )
hb_gtinfo( HB_GTI_FONTWIDTH, 36 )

oCn := CreateObject("ADODB.Connection")

oCn:ConnectionString := "Provider=MSOLEDBSQL;Server=SERVIDOR;Database=nfe;UID=wsga_rei;PWD=mypwd;"

oCn:Open() // Aqui, Error WINOLE/1007  Argument error: OPEN (DOS Error -2147352567)

oRs := oCn:Execute("SELECT EmpCodigo,NtfSerie,NtfNumero,dEmi,CNPJ_emit,CPF_emit,xNome,CNPJ_dest,CPF_dest,xNome_dest,vNF WHERE DATEPART(year,dEmi)=2020 ORDER BY EmpCodigo,NtfNumero")

oRs:moveFirst()

clear

Do While ! oRs:eof()
  ? oRs:Fields("EmpCodigo"):Value
  ?? oRs:Fields("NtfNumero"):Value
  ?? oRs:Fields("dEmi"):Value
  ?? oRs:Fields("xNome_dest"):Value
  oRs:MoveNext()
ENDDO

oRs:Close()
oCn:Close()
oRs := Nil
oCn := Nil

RETURN   

Eduardo Pinho
Colaborador

Colaborador
 
Mensagens: 71
Data de registro: 13 Jun 2014 19:30
Cidade/Estado: Niteroi
Curtiu: 2 vezes
Mens.Curtidas: 5 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor alxsts » 24 Fev 2020 09:19

Olá!

Verifique sua sentença SQL. Está faltando a cláusula FROM.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor Eduardo Pinho » 24 Fev 2020 09:55

Blz, vou checar isso. Mas, salvo engano, o erro dá antes no open(), né isso? O que pode ser?
Eduardo Pinho
Colaborador

Colaborador
 
Mensagens: 71
Data de registro: 13 Jun 2014 19:30
Cidade/Estado: Niteroi
Curtiu: 2 vezes
Mens.Curtidas: 5 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor JoséQuintas » 24 Fev 2020 10:24

Vai por parte:

cn := CreateObject( "ADODB.Connection" )
Isso cria a conexão, apenas um tipo de variável usado em conexão
NÃO dá erro se não conseguir criar

cn:ConnectionString := "bla bla bla"
Isso indica TUDO da conexão: Driver, base de dados, localização, usuário, senha, etc.
Mesmo que coloque informação errada, aqui não dá erro, porque trata-se de uma string
Mas pode dar erro, caso a linha anterior não tenha criado a conexão - não é seu caso

cn:Open()
É aqui que é feita a ligação com o banco de dados, e usa as informações de connectionstring pra encontrar a base de dados
Se não existir o driver dá erro - pode ser SQLServer, MySQL, MariaDB, Excel, etc. dependendo do driver precisa ser instalado. SQL Server geralmente não
se o endereço do servidor estiver errado dá erro
se o usuário/senha estiverem errados dá erro
se o nome da base estiver errado dá erro
se a string estiver errada dá erro - parece ser este o seu erro

As vezes a Microsoft gosta de complicar, parece que pode ser diferente conforme a versão do SQL Server/Windows
https://www.connectionstrings.com/ole-db-driver-for-sql-server/

Nesse caso, VOCE vai ter que fazer os testes, afinal é você que tem acesso ao SQL Server.
O ADO é universal, apesar de estar usando Harbour, é igual em outras linguagens. Veja se o programador que já usa esse SQL Server pode ajudar.
Não vamos ter um SQL Server igual pra fazer esses testes, então é com você.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor Eduardo Pinho » 24 Fev 2020 13:53

Perfeito, Quintas!!

Foquei na string, e o programador conectou via VFP/ADO e olhou a string utilizada.

Foi só trocar o provider de MSOLEDBSQL para SQLOLEDB que ja funcionou...

Já consigo ler as tabelas. Valeu mesmo!!

Obrigado Quintas e alxsts..

Abcs,
Eduardo Pinho
Colaborador

Colaborador
 
Mensagens: 71
Data de registro: 13 Jun 2014 19:30
Cidade/Estado: Niteroi
Curtiu: 2 vezes
Mens.Curtidas: 5 vezes

Ler uma pequena informação no Microsoft SQL Server

Mensagempor JoséQuintas » 24 Fev 2020 22:48

Só a título de curiosidade, naquele mesmo site de strings:

sqlserver.png


Mas é tanta opção, que é difícil ficar testando cada uma, ainda mais pra quem nunca usou.

É por isso que procurei pelo menos mostrar o caminho das pedras.

E esse site é uma boa referência, o problema é que tem muuuuuuuuita variedade de opções.... e por isso só quem tá com a mão na massa pra confirmar.

Também pra curiosidade:
O que altera pra SQL Server, MySQL, MariaDB, PostgreSQL, DBF, Access, Excel, etc.... é essa string.
Por isso esse site é útil.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 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