Thread View: pl.comp.bazy-danych.msaccess
17 messages
17 total messages
Started by affix
Thu, 05 May 2016 12:07
Dane z kilku rekordów w jednym polu
Author: affix
Date: Thu, 05 May 2016 12:07
Date: Thu, 05 May 2016 12:07
46 lines
2049 bytes
2049 bytes
Chciałbym spytać czy to się da zrobić. Tabela tblBramki zawiera następujące pola: IDmeczu (służy do połaczenia z tblMecze) IDbramki (autonumerowanie) wynik imię nazwisko Przyjmijmy, że w tabeli są 4 rekordy IDmeczu = 1 IDbramki = 1 wynik = 1:0 imię = Jan nazwisko = Nowak IDmeczu = 1 IDbramki = 2 wynik = 2:0 imię = Jerzy nazwisko = Kowalski IDmeczu = 2 IDbramki = 3 wynik = 1:0 imię = Piotr nazwisko = Nowicki IDmeczu = 2 IDbramki = 4 wynik = 2:0 imię = Krzysztof nazwisko = Lasocki Jak do jednego pola Strzelcy w formularzu (raporcie) wrzucić dane: IDmeczu = 1 Strzelcy = 1:0 Jan Nowak, 2:0 Jerzy Kowalski IDmeczu = 2 Strzelcy = 1:0 Piotr Nowicki, 2:0 Krzysztof Lasocki Będę wdzięczny za odpowiedź MW
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 07 May 2016 18:48
Date: Sat, 07 May 2016 18:48
16 lines
1723 bytes
1723 bytes
Witaj! Pomysł mam taki: W raporcie powinny być pola IDmeczu i Strzelcy (typ memo) Musisz przy zasilaniu raportu danymi otworzyć recordseta opartego na tabeli bramki i w pętelce pododawać idbramki, wynik i strzelców do zmiennej tekstowej. Pomysłem jest ta pętelka. Niestety nie mam czasu na szczegółowe opracowanie rozwiązania. Pozdrawiam / MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 07 May 2016 20:27
Date: Sat, 07 May 2016 20:27
45 lines
2448 bytes
2448 bytes
Może trochę nieufolnie lae coś zrobiłem:
Dim rs AS Recordset, rs2 As Recordset
Dim sListaStrzelcow As String
Dim sIDMeczu As String
Dim db AS Database
Dim sSQL As String, sSQL1mecz As String
Set db = CurrentDB
sSQL = "SELECT * FROM tblBramki ORDER BY IDmeczu, IDbramki;"
Set rs = db.OpenRecordset(sSQL)
With rs
For i = Min(.IDmeczu) to Max(.IDmeczu)
sIDMeczu = .IDmeczu
sSQLIDM = "SELECT * FROM tblBramki WHERE IDmeczu = '" & .IDmeczu & "' ORDER BY IDbramki;"
Set rs2 = db.OpenRecordset(sSQL1mecz)
With rs2
For j = 1 to Max(.IDbramki)
If j = 1 Then
sListaStrzelcow = .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
Else
sListaStrzelcow = sListaStrzecow & CrLf & .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
End IF
Next j
End With
rs2.close
Set rs2 = Nothing
Next i
End With
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Pozdrawiam
/
MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 07 May 2016 20:29
Date: Sat, 07 May 2016 20:29
45 lines
2465 bytes
2465 bytes
poprawka:
Sub Strzelcy_memo()
Dim rs AS Recordset, rs2 As Recordset
Dim sListaStrzelcow As String
Dim sIDMeczu As String
Dim db AS Database
Dim sSQL As String, sSQL1mecz As String
Set db = CurrentDB
sSQL = "SELECT * FROM tblBramki ORDER BY IDmeczu, IDbramki;"
Set rs = db.OpenRecordset(sSQL)
With rs
For i = Min(.IDmeczu) to Max(.IDmeczu)
sIDMeczu = .IDmeczu
sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = '" & .IDmeczu & "' ORDER BY IDbramki;"
Set rs2 = db.OpenRecordset(sSQL1mecz)
With rs2
For j = 1 to Max(.IDbramki)
If j = 1 Then
sListaStrzelcow = .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
Else
sListaStrzelcow = sListaStrzecow & CrLf & .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
End IF
Next j
End With
rs2.close
Set rs2 = Nothing
Next i
End With
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
/
MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 07 May 2016 20:36
Date: Sat, 07 May 2016 20:36
44 lines
2478 bytes
2478 bytes
kolejne poprawki:
Sub Strzelcy_memo()
Dim rs AS Recordset, rs2 As Recordset
Dim sListaStrzelcow As String
Dim sIDMeczu As String
Dim db AS Database
Dim sSQL As String, sSQL1mecz As String
Dim i As Integer, j As Integer
Set db = CurrentDB
sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;"
Set rs = db.OpenRecordset(sSQL)
For i = Min(rs.IDmeczu) to Max(rs.IDmeczu)
sIDMeczu = rs.IDmeczu
sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = '" & .IDmeczu & "' ORDER BY IDbramki;"
Set rs2 = db.OpenRecordset(sSQL1mecz)
With rs2
For j = 1 to Max(.IDbramki)
If j = 1 Then
sListaStrzelcow = .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
Else
sListaStrzelcow = sListaStrzecow & CrLf & .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
End IF
Next j
End With
rs2.close
Set rs2 = Nothing
Next i
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
/
MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 07 May 2016 20:58
Date: Sat, 07 May 2016 20:58
40 lines
2648 bytes
2648 bytes
po poprawkach:
Sub Strzelcy_memo()
Dim rs AS Recordset, rs2 As Recordset
Dim sListaStrzelcow As String
Dim sIDMeczu As String
Dim db AS Database
Dim sSQL As String, sSQL1mecz As String
Dim i As Integer, j As Integer
Set db = CurrentDB
sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;"
Set rs = db.OpenRecordset(sSQL)
'For i = Min(rs.IDmeczu) to Max(rs.IDmeczu)
Do while rs.EOF
sIDMeczu = CStr(rs.IDmeczu)
sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;"
Set rs2 = db.OpenRecordset(sSQL1mecz)
With rs2
For j = 1 to Max(.IDbramki)
If j = 1 Then
sListaStrzelcow = .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
Else
sListaStrzelcow = sListaStrzecow & CrLf & .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko
End IF
Next j
End With
rs2.close
Set rs2 = Nothing
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 07 May 2016 21:02
Date: Sat, 07 May 2016 21:02
43 lines
2569 bytes
2569 bytes
Sub Strzelcy_memo() Dim rs AS Recordset, rs2 As Recordset Dim sListaStrzelcow As String Dim sIDMeczu As String Dim db AS Database Dim sSQL As String, sSQL1mecz As String Dim i As Integer, j As Integer Set db = CurrentDB sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;" Set rs = db.OpenRecordset(sSQL) rs.MoveFirst Do while rs.EOF sIDMeczu = CStr(rs.IDmeczu) sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;" Set rs2 = db.OpenRecordset(sSQL1mecz) With rs2 For j = 1 to Max(.IDbramki) If j = 1 Then sListaStrzelcow = .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko Else sListaStrzelcow = sListaStrzecow & CrLf & .IDbramki & Chr(32) & Chr(44) & .wynik & Chr(32) & Chr(44) & .imię & Chr(32) & .nazwisko End IF Next j End With rs2.close Set rs2 = Nothing rs.MoveNext Loop rs.Close Set rs = Nothing Set db = Nothing End Sub
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sun, 08 May 2016 12:11
Date: Sun, 08 May 2016 12:11
57 lines
2856 bytes
2856 bytes
wersja w której założyłem, że w raporcie będą pola: txtIDmeczu pole tekstowe i memStrzelcy typu memo Poniżej jeszcze kilka poprawek: Sub Strzelcy_memo() Dim rs AS Recordset, rs2 As Recordset Dim sListaStrzelcow As String Dim sIDMeczu As String Dim db AS Database Dim sSQL As String, sSQL1mecz As String Dim j As Integer Set db = CurrentDB sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;" Set rs = db.OpenRecordset(sSQL) rs.MoveFirst Do while rs.EOF sIDMeczu = CStr(rs.IDmeczu) sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;" Set rs2 = db.OpenRecordset(sSQL1mecz) With rs2 For j = 1 to Max(.IDbramki) If j = 1 Then sListaStrzelcow = .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko Else sListaStrzelcow = sListaStrzecow & vbCrLf & .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko End IF Next j End With rs2.close Set rs2 = Nothing Me!txtIDmeczu = sIDMeczu Me!memStrzelcy = sListaStrzelcow rs.MoveNext Loop rs.Close Set rs = Nothing Set db = Nothing End Sub
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sun, 08 May 2016 13:38
Date: Sun, 08 May 2016 13:38
57 lines
3008 bytes
3008 bytes
Dodatkowo wzięte pod uwagę że może być mecz (IDmeczu istnieje) bez strzelonych bramek. Sub Strzelcy_memo() Dim rs AS Recordset, rs2 As Recordset Dim sListaStrzelcow As String Dim sIDMeczu As String Dim db AS Database Dim sSQL As String, sSQL1mecz As String Dim j As Integer Set db = CurrentDB sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;" Set rs = db.OpenRecordset(sSQL) rs.MoveFirst Do while rs.EOF sIDMeczu = CStr(rs.IDmeczu) sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;" Set rs2 = db.OpenRecordset(sSQL1mecz) With rs2 If Max(.IDbramki) = 0 Then sListaStrzelcow = "Nie strzelono bramek" Else For j = 1 to Max(.IDbramki) If j = 1 Then sListaStrzelcow = .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko Else sListaStrzelcow = sListaStrzecow & vbCrLf & .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko End If Next j End If End With rs2.close Set rs2 = Nothing Me!txtIDmeczu = sIDMeczu Me!memStrzelcy = sListaStrzelcow rs.MoveNext Loop rs.Close Set rs = Nothing Set db = Nothing End Sub / MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sun, 08 May 2016 14:14
Date: Sun, 08 May 2016 14:14
61 lines
2926 bytes
2926 bytes
Coś było nie tak z tą 2-gą pętelką Teraz jest OK: Sub Strzelcy_memo() Dim rs AS Recordset, rs2 As Recordset Dim sListaStrzelcow As String Dim sIDMeczu As String Dim db AS Database Dim sSQL As String, sSQL1mecz As String Set db = CurrentDB sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;" Set rs = db.OpenRecordset(sSQL) rs.MoveFirst Do while rs.EOF sIDMeczu = CStr(rs.IDmeczu) sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;" Set rs2 = db.OpenRecordset(sSQL1mecz) rs2.MoveFirst Do While rs2.EOF With rs2 If .IDbramki = 1 Then sListaStrzelcow = .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko Else sListaStrzelcow = sListaStrzecow & vbCrLf & .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko End If End With rs2.MoveNext Loop rs2.close Set rs2 = Nothing Me!txtIDmeczu = sIDMeczu Me!memStrzelcy = sListaStrzelcow rs.MoveNext Loop rs.Close Set rs = Nothing Set db = Nothing End Sub Pozdrawiam / MF
Re: Dane z kilku rekordów w jednym polu
Author: affix - Marek
Date: Fri, 20 May 2016 06:20
Date: Fri, 20 May 2016 06:20
10 lines
2220 bytes
2220 bytes
Przyznaję, że nie jestem "orzłem" w Access'ie lub VBA i dlatego coś mi nie wychodzi. Mam pytania: - Czy to działa tylko w raporcie czy także w formularzu? - Czy powyższej procedury powinienem użyć jako funkcji czy też oprogramować zdarzenie (przy ładowaniu, przy otwarciu, przy bierzącym...) Przy okazji (nie wiem czy to ma znaczenie) pracuję na Access'ie 2003. Pozdrawiam MW
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Fri, 20 May 2016 11:26
Date: Fri, 20 May 2016 11:26
21 lines
2669 bytes
2669 bytes
> > - Czy powyższej procedury powinienem użyć jako funkcji czy też oprogramować zdarzenie (przy ładowaniu, przy otwarciu, przy bierzącym...) Rozwijając jeszcze projekt to ja umiałbym tak (prośba do Mistrza Zbigniewa o potwierdzenie) Możesz wywołać procedurę pod przyciskiem. 1. Należy utworzyć tabelkę tymczasową np. tblStrzelcyRaport (txtIDMeczu, txtStrzelcy) 2. Przed otwarciem rs wyczyścić tabelkę 3. Dodać kolejno do pól txtIDMeczu i txtStrzelcy dane z powyższej pętelki (dodawać rekordy rekordy do tabelki przy każdej kolejnej wartości rs.IDMeczu) 4. Wywołać raport oparty na tabelce Wszystko mogłoby być pod jednym przyciskiem na formularzu. Pozdrawiam / MF Ps. Być może ktoś podpowie jak wyplotować raport bez tabelki tymczasowej
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Fri, 20 May 2016 11:55
Date: Fri, 20 May 2016 11:55
71 lines
3818 bytes
3818 bytes
Prosimy Mistrza Zbigniewa o opinie.
Chyba teraz masz gotowca:
Przycisk ma nazwę btnStrzelcy_memo - pod przyciskiem kod
Private Sub btnStrzelcy_memo()
Dim rs AS Recordset, rs2 As Recordset, rsTbl As Recordeset
Dim sListaStrzelcow As String
Dim sIDMeczu As String
Dim db AS Database
Dim sSQL As String, sSQL1mecz As String
Set db = CurrentDB
'wyczyść tabelkę tymczsową tblStrzelcyTemp(pola: txtIDmeczu, memStrzelcy)
db.Execute (Delete * From tblStrzelcyTemp)
sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;"
Set rs = db.OpenRecordset(sSQL)
rs.MoveFirst
Do while rs.EOF
sIDMeczu = CStr(rs.IDmeczu)
sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;"
Set rs2 = db.OpenRecordset(sSQL1mecz)
rs2.MoveFirst
Do While rs2.EOF
With rs2
If .IDbramki = 1 Then
sListaStrzelcow = .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko
Else
sListaStrzelcow = sListaStrzelcow & vbCrLf & .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko
End If
End With
rs2.MoveNext
Loop
rs2.close
Set rs2 = Nothing
Set rsTbl = db.OpenRecordset("tblStrzelcyTemp")
With rsTbl
rsTbl.AddNew
!txtIDmeczu = sIDMeczu
!memStrzelcy = sListaStrzelcow
rst.Update
.Close
End With
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
'raport rprStrzelcy jest raportem ciągłym opartym na tabeli tblStrzelcyTemp
DoCmd.OpenReport "rptStrzelcy", acViewNormal
End Sub
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Fri, 20 May 2016 12:03
Date: Fri, 20 May 2016 12:03
22 lines
2257 bytes
2257 bytes
Poprawki:
db.Execute ("Delete * From tblStrzelcyTemp")
i
Set rsTbl = db.OpenRecordset("tblStrzelcyTemp")
With rsTbl
rsTbl.AddNew
!txtIDmeczu = sIDMeczu
!memStrzelcy = sListaStrzelcow
rsTbl.Update
.Close
End With
Najważniejszym błedem był rs.Update ma być rsTbl.Update
/
MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 21 May 2016 11:54
Date: Sat, 21 May 2016 11:54
19 lines
2329 bytes
2329 bytes
> > - Czy to działa tylko w raporcie czy także w formularzu? > Możesz utworzyć Formularz oparty na tabeli tblStrzelcy (np. frmStrzelcy) lub Raport tak jak podałem poprzednio Wtedy na końcu DoCmd.OpenReport "rptStrzelcy" zastąp DoCmd.OpenForm "frmStrzelcy" Jeżeli chodzi o tabelke tblStrzelcy to musisz ją najpierw utworzyć ja założyłem że będzie mieć pola: txtIDmeczu typu tekst i memStrzelcy typu Nota Pozdrawiam / MF
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 21 May 2016 11:55
Date: Sat, 21 May 2016 11:55
22 lines
2514 bytes
2514 bytes
W dniu sobota, 21 maja 2016 13:54:16 UTC+2 użytkownik MaciejF napisał: > > > > - Czy to działa tylko w raporcie czy także w formularzu? > > > > Możesz utworzyć Formularz oparty na tabeli tblStrzelcy (np. frmStrzelcy) > lub > Raport tak jak podałem poprzednio > > Wtedy na końcu DoCmd.OpenReport "rptStrzelcy" > zastąp DoCmd.OpenForm "frmStrzelcy" > > > Jeżeli chodzi o tabelke tblStrzelcy > to musisz ją najpierw utworzyć ja założyłem że będzie mieć pola: > txtIDmeczu typu tekst i memStrzelcy typu Nota > > Pozdrawiam > / > MF Chodziło mi o tabelkę o nazwie tblStrzelcyTemp
Re: Dane z kilku rekordów w jednym polu
Author: MaciejF
Date: Sat, 21 May 2016 15:00
Date: Sat, 21 May 2016 15:00
77 lines
4113 bytes
4113 bytes
<>
Najpierw w swojej bazie musisz założyć tabelę tblStrzelcyTemp(pola: txtIDmeczu typ tekst, memStrzelcy typu nota)
<>
Poprawiony kod poniżej
Private Sub btnStrzelcy_memo_Click()
Dim rs AS Recordset, rs2 As Recordset, rsTbl As Recordeset
Dim sListaStrzelcow As String
Dim sIDMeczu As String
Dim db AS Database
Dim sSQL As String, sSQL1mecz As String
Set db = CurrentDB
'wyczyść tabelkę tymczsową tblStrzelcyTemp(pola: txtIDmeczu typ tekst, memStrzelcy typu nota)
db.Execute ("DELETE * FROM tblStrzelcyTemp")
sSQL = "SELECT DISTINCT IDmeczu FROM tblBramki ORDER BY IDmeczu;"
Set rs = db.OpenRecordset(sSQL)
rs.MoveFirst
Do while rs.EOF
sIDMeczu = CStr(rs.IDmeczu)
sSQL1mecz = "SELECT * FROM tblBramki WHERE IDmeczu = " & rs.IDmeczu & " ORDER BY IDbramki;"
Set rs2 = db.OpenRecordset(sSQL1mecz)
rs2.MoveFirst
Do While rs2.EOF
With rs2
If .IDbramki = 1 Then
sListaStrzelcow = .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko
Else
sListaStrzelcow = sListaStrzelcow & vbCrLf & .IDbramki & Chr(44) & Chr(32) & .wynik & Chr(44) & Chr(32) & .imię & Chr(32) & .nazwisko
End If
End With
rs2.MoveNext
Loop
rs2.close
Set rs2 = Nothing
'dodawanie rekordów do tabelki tblStrzelcyTemp
Set rsTbl = db.OpenRecordset("tblStrzelcyTemp")
With rsTbl
.AddNew
!txtIDmeczu = sIDMeczu
!memStrzelcy = sListaStrzelcow
.Update
.Close
End With
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
'raport rptStrzelcy jest raportem ciągłym opartym na tabeli tblStrzelcyTemp
DoCmd.OpenReport "rptStrzelcy", acViewNormal
End Sub
/
MF
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads