Hejsan jag har lite probelm i VB Hej jag skulle göra så här: Hur gör jag för att köra detta då, om jag vill ha en knapp för att få detta att fungera. För nu händer inget när jag lägger in din kod i ett formulär vet du hur databaser fungerar? japp det ska jag veta :) nu är jag lat och förutsätter att du har en DSN till din databas, någon annan kan säkerligen visa dig hur använder databasen direkt istället. Object variable or With block variable not set har detta i min modul ändrade om sökvägen till databasen till min Con, men nu klagar den på så här har jag det nu oj. Kanon jag fick det att funka, Texten kom i rätt ordning och allt, bara enterslag och sådant jag skulle vilja lägga in mellan Material och dim och sen när en ny kommer. ok. då tittar vi lite närmare på loopen som listar allting.Loop i VB Hjälp sökes
Jag vill göra en loop som tar ut alla min material och sen dimensionerna till dem.
material
----------
MaterialId
Material
Dim
---------
Id
MaterialId
Dim
MaterialId i material är kanske 4 då har alla dimensioner som hör till detta material materialId 4 i tabellen Dim
Vill ha fram Material tex Stål och sen alla dimensioner under det tex så här
Stål
10
50
20
sen vill jag att nästa material ska komma
Järn
20
50
10
osv
Hur skriver jag en loop som gör detta. Har väldiga probelm med detta.
Väldigt tacksam om hjälp kan fås.
AndersSv: Loop i VB Hjälp sökes
Det får bli en Relationsdatabas.
Samm teknik som fakturabehandling.
KundNr motsvara din materialId
Faktura motsvarar dina dimensioner.
Får se vad du får för fler svar ,annars kan jag
skicka ett principexempel. Kör du med ADO eller DAO ?
SvenSv: Loop i VB Hjälp sökes
Sub ListaMaterial(adoCon as ADODB.Connection)
dim rsMat as ADODB.Recordset
dim sLastMaterial as string
rsMat = adoCon.Execute("SELECT m.material, d.dim" & _
" FROM material m, dim d " & _
" WHERE m.materialid = d.materialid " & _
" ORDER BY m.material")
while not rsMat.EOF
'Titta om det är nytt material
if sLastMaterial<>rsMat!material then
debug.print rsMat!material
sLastMaterial = rsMat!material
end if
'Skriv ut dimisionerna
debug.print rsMat!dim
rsMat.MoveNext
wend
rsMat.Close
End SubSv: Loop i VB Hjälp sökes
Sv: Loop i VB Hjälp sökes
vart vill du presentera datat? i en textbox?Sv: Loop i VB Hjälp sökes
Var som helst egentligen kan jag presentera den, men i ett eget formulär i VBSv: Loop i VB Hjälp sökes
lägg till detta under General Declarations:
dim adoCon as ADODB.Connection
i form_load:
adoCon.Open "dsnnamn"
lägg till en textbox på ditt formulär och döp den till txtData, ändra multiline till true och scrollbars till both
lägg till en knapp på ditt formulär och skriv detta i Command1_Click()
ListaMaterial adoCon
Lägg till detta i ditt formulär:
Sub ListaMaterial(adoCon as ADODB.Connection)
dim rsMat as ADODB.Recordset
dim sLastMaterial as string
rsMat = adoCon.Execute("SELECT m.material, d.dim" & _
" FROM material m, dim d " & _
" WHERE m.materialid = d.materialid " & _
" ORDER BY m.material")
while not rsMat.EOF
'Titta om det är nytt material
if sLastMaterial<>rsMat!material then
txtData = txtData & rsMat!material & vbcrlf & vbcrlf
sLastMaterial = rsMat!material
end if
'Skriv ut dimisionerna
txtData = txtData & rsMat!dim & vbcrlf
rsMat.MoveNext
wend
rsMat.Close
End SubSv: Loop i VB Hjälp sökes
Private Sub Form_Load()
adoCon.Open "dsnnamn"
End SubSv: Loop i VB Hjälp sökes
Global Con As ADODB.Connection
Global rst As ADODB.Recordset
Public Enum dbDatabaseType
dbSQLServer = 1
dbOracleServer = 2
dbAccess = 3
End Enum
Public Enum dbRecordsetType
dbOpenastable = 1
dbOpenAsQuery = 2
End EnumSv: Loop i VB Hjälp sökes
rsMat = Con.Execute("SELECT m.material, d.dim" & _
------Sv: Loop i VB Hjälp sökes
Private Sub Command1_Click()
ListaMaterial Con
End Sub
Private Sub Form_Load()
Con.Open "dsnnamn"
End Sub
Sub ListaMaterial(Con As ADODB.Connection)
Dim rsMat As ADODB.Recordset
Dim sLastMaterial As String
rsMat = Con.Execute("SELECT m.material, d.dim" & _
" FROM material m, dim d " & _
" WHERE m.materialid = d.materialid " & _
" ORDER BY m.material")
While Not rsMat.EOF
'Titta om det är nytt material
If sLastMaterial <> rsMat!material Then
txtData = txtData & rsMat!material & vbCrLf & vbCrLf
sLastMaterial = rsMat!material
End If
'Skriv ut dimisionerna
txtData = txtData & rsMat!dim & vbCrLf
rsMat.MoveNext
Wend
rsMat.Close
End SubSv: Loop i VB Hjälp sökes
ändra raden till:
set rsMat = Con.Execute("SELECT m.material, d.dim" & _
sedan ska du byta ut "dsnnamn" mot namnet på din odbc anslutning alternativt att du ansluter mot databasen direkt.Sv: Loop i VB Hjälp sökes
Sv: Loop i VB Hjälp sökes
vbCrLf betyder enter, dvs radmatning.
_ kan användas för att tala om att raden är uppdelad på flera
txtdata = "detta är " & _
" egentligen " & _
" en rad"
är samma sak som
txtdata = "detta är " & " egentligen " & " en rad"
& användas för att lägga ihop flera textsträngar till en, + kan användas, men det blir lite fel med nummer.
txtData = "1" + "2" blir inte "12" som man skulle kunna tro utan istället 3.
txtData = "1" & "2" blir "12"
While Not rsMat.EOF
'Titta om det är nytt material
If sLastMaterial <> rsMat!material Then
'Vi har ett nytt material, skriv in det i textboxen samt två radmatningar
txtData = txtData & rsMat!material & vbCrLf & vbCrLf
'spara detta material för att jämföra med nästa
sLastMaterial = rsMat!material
End If
'Ta innehåller i txtData och lägg till dim och en radmatning
'spara resultatet i txtData
txtData = txtData & " " & rsMat!dim & vbCrLf
rsMat.MoveNext
Wend