Problem z SqlServer

Cześć mam taki mały problem na studiach musze zrobic projekt aplikacji bazodanowej i musze korzystać z sqlserver na Azure. Udało mi sie połączyć aplikacje i Activerecord z Azurem poprzez:
'tiny_tds' i 'activerecord-sqlserver-adapter'
Poprzez eksplorator na Azurze widzę że aplikacja zmienia moją bazę danych itd. Jednak mam taki problem, że muszę tez napisać proste wywołąnia SQL-owe do samej bazy. Zacząłem od wzorowania się na oficjalnych materiałach https://www.microsoft.com/en-us/sql-server/developer-get-started/ruby/ubuntu/step/2.html
Napisałem sobie proste zapytanie plik (zapytanie.rb) :

require 'tiny_tds'
@client = TinyTds::Client.new username: ...... # Tu mam swopje dane na 100% prawidłowe

puts 'Connecting to SQL Server'

if @client.active? == true then puts 'Done' end


    @client.execute("SELECT * FROM high_scores").each do |row|
       print row
    end

@client.close

Wiem, że takie zapytanie jest poprawne:
https://ibb.co/kwRGXc – screen z Azure
Gdy wywołuję:
ruby zapytanie.rb
dostaję:

Connecting to SQL Server
Done
active.rb:10:in `each': Invalid object name 'high_scores'. (TinyTds::Error)
	from active.rb:10:in `<main>'

Mógłby któś mi powiedzieć co robię źle?

Wklej proszę pełen stacktrace błędu. Ogólnie raczej mała szansa żeby ktoś w Ruby używał takiego setupu jak Ty. Idealnie byłoby jakbyś prywatnie się odezwał i dał dostęp do kodu + tej bazy danych żeby zdiagnozować problem.

Zerknij jeszcze na te przykłady w dokumentacji https://docs.microsoft.com/pl-pl/azure/sql-database/sql-database-connect-query-ruby. Według nich nazwy tabel i kolumn podaje się w nawiasach kwadratowych.

Przerabiałem ostatnio tiny_tds do łączenia się z SQL Server na którym postawiona jest baza WF-MAGa no i miałem podobny problem dopóki do “from XXX” nie dodałem nazwy bazy danych. Przykładowo takie zapytanie:

"select sum(NETTO) as netto, sum(VAT) as vat from INTER_DOKH_VAT where ID_DOKUMENTU_HANDLOWEGO = #{id_dok};"

Musiałem zmeinić na takie:

"select sum(NETTO) as netto, sum(VAT) as vat from WAPRO.dbo.INTER_DOKH_VAT where ID_DOKUMENTU_HANDLOWEGO = #{id_dok};"

Mimo, iż to pierwsze gdy łączyłem się do bazy klientem windowsowym było prawidłowe i zwracało wyniki.

Z drugiej strony, patrzę, że poza railsami mam skrypt, w którym nie mam tego “WAPRO.dbo.” i działa prawidłowo.

W obu przypadkach jest:

@client = TinyTds::Client.new(username: 'XXX', password: 'XXX', host: 'XXX', database: 'WAPRO', tds_version: '7.3')

Ale ten pierwszy to

$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

$ gem list tiny_tds
tiny_tds (1.3.0)

Drugi:

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]

$ gem list tiny_tds
tiny_tds (2.0.0)
1 Like

Dzięki twój spośób zadzaiłał z dołączeniem nazwy.