Witam.
Mam procedure która wybiera mi dane na podstawie daty wpisywanej w excel-u ale problem mam taki że jesli wpiszę dzień od 1-9 to mam błąd.
''' ALTER proc [dbo].[DaneDzien]
@rok nvarchar(4), @miesiac nvarchar(2), @dzien nvarchar(2)
as
select * from
OKF
where date=CAST(@rok+@miesiac+@dzien AS datetime)
order by date asc'''
dlatego że dzień musi być dwucyfrowy np 03-03-2018 a nie 3-03-2018
Koko1 napisał(a):
dlatego że dzień musi być dwucyfrowy np 03-03-2018 a nie 3-03-2018
Ok.Ale mam w excelu format ogólny gdzie wyświetla mi jako 03.
hmm dziwne bo zera wiodące w ogólnym formacie w excelu zawsze są usuwane. pytanie czy masz faktycznie w komórkach cyfr np 03 czy cyfrę 3 a jedynie wyświetlasz ją w excelu jako 03 poprzez formatowanie komórek
Koko1 napisał(a):
hmm dziwne bo zera wiodące w ogólnym formacie w excelu zawsze są usuwane. pytanie czy masz faktycznie w komórkach cyfr np 03 czy cyfrę 3 a jedynie wyświetlasz ją w excelu jako 03 poprzez formatowanie komórek
Wyświetlanie a przekazywanie parametrów to dwie różne sprawy. Przekazuje 3
Przekazuje C2
Dodam jeszcze że w kodzie vba data zadeklarowana jest jako tekst.
Sub ConnectSqlServer()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
Dim rok, miesiac, dzien, sql As String
rok = Sheets(1).Cells(2, 1).Text
miesiac = Sheets(1).Cells(2, 2).Text
dzien = Sheets(1).Cells(2, 3).Text
sql = "Exec dbo.DaneDzien " + "'" + rok + "'," + "'" + miesiac + "'," + dzien
' Create the connection string.
sConnString = "Driver={SQL Server};Server=DESKTOP-S7OIIBO; Database=TagsDataBase; UID=sa; PWD=wonderware"
' Create the Connection and Recordset objects.
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
' Open the connection and execute.
conn.Open sConnString
Set rs = conn.Execute(sql)
Module2.Clear
' Check we have data.
If Not rs.EOF Then
' Transfer result.
Sheets(3).Range("A1").CopyFromRecordset rs
' Close the recordset
rs.Close
Sheets(2).Activate
Else
MsgBox "Brak danych. Sprawdź ustawienia daty", vbCritical
End If
' Clean up
If CBool(conn.State And adStateOpen) Then conn.Close
Set conn = Nothing
Set rs = Nothing
End Sub
po dzien =
wstaw linijkę:
Debug.Print TypeName(dzien)
po sql = ...
wstaw
Debug.Print sql
wykonuj krokowo i podaj co ci do okienka bezpośredniego wypluło...
Przy
Set rs = conn.Execute(sql)
No i nie dałeś tego, co ci debug wypluł... Przekonałbyś się, że masz złą deklarację zmiennych (w linii z dim .. tylko sql jest string - reszta jest variant).
Po drugie nawet gdyby był string, to źle przekazujesz - brakuje ci apostrofów przy dzien. To nmiał ten drugi debug.print pokazać...
Dzięki kolego za pomoc jutro sprawdzę jeszcze raz .
Tak jak kolega Marcin zwrócił uwagę błąd był w apostrofach.
sql = "Exec dbo.DaneDzien " + "'" + rok + "'," + "'" + miesiac + "','" + dzien + "' "
teraz działa.Dzięki za uwagę i poświęcenie.