MS ACCESS - Jak w kodzie VBA połączyć dwa zapytania w jednym recordsecie?

0

Cześć - taki problem. Mam pewien kod (poniżej). Czy jest opcja żeby przerobić to tak, żeby nie pisać za każdym razem tego: "dim rst5 as dao.recordset" tylko zrobić jakiś globalny recordset? Po aktualizacji jednego pola ma wykonać się wiele zapytań sqlowych i średnio mi się widzi robić 10x deklaracje, seta, zamykanie. Da się to uprościć?

Private Sub wpr_krotkaNazwaProjektu_AfterUpdate()
Dim rst4 As DAO.Recordset
Dim rst5 As DAO.Recordset
Dim strSql4 As String
Dim strSql5 As String
Dim krotkaNazwaProjektu4 As String
Dim krotkaNazwaProjektu5 As String


krotkaNazwaProjektu4 = wpr_krotkaNazwaProjektu.Text
krotkaNazwaProjektu5 = wpr_krotkaNazwaProjektu.Text

strSql4 = "SELECT Ewidencje.E_dataRozpoczeciaProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu4) & "' "
strSql5 = "SELECT Ewidencje.E_dataPlanowaneZakonczenieProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu5) & "' "

Set rst4 = CurrentDb.OpenRecordset(strSql4)
Set rst5 = CurrentDb.OpenRecordset(strSql5)

przypisanie4 = rst4!E_dataRozpoczeciaProjektu
przypisanie5 = rst5!E_dataPlanowaneZakonczenieProjektu

rst4.Close
Set rst4 = Nothing
rst5.Close
Set rst5 = Nothing

wpr_planowanaDS.Value = przypisanie4
wpr_planowanaDZ.Value = przypisanie5
End Sub
2

Z tego co pokazujesz to nie wiem dlaczego ma sie to robić 2 razy, bo można zrobić 1, kod robiacy dokładnie to samo co Twój:

Private Sub wpr_krotkaNazwaProjektu_AfterUpdate()
	Dim rst As DAO.Recordset
	Dim strSql As String
	Dim krotkaNazwaProjektu As String

	krotkaNazwaProjektu = wpr_krotkaNazwaProjektu.Text

	strSql = "SELECT Ewidencje.E_dataRozpoczeciaProjektu, Ewidencje.E_dataPlanowaneZakonczenieProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu) & "' "

	Set rst = CurrentDb.OpenRecordset(strSql)

	wpr_planowanaDS.Value = rst!E_dataRozpoczeciaProjektu
	wpr_planowanaDZ.Value = rst!E_dataPlanowaneZakonczenieProjektu

	rst.Close
	Set rst = Nothing

End Sub
0

Chodzi Ci o to żeby zmienna rst5 była dostępna z poziomu innych makr? Wtedy poza funkcją (najlepiej góra modułu):

Public rst5 As DAO.Recordset
1

Rozumiem odpowiedź, jednak gdybyś mógł odpowiedzieć stricte na moje. Czy da się to zrobić w taki sposób jak zapytałem?

No możesz korzystać z jednej zmiennej ale wtedy musisz zmienic kolejność, pobieram-> zapisuje->zamykam

Private Sub wpr_krotkaNazwaProjektu_AfterUpdate()
	Dim rst As DAO.Recordset
	Dim strSql As String
	Dim krotkaNazwaProjektu4 As String
	Dim krotkaNazwaProjektu5 As String

	krotkaNazwaProjektu4 = wpr_krotkaNazwaProjektu.Text
	krotkaNazwaProjektu5 = wpr_krotkaNazwaProjektu.Text

	strSql = "SELECT Ewidencje.E_dataRozpoczeciaProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu4) & "' "
	Set rst = CurrentDb.OpenRecordset(strSql)
	przypisanie4 = rst!E_dataRozpoczeciaProjektu
	rst.close
	
	strSql = "SELECT Ewidencje.E_dataPlanowaneZakonczenieProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu5) & "' "
	Set rst = CurrentDb.OpenRecordset(strSql)
	przypisanie5 = rst!E_dataPlanowaneZakonczenieProjektu

	rst.Close
	Set rst = Nothing

	wpr_planowanaDS.Value = przypisanie4
	wpr_planowanaDZ.Value = przypisanie5
End Sub

Samo w sobie mija się to z celem, to moment by wodrębnić powtarzający się kod do funkcji:

Private Sub wpr_krotkaNazwaProjektu_AfterUpdate()
	Dim strSql As String
	Dim krotkaNazwaProjektu4 As String
	Dim krotkaNazwaProjektu5 As String

	krotkaNazwaProjektu4 = wpr_krotkaNazwaProjektu.Text
	krotkaNazwaProjektu5 = wpr_krotkaNazwaProjektu.Text

	strSql = "SELECT Ewidencje.E_dataRozpoczeciaProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu4) & "' "
	przypisanie4 = cDLookup(strsql)
	
	strSql = "SELECT Ewidencje.E_dataPlanowaneZakonczenieProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu5) & "' "
	przypisanie5 =  = cDLookup(strsql)

	wpr_planowanaDS.Value = przypisanie4
	wpr_planowanaDZ.Value = przypisanie5
End Sub
Function cDLookup(byval sql as string) as string
	Dim rst As DAO.Recordset
	Set rst = CurrentDb.OpenRecordset(sql)
	cDLookup = nz(rst.Fields(0).Value,"")

	rst.Close
	Set rst = Nothing
End Function

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