Jag har med hjälp av Visual Basic’s utvecklingsverktyg Data Report Designer (Project—Add Data Report) gjort rapporter med EN gruppindelning. Detta funkar helt OK! Min första fråga är hur ser koden ut om man vill göra ytterligare en gruppnivå i rapporten? Min andra fråga är hur ser koden ut om man vill lägga in en bild (exvis bitmap) i rapporten? Vad det gäller summering eller dylikt av aggregat i gruppfot, så vill jag minnas att dessa data inte är åtkomliga via kod, som du försöker. Jo, vad det gäller att visa bild i en RptImage i rapporten... Funkade inte den koden du hade? Följande test fungerar då för mig: Jag förstår tyvärr ingenting av ditt resonemang (min kunskapsnivå är kanske för låg). Jag har lagt in din kod men jag får det inte att fungera! Ursäkta mig, lite slarvigt... Rapporten måste ha ewn datakälla när den visas. Angående "gruppindelningar". Ponera följande: för varje Avvikelsekod vill jag lista alla rader i Transaktion, med denna avvikedlse. I DataShape: Tack för dina förslag och synpunkter. Jag förstår att du är proffs på området, jag är bara amatör, varför jag inte riktigt hänger med i dina turer. Hm... angående din önskan om dynamik. Om du menar att visa ett dataurval vid en viss tidpunkt, inga problem. Om du med dynamisk menar att datastrukturen är föränderlig (tabeller och dess fält varierar) är det problem (i alla fall väldans krångligt).Skriva rapporter med VB:s rapportgenerator
Här nedan följer ett enkelt exempel på en rapport med en gruppnivå:
Public cmd As New ADODB.Command
Public Conn As New ADODB.Connection
Public rsTEST As New ADODB.Recordset
Public stDB As String
Public rs1 As New ADODB.Recordset
Public filnamn As String
Sub Command1_Click()
' laddar in bilden i formuläret
filnamn = "C:\VBex\logotype.bmp"
Form1.Picture1 = LoadPicture(filnamn)
End Sub
Sub Command2_Click()
Dim intCtrl As Integer
Dim z As Integer
z = 0
With rptSäljare
.Hide
Set .DataSource = rsTEST
.DataMember = ""
' RAPPORTHUVUD
With .Sections("Section4").Controls
intCtrl = 2
.Item(intCtrl).Caption = Date
' ladda in bilden i rapporten: HUR???
intCtrl = 3
If TypeOf .Item(intCtrl) Is RptImage Then
' .Item(intCtrl).Image = Form1.Picture1
' .Item(intCtrl).Picture = LoadPicture(filnamn)
End If
End With
' GRUPPHUVUD 2 (HUR LÄGGS DATA IN??)
' With .Sections("Section8").Controls
' intCtrl = 1
' If TypeOf .Item(intCtrl) Is RptTextBox Then
' .Item(intCtrl).DataMember = ""
' .Item(intCtrl).DataField = rsTEST.Fields("avdelning").Name
' End If
' End With
' GRUPPHUVUD 1
With .Sections("Section6").Controls
intCtrl = 2
If TypeOf .Item(intCtrl) Is RptTextBox Then
.Item(intCtrl).DataMember = ""
.Item(intCtrl).DataField = rsTEST.Fields("postort").Name
End If
End With
' DETALJER
With .Sections("Section1").Controls
For intCtrl = 1 To .Count
If TypeOf .Item(intCtrl) Is RptTextBox Then
.Item(intCtrl).DataMember = "Command2"
.Item(intCtrl).DataField = rs1(z).Name
z = z + 1
End If
Next intCtrl
End With
' GRUPPFOT 1
With .Sections("Section7").Controls
intCtrl = 2
If TypeOf .Item(intCtrl) Is RptFunction Then
.Item(intCtrl).DataMember = "Command2"
.Item(intCtrl).DataField = rs1(1).Name
End If
End With
' GRUPPFOT 2 (HUR FÅS SUMMAN??)
' With .Sections("Section9").Controls
' intCtrl = 2
' If TypeOf .Item(intCtrl) Is RptFunction Then
' .Item(intCtrl).DataMember = "Command2"
' .Item(intCtrl).DataField = rs1(1).Name
' End If
' End With
' RAPPORTFOT
With .Sections("Section5").Controls
intCtrl = 2
If TypeOf .Item(intCtrl) Is RptFunction Then
.Item(intCtrl).DataMember = "Command2"
.Item(intCtrl).DataField = rs1(1).Name
End If
End With
.Refresh
.Show
End With
End Sub
Sub Form_Load()
' sökvägen till databasen i Access
stDB = "C:\VBex\TEST.mdb"
Conn.Open "Provider=MSDATASHAPE; Data Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= " & stDB & ";"
With cmd
.ActiveConnection = Conn
.CommandType = adCmdText
.CommandText = "SHAPE{SELECT namn,poäng,region,postort" _
& " FROM Säljare" _
& " ORDER BY postort,namn}" _
& " AS Command2 COMPUTE Command2 BY 'region','postort'"
.Execute
End With
With rsTEST
.ActiveConnection = Conn
.CursorLocation = adUseClient
.Open cmd
End With
Set rs1 = rsTEST(0).Value
End SubSv: Skriva rapporter med VB:s rapportgenerator
Antingen får du använda DATAShape språkets funktioner för denna typ av övningar (designern kan generera dem), eller så får du lösa det direkt i SQL'en. Eller en kombination dessa angreppsätt. Det går ju en att komma åt data i en DataReport kontroll av typen Function från DATAShape.
Ett sätt att enkelt skapa olika typer av aggregat är att använda parent-child relationer i Shape, där childen bara är till för att vara underlag åt en summering i parenten.
Hm... uttrycker mig nog oklart. Hoppas det hjälpte något.
/SSv: Skriva rapporter med VB:s rapportgenerator
Private Sub Form_Load()
With DataReport1
Dim ctl As Object
For Each ctl In .Sections(1).Controls
If TypeName(ctl) = "RptImage" Then
Set ctl.Picture = Me.Image1.Picture
End If
Next ctl
.Show
End With
End SubSv: Skriva rapporter med VB:s rapportgenerator
Summering i rapporter med flera gruppnivåer vet jag fungerar, eftersom jag har sett sådana rapporter gjorda med DRD. Det skall gå, men hur ser koden ut?
mvh
Gunnar Sv: Skriva rapporter med VB:s rapportgenerator
Får felmeddelande: Invalid Data Source
mvh
GunnarSv: Skriva rapporter med VB:s rapportgenerator
I mitt exempel hade jag via Properties (PropertyPage) kopplat rapporten mot ett Command objekt jag lagt upp i DataEnvironment'et. Det är enklare om du får projektet... kolla www.systemrequest.se/misc/dataenv.zip
Vad gäller Datareports och DataShape så innehåller de många begränsningar. Har suttit med sura nästlade SQL satser för att komma runt vissa problem.
/SSv: Skriva rapporter med VB:s rapportgenerator
SHAPE {SELECT AvvikelseNr, AvvikelseText FROM Avvikelse} AS Command1 APPEND ({SELECT TransaktionsID, AvvikelseNr FROM Transaktion} AS Command2 RELATE 'AvvikelseNr' TO 'AvvikelseNr') AS Command2
/SSv: Skriva rapporter med VB:s rapportgenerator
Min problematik är ju att DYNAMISKT från Access kunna upprätta rapporter med hjälp av VB-kod.
För att du lättare skall kunna se vad jag menar skulle jag vilja skicka dig en zip-fil, men hur skickar jag den?
mvh
Gunnar
Sv: Skriva rapporter med VB:s rapportgenerator
Vet inte om jag är värst proffesionell, men hur som, shoot. markus.hansson@systemrequest.se
/S