VBA SQL kilka updatów SQL dotyczących tych samych zmiennych

0

mam taki problem, nie wiem jak w ubrać w jedną funkcję kilka updatów SQL w różnych tabelach, ale dotyczących tych samych zmiennych:
Mam taki kod:

Function KodyFaktur(NrFaktury As Variant, StaryKod As Variant, NowyKod As Variant)

Dim cn As Object: Set cn = CreateObject("ADODB.Connection")
Dim rs As Object: Set rs = CreateObject("ADODB.Recordset")
strCon = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=001;Data Source=vsql01;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DESKTOP-JABC61G;Use Encryption for Data=False;Tag with column collation when possible=False"
cn.Open strCon
strSQL = "update gbkmut set btw_code = " & NowyKod & " where bkstnr = " & NrFaktury & " and btw_code = " & StaryKod

rs.Open strSQL, cn
End Function

Potrzebowałbym do tej samej funcji wkleić 2 kolejne updaty w pozostałych tabelach:
update amutas set btw_code = " & NowyKod & "where faktuurnr =" & NrFaktury & " And btw_code = " & StaryKod
update frhsrg set btw_code = " & NowyKod & "where faknr =" & NrFaktury & " And btw_code = " & StaryKod

będę wdzięczny za małą podpowiedź :)

0

Zrób sobie stored proc w MS SQL - będzie na pewno bezpieczniej i w transakcji.
I nie Recordset, tylko Command, skoro nic nie pobierasz w wyniku...

0

ok. dzięki, spróbuję!

0

Procedura jest rozwiazaniem, ale dostrzegam nieprawidłowość w kodzie, dlaczego otwierasz recordset, do zapytania update już bardzie pasuje ADODB.Command lub bez mozna tak:

Function KodyFaktur(NrFaktury As Variant, StaryKod As Variant, NowyKod As Variant)

Dim cn As Object: Set cn = CreateObject("ADODB.Connection")
dim ra as long
with cn
     .ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=001;Data Source=vsql01;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DESKTOP-JABC61G;Use Encryption for Data=False;Tag with column collation when possible=False"
     .Open
      strSQL = "update gbkmut set btw_code = " & NowyKod & " where bkstnr = " & NrFaktury & " and btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
      strSQL = "update amutas set btw_code = " & NowyKod & "where faktuurnr =" & NrFaktury & " And btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
      strSQL = "update frhsrg set btw_code = " & NowyKod & "where faknr =" & NrFaktury & " And btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
     .close
End With
End Function

Warto jeszcze to ubrać to w transakcje, aby mieć pewnośc że wszystkie updaty zadziałały....

0

a mógłbyś podesłać przykład prostej transakcji?

0
Panczo napisał(a):

Procedura jest rozwiazaniem, ale dostrzegam nieprawidłowość w kodzie, dlaczego otwierasz recordset, do zapytania update już bardzie pasuje ADODB.Command lub bez mozna tak:

Function KodyFaktur(NrFaktury As Variant, StaryKod As Variant, NowyKod As Variant)

Dim cn As Object: Set cn = CreateObject("ADODB.Connection")
dim ra as long
with cn
     .ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=001;Data Source=vsql01;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DESKTOP-JABC61G;Use Encryption for Data=False;Tag with column collation when possible=False"
     .Open
      strSQL = "update gbkmut set btw_code = " & NowyKod & " where bkstnr = " & NrFaktury & " and btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
      strSQL = "update amutas set btw_code = " & NowyKod & "where faktuurnr =" & NrFaktury & " And btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
      strSQL = "update frhsrg set btw_code = " & NowyKod & "where faknr =" & NrFaktury & " And btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
     .close
End With
End Function

Warto jeszcze to ubrać to w transakcje, aby mieć pewnośc że wszystkie updaty zadziałały....

działa super, dzięki, a mógłbyś podać jeszcze przykład kodu transakcji ?

0

Dawno nie pisałem w ADO, ale z pamieci, coś w ten deseń:

Function KodyFaktur(NrFaktury As Variant, StaryKod As Variant, NowyKod As Variant)

On Error Goto Error_Handler
Dim cn As Object: Set cn = CreateObject("ADODB.Connection")
Dim transaction as boolean
dim ra as long

transaction = false
with cn
     .ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=001;Data Source=vsql01;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DESKTOP-JABC61G;Use Encryption for Data=False;Tag with column collation when possible=False"
     .Open
     .BeginTrans
     transaction = true
      strSQL = "update gbkmut set btw_code = " & NowyKod & " where bkstnr = " & NrFaktury & " and btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
      strSQL = "update amutas set btw_code = " & NowyKod & "where faktuurnr =" & NrFaktury & " And btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
      strSQL = "update frhsrg set btw_code = " & NowyKod & "where faknr =" & NrFaktury & " And btw_code = " & StaryKod
     .Execute strSQL, ra, adExecuteNoRecords
.    .CommitTran
     transaction = false
     .close
End With

exit function
Error_Handler:
If transaction Then
       cn.RollbackTrans  
end if
End Function
0

Dzieki wielkie!

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