Hej jag behöver hjälp! Hej Andreas! Jag antar att första frågan: Hej Andreas! Skulle hjälpa om du förklarada datastrukturen och gav lite exempeldata. Hej Anderas! Jag testade i Access. Hej och tack för hjälpen Andreas! Underfrågor kan hjälpa dig. Hej! Vad vill du göra? Tabellen Tek innehåller ju ingen kolumn som heter day: Tek.day. Hej!Select sats i rs
Jag vill att detta skall funka men får inte till det med ett rs bara.
Select id, nr, namn from tabell1 where typ = '" & txttyp & "'"
Select tid from tabell2 where datum = '" & txtdate & "'"
Skall kopplas ihop och visas i en listview
Kör i vb6 mott Access 2002.
/Tobbe Sv:Select sats i rs
Det förhållande som finns i mellan Tabellerna är ett ID_No som är lika i båda.
Jag vill sortera ut en tid för aktuellt datum på en person och visa detta i en listview.
Tiderna ligger i en tabell och namn id_no ligger i en annan tabell på samma databas.
TobbeSv: Select sats i rs
SELECT id, nr, namn
FROM tabell1
WHERE typ = @typ
Är till för att populera en lista eller något för att visa urvalet av person man kan välja.
Andra frågan bör innehålla ID_No
SELECT tid
FROM tabell2
WHERE datum = @date AND ID_No = @Id
Där parametern @Id tilldelas värdet från vald person?
Eller skall en lista över samtliga personer av typen @Typ visas
SELECT tabell1.id, tabell1.nr, tabell1.namn, tabell2.tid
FROM tabell1 LEFT JOIN
tabell2 ON (tabell1.id = tabell2.ID_No) AND (tabell2.datum = @date)
WHERE tabell1.typ = @typ
Denna fråga listar samtliga personer av typen @typ och deras tid för datumet. Saknar det tid är värdet null i kolumen tid.
Sv:Select sats i rs
Försökte få till något sådant men får felmess Run_time error '3296' kopplingsuttryck stöds inte
Set rs = dbs.OpenRecordset("SELECT Tek.id, Tek.nr, Tek.namn Tek,Tid, BTek.Total" & _
" FROM Tek LEFT JOIN" & _
" BTek ON (Tek.nr = BTek.nr) AND (BTek.datum = '" & LblDate & "')" & _
" WHERE Tek.nr = '" & txtnr & "'", dbOpenSnapshot)
Är jag helt ute och cycklar eller
Tabell Tek
ID
Nr
Namn
Tid
Tabell BTek
ID
Nr
Total
Datum
Redovisa i listview
ID Nr Namn Total (efter valt datum)
Kör VB6 och DAO 3,6 och Access 2002
/TobbeSv: Select sats i rs
SELECT Tek.id, Tek.nr, Tek.namn, Tek.Tid, BTek.Total
FROM Tek LEFT JOIN
BTek ON (Tek.nr = BTek.nr AND BTek.datum = @Date)
WHERE Tek.nr = @nr
Jag tycker det är bättre att använda QueryDef:
Dim dbs As DAO.Database
Dim QDef As DAO.QueryDef
Dim rs As DAO.Recordset
Const sql As String = _
"PARAMETERS @nr int, @date datetime;" + vbCrLf + _
"SELECT Tek.id, Tek.nr, Tek.namn, Tek.Tid, BTek.Total" + vbCrLf + _
"FROM Tek LEFT JOIN" + vbCrLf + _
" BTek ON (Tek.nr = BTek.nr AND BTek.datum = @Date)" + vbCrLf + _
"WHERE Tek.nr = @nr"
Set dbs = CurrentDb()
Set QDef = dbs.CreateQueryDef("", sql)
QDef.Parameters("nr") = txtnr
QDef.Parameters("Date") = LblDate
Set rs = QDef.OpenRecordset(dbOpenSnapshot)
Slipper du tänka på SQL inject.
Sv:Select sats i rs
Förlåt om jag inte fattar något av det du skrev om att använda QueryDef men har inte använt detta förut nytt för mig, men satt och testade ditt förslag som säkert funkar men undrar hur man ska ange sökvägen till databasen.
Får ta en riktig djupdykning i detta om det är bättre och snabbare.
Har letat som en liten gris om detta men hittar inget.
Hälsningar
Tobbe Sv: Select sats i rs
Ersätt bara raden:
Set dbs = CurrentDb()
Med:
Set dbs = OpenDatabase("Sökväg till databasen, Här!")
Sv:Select sats i rs
Vart ju ski-bra när man gör rätt.
Nu håller jag på och skall summera BTek.Total mot @nr och @Date.
"PARAMETERS @nr int, @date datetime;" + vbCrLf + _
"SELECT Tek.id, Tek.nr, Tek.namn, Tek.Tid, sum(BTek.Total) as isum" + vbCrLf + _
"FROM Tek LEFT JOIN" + vbCrLf + _
" BTek ON (Tek.nr = BTek.nr AND BTek.datum = @Date)" + vbCrLf + _
"WHERE Tek.nr = @nr"
Men får då Run_time error '3122'
Du försökte köra en fråga med en mängdfuntion som inte innehöll det angivna uttrycket 'id'
Kul och lära sig något nytt.
Men får det att funka med bara en fråga med jag vill ju ha det som ovan.
"PARAMETERS @date datetime;" + vbCrLf + _
"SELECT BTek.namn, sum(BTek.PerTotal)as iSum " + vbCrLf + _
"FROM BTek Where BTek.datum = @Date"
:-) TobbeSv: Select sats i rs
Testa:
"PARAMETERS @nr int, @date datetime;" + vbCrLf + _
"SELECT Tek.id, Tek.nr, Tek.namn, Tek.Tid, Sub.isum" + vbCrLf + _
"FROM Tek LEFT JOIN" + vbCrLf + _
" (SELECT BTek.nr, sum(BTek.Total) as isum" + vbCrLf + _
" FROM BTek" + vbCrLf + _
" WHERE BTek.datum = @Date" + vbCrLf + _
" GROUP BY BTek.nr) As Sub ON Tek.nr = Sub.nr" + vbCrLf + _
"WHERE Tek.nr = @nr"
Sv: Select sats i rs
Varför funkar inte det inte att tilldela day ett värde i select strängen? markera man day i select så visar den värdet day="day5" men får felkod.
Run_time error '3061' För få parametrar angavs. 3 förväntades.
Dim day as string
dim X as integer
X = Weekday(MonthView1.Value, vbMonday)
day = "day" & X
"PARAMETERS @nr int, @date datetime;" + vbCrLf + _
"SELECT Tek.id, Tek.nr, Tek.namn, Tek.Tid, Tek.day, Sub.isum" + vbCrLf + _
"FROM Tek LEFT JOIN" + vbCrLf + _
" (SELECT BTek.nr, sum(BTek.Total) as isum" + vbCrLf + _
" FROM BTek" + vbCrLf + _
" WHERE BTek.datum = @Date" + vbCrLf + _
" GROUP BY BTek.nr) As Sub ON Tek.nr = Sub.nr" + vbCrLf + _
"WHERE Tek.nr = @nr"
:-/TobbeSv:Select sats i rs
Hur anropar du SQL satsen? Du måste ju ange värde för @Date och @nr.Sv: Select sats i rs
Jo tabellen Tek innehåller 7 st fält som heter day1 tom day7 där lagras tider per dag mån tom sön.
Jag gorde så här men inte den bästa lösningen.
MousePointer = vbHourglass
lsvMek1.ListItems.clear
Dim dbs As DAO.Database
Dim QDef As DAO.QueryDef
Dim rs As DAO.Recordset
Dim ObjLsv, i
Dim vntTemp
Dim X As Integer
Dim day As String
MakeTek
Const SQL As String = _
"PARAMETERS @Avd text, @date datetime;" + vbCrLf + _
"SELECT Tek.id, Tek.nr, Tek.name, Tek.Kat, Tek.day1, Tek.day2, Tek.day3, Tek.day4, Tek.day5, Tek.day6, Tek.day7, Sub.isum" + vbCrLf + _
"FROM Tek LEFT JOIN" + vbCrLf + _
" (SELECT BTek.nr, sum(BTek.Total) as isum" + vbCrLf + _
" FROM BTek" + vbCrLf + _
" WHERE BTek.datum = @Date" + vbCrLf + _
" GROUP BY BTek.Anstnr) As Sub ON Tek.nr = Sub.Anstnr" + vbCrLf + _
"WHERE Tek.Avd = @avd"
Set dbs = OpenDatabase(sDataS2kb, False, False, _
";pwd=data@wd")
Set QDef = dbs.CreateQueryDef("", SQL)
QDef.Parameters("date") = LBLDATE
QDef.Parameters("Avd") = lblAvd
Set rs = QDef.OpenRecordset(dbOpenSnapshot)
Debug.Print "Dag = " & day
X = Weekday(MonthView1(0).Value, vbMonday)
day = "day" & X
Do Until rs.EOF
Set ObjLsv = lsvMek1.ListItems.Add()
ObjLsv.Text = rs.Fields("Id").Value & vbNullString
ObjLsv.SubItems(1) = rs.Fields("nr").Value & vbNullString
ObjLsv.SubItems(2) = rs.Fields("Name").Value & vbNullString
ObjLsv.SubItems(3) = rs.Fields("Kat").Value & vbNullString
ObjLsv.SubItems(4) = rs.Fields("iSum").Value & vbNullString
ObjLsv.SubItems(5) = rs.Fields(day).Value & vbNullString
Set ObjLsv = Nothing
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
dbs.Close
Set dbs = Nothing
:-) Tobbe