Procedura

0

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'''

0

dlatego że dzień musi być dwucyfrowy np 03-03-2018 a nie 3-03-2018

0
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.

0

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

0
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

screenshot-20180317220611.png

0

Wyświetlanie a przekazywanie parametrów to dwie różne sprawy. Przekazuje 3

0

Przekazuje C2

0

Dodam jeszcze że w kodzie vba data zadeklarowana jest jako tekst.

0

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

0

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...

0

screenshot-20180317224647.png

0

Przy
Set rs = conn.Execute(sql)

0

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ć...

0

Dzięki kolego za pomoc jutro sprawdzę jeszcze raz .

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1