Ler uma pequena informação no Microsoft SQL Server

Forum sobre SQL.

Moderador: Moderadores

Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Ler uma pequena informação no Microsoft SQL Server

Mensagem por Eduardo Pinho »

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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Ler uma pequena informação no Microsoft SQL Server

Mensagem por alxsts »

Olá!

Veja o tópico
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ler uma pequena informação no Microsoft SQL Server

Mensagem por JoséQuintas »

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.

Código: Selecionar todos

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 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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Ler uma pequena informação no Microsoft SQL Server

Mensagem por alxsts »

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)
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Ler uma pequena informação no Microsoft SQL Server

Mensagem por Eduardo Pinho »

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:

Código: Selecionar todos


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   




alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Ler uma pequena informação no Microsoft SQL Server

Mensagem por alxsts »

Olá!

Verifique sua sentença SQL. Está faltando a cláusula FROM.
[]´s
Alexandre Santos (AlxSts)
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Ler uma pequena informação no Microsoft SQL Server

Mensagem por Eduardo Pinho »

Blz, vou checar isso. Mas, salvo engano, o erro dá antes no open(), né isso? O que pode ser?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ler uma pequena informação no Microsoft SQL Server

Mensagem por JoséQuintas »

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-d ... ql-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 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/
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Ler uma pequena informação no Microsoft SQL Server

Mensagem por Eduardo Pinho »

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

Ler uma pequena informação no Microsoft SQL Server

Mensagem por JoséQuintas »

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