Uvoz podatkov,SQL - klic store procedur

Pomoč pri delu z MS Excelom
Odgovori
joze
Prispevkov: 11
Pridružen: Če Avg 23, 2007 10:05 am

Uvoz podatkov,SQL - klic store procedur

Odgovor Napisal/-a joze »

Na delovnem listu imam uvoz podatkov , ter sql stavek:
Sub Makro1()
'
' Makro1 Makro
' Makro ustvaril: xxxxxx, dne 31.8.2007
'

'
Range("A1").Select
With Selection.QueryTable
.Connection = Array( _
"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=PIS;Data Source=Streznik\2k;Use Procedur" _
, _
"e for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=xxxxx;Use Encryption for Data=False;Tag with column collat" _
, "ion when possible=False")
.CommandType = xlCmdSql
.CommandText = Array( _
"exec obracun '2007-08-28','2007-08-28','4'")
.Refresh BackgroundQuery:=False
End With
End Sub

Na ta način kličem zunanjo funkcijo, ki mi potem napolni podatke na izbran list.
Kako naj pokličem tole proceduro obracun , da bi mi datume vlekla iz izbranega polja na listu 1.ž
Imam tudi TextBox1 in TextBox2 kam bi zapisal datuma od ,do!

Procedura OBRACUN je stor procedura na SQL strežniku.
Lahko bi jo poklical tudi direkt iz makra?
Obracun TextBox1.value,textBox2.value,'4' ???
Kaka je sintaksa takega klica?
Tole vem narediti iz Delphija iz excela pa mi nekak ne rata

Hvala za pomoč 8)
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Preprosto je potrebno samo malce preurediti posneti makro tako, da sprejme dva vhodna parametra:

Koda: Izberi vse

Sub IzvediSQL(StatDate As Date, EndDate As Date)
    Range("A1").Select
    With Selection.QueryTable
        .Connection = Array("OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;", _
                            "Persist Security Info=True;Initial Catalog=PIS;Data Source=Streznik\2k;", _
                            "Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;", _
                            "Workstation ID=xxxxx;Use Encryption for Data=False;", _
                            "Tag with column collation when possible=False")
        .CommandType = xlCmdSql
        .CommandText = Array("exec obracun '" & Format(StartDate, "yyyy-mm-dd") & "'", _
                             "'" & Format(EndDate, "yyyy-mm-dd") & "','4'")
        .Refresh BackgroundQuery:=False
    End With
End Sub
In potem lahko takšno proceduro kličete kjerkoli preprosto s klicem:

Koda: Izberi vse

IzvediSQL CDate("28.08.2007"), CDate("28.08.2007")
Ali pa sevda tudi iz obrazca, kot:

Koda: Izberi vse

IzvediSQL CDate(Text1.Text), CDate(Text2.Text)
lp,
Matjaž Prtenjak
Administrator
joze
Prispevkov: 11
Pridružen: Če Avg 23, 2007 10:05 am

Odgovor Napisal/-a joze »

Poskušam poklicat proceduro - makro
IzvediSQL CDate(TextBox1.Text), CDate(TextBox2.Text)
in tu mi debuger javi napako (Runtime error '424' Object required)

Kje je lahko napaka?
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Po moje sploh nimate vnosnih polj TextBox1 in Textbox2... Kje pa imate zapisano to kodo? Na odzivu na klik gumba v obrazcu ali kje drugje?
lp,
Matjaž Prtenjak
Administrator
joze
Prispevkov: 11
Pridružen: Če Avg 23, 2007 10:05 am

Odgovor Napisal/-a joze »

admin napisal/-a:Po moje sploh nimate vnosnih polj TextBox1 in Textbox2... Kje pa imate zapisano to kodo? Na odzivu na klik gumba v obrazcu ali kje drugje?

Na odzivu na kliku gumba imam klic te procedure.

Na obrazcu - List1 pa imam TexBox1 in TexBox2
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pravite, da bi to znali narediti iz Delphija :?... No kakorkoli.

Če imate vnosna polja na listu1 potem morate to povedati tudi VBA-ju, ali kako pak ;):

Koda: Izberi vse

IzvediSQL CDate(List1.Text1.Text), CDate(List1.Text2.Text)
lp,
Matjaž Prtenjak
Administrator
joze
Prispevkov: 11
Pridružen: Če Avg 23, 2007 10:05 am

Odgovor Napisal/-a joze »

admin napisal/-a:Pravite, da bi to znali narediti iz Delphija :?... No kakorkoli.

Če imate vnosna polja na listu1 potem morate to povedati tudi VBA-ju, ali kako pak ;):

Koda: Izberi vse

IzvediSQL CDate(List1.Text1.Text), CDate(List1.Text2.Text)
V Delphi koda mi laufa, je mal drugačna sintaksa, pa nima veze sedaj to tu.

OK Hvala za pomoč, sem že odkril napako


lp
Odgovori