Har bl a två tabeller. T-CDTitlar med CDid som räknare, Sätt kontrollkälla till: Nja, nu får jag den att räkna alla spår. SELECT [T-CDTitlar].CDid, COUNT([T-Sångtitlar].CDid) As AntalSpår Aha, jag missuppfattade dej där... Hur vet du i vilken ordning låtarna kommer på skivan? är det inte lämpligt att spara vilket spår låten har på skivan istället? Tyvärr Andreas så måste jag säga att det är första gången som dina koder går snett, dessa script ger samma resultat, dvs räknar ihop totalsumman. >Skall man inte på något sätt kunna få fram hur många rader underformuläret genererar? Ok jag skall försöka att beskriva lite närmare. Hur bestämmer du ordningen av sång titlar? Den sorteras efter Spår(räknare) Det är svårt att lägga in det i ett contioues form. >Om det hade varit ASP t ex så hade detta varit en bagis, men nu kör jag in i vägen. Mäniskan har inget spårnummer fär songtitlarna. Han vill ha med det i resultatet eller på annat sätt visa det i formulär, datasheet eller listruta. Inte vidare "snyggt", men om du sätter datakällan i underformuläret till detta borde det fungera... Tack JohanD fungerar bra. Nu börjar det att fungera fint, men en bug kom till. Du kan istället använd en funktion för en underfråga. Använder följande fråga i ditt formulär:<br> Hej Andreas. Jo, jag ville ju att den skulle räkna antal spår per cd, men den räknar ALLT. JAg ska inte klandra dig. Du har mycket kvara at lära dig. Men du har inte angivt namnet på primärnyckeln(ränkaren) i T-Sångtitlar tabellen. Jag använde då ett eget namn som jag antog att den hade. Tack Andreas, nu fungerar det som tänkt.Räknar Spår i en CD-databas
T-Sångtitlar med Spår som räknare, och CDid som främmande nyckel till T-CDTitlar.
I huvudformuläret byggs upp kring T-CDTitlar, underformuläret byggs upp runt T-Sångtitlar.
Jag skulle nu vilja ha en "räknare" som för varje cd räknar spåren (1,2,3 osv)
Jag har försökt på alla vis (men inte det rätta).
Någon?Sv: Räknar Spår i en CD-databas
=DAntal("CDid";"[T-Sångtitlar]";"CDid=" & CDid)
/JohanSv: Räknar Spår i en CD-databas
I underformuläret (som är som en tabell) så skulle jag vilja ha det att för första spåret skall han skriva ut "1", andra "2" osv.
Någon lösning?Sv: Räknar Spår i en CD-databas
FROM [T-CDTitlar] LEFT JOIN [T-Sångtitlar] ON [T-CDTitlar].CDid = [T-Sångtitlar].CDid
GROUP BY [T-CDTitlar].CDid
Eller:
SELECT [T-CDTitlar].CDid, (SELECT COUNT(*)
FROM [T-Sångtitlar]
WHERE [T-CDTitlar].CDid = [T-Sångtitlar].CDid) As AntalSpår
FROM [T-CDTitlar] Sv: Räknar Spår i en CD-databas
/JohanSv: Räknar Spår i en CD-databas
Skall man inte på något sätt kunna få fram hur många rader underformuläret genererar?
Det blir ju samma sak som att räkna låtarna. Låtarna kommer ju i en bestämd ordning, som är bestämt av fältet track.
Vad tror ni?Sv: Räknar Spår i en CD-databas
Är inte det precis vad både mitt och Andreas exempel gör, fast på olika sätt? Du får nog komma med mer information om vi har missuppfattat dej...
/JohanSv: Räknar Spår i en CD-databas
I huvudformulöret så finns uppgifterna om
Cd Titel
Artist
osv
I underformuläret (som är som en tabell) så finns
1 EnSångTitel
2 EnAnnanSångTitel
3 EnTredjeSångtitel
osv
När man sen går till nästa CD, så skall numereringen börja om från ett igen.
Förstår ni?Sv: Räknar Spår i en CD-databas
Utgår du från sorteringen av räknaren?
Varför skapar du inget fält för spårnr?Sv: Räknar Spår i en CD-databas
Jag fick för mig att jag inte skulle behöva det, utan att jag skulle kunna göra det i formuläret.
Om det hade varit ASP t ex så hade detta varit en bagis, men nu kör jag in i vägen.
Jag bara tycker att det borde gå....Sv: Räknar Spår i en CD-databas
Skulle kunna gör så att du skapar en naturlig primärnyckel av cdid och spårnummer.
Då kan du sortera och visa spårnummer.Sv: Räknar Spår i en CD-databas
Hur skulle du göra i ASP? Jag har nog fortfarande inte förstått vad du menar...
/JohanSv: Räknar Spår i en CD-databas
Sv: Räknar Spår i en CD-databas
T-Sångtitlar med Spår som räknare, och CDid som främmande nyckel till T-CDTitlar.
SELECT [T-Sångtitlar].*, (SELECT COUNT(*) FROM [T-Sångtitlar] AS a WHERE a.Spår <= [T-Sångtitlar].Spår AND a.CDid = [T-Sångtitlar].CDid) AS Nr FROM [T-Sångtitlar]
/JohanSv: Räknar Spår i en CD-databas
Jag gjorde om lite granna:
<code>
SELECT (SELECT COUNT(*) FROM [T-Sångtitlar] AS a WHERE a.Spår <= [T-Sångtitlar].Spår AND a.CDid = [T-Sångtitlar].CDid) AS Nr, [T-Sångtitlar].Spår, [T-Sångtitlar].Titel, [T-Sångtitlar].ArtistID, [T-Sångtitlar].KatID, [T-Sångtitlar].Speltid, [T-Sångtitlar].CDID
FROM [T-Sångtitlar];
</code>
Nu får jag den ordning som jag vill ha, men två fält vill jag inte visa (Spår och CDID), och det hjälper inte att jag via egenskaperna försöker att dölja dom, dom vissas iallafall. Hur gör jag?
Sen så vill den inta göra olika fält olika breda, hur kan jag fixa det(igen, kan inte ställa det i egenskaperna)?
Tacksam för svar.Sv: Räknar Spår i en CD-databas
Jag använder nu denna frågan som ett underformulär, men nu kan jag inte lägga till nya titlar!!
I vanliga fall, nar jag lägger till ett underformulär, en tabell eller en fråga, så är ju inte det några problem, men nu går det inte längre.
Hur skriver jag om SQL:en, så att jag kan göra det?
<code>
SELECT (SELECT COUNT(*) FROM [T-Sångtitlar] AS a WHERE a.Spår <= [T-Sångtitlar].Spår AND a.CDid = [T-Sångtitlar].CDid) AS Nr, [T-Sångtitlar].[Spår], [T-Sångtitlar].[Titel], [T-Sångtitlar].[ArtistID] AS Artist, [T-Sångtitlar].[KatID] AS Kategori, [T-Sångtitlar].[Speltid], [T-Sångtitlar].[CDID]
FROM [T-Sångtitlar];
</code>
Tacksam för svar.Sv: Räknar Spår i en CD-databas
SELECT [T-Sångtitlar].*, TrackNo([T-Sångtitlar].CDid,[T-Sångtitlar].SpårId) AS TrackNo<br>
FROM [T-Sångtitlar];<br>
<br>
Skapa föjande fråga:<br>
qryTrackNumber<br>
PARAMETERS [pCDid] Long, [pSpårId] Long;<br>
SELECT Count(*) AS [Number]<br>
FROM [T-Sångtitlar]<br>
WHERE [T-Sångtitlar].CDid=[pCDid] AND [T-Sångtitlar].SpårId<=[pSpårId];<br>
<br>
Lägg till följande funktion i en modul:
<code>
Public Function TrackNo(ByVal pCDid As Variant, ByVal pSpårId As Variant) As Variant
Dim db As DAO.Database
Dim QDef As DAO.QueryDef
Dim rs As DAO.Recordset
Set db = CurrentDb
Set QDef = db.QueryDefs("qryTrackNumber")
QDef.Parameters("pCDid") = pCDid
QDef.Parameters("pSpårId") = pSpårId
Set rs = QDef.OpenRecordset(dbOpenForwardOnly)
TrackNo = rs(0)
rs.Close
End Function
</code> Sv: Räknar Spår i en CD-databas
Med risk att jag missförstår.
Först måste jag då skapa följande fråga, som jag sedan använder som grund för underformuläret:
<code>
SELECT [T-Sångtitlar].*, TrackNo([T-Sångtitlar].CDid,[T-Sångtitlar].SpårId) AS TrackNo<br>
FROM [T-Sångtitlar]
</code>
Men här får jag fel:
Jag var tvungen att göra så här:
<code>
SELECT [T-Sångtitlar].*, TrackNo([T-Sångtitlar].CD_id,[T-Sångtitlar].[Spår]) AS TrackNo
FROM [T-Sångtitlar];
nästa var jag tvungen att ändra så här:
PARAMETERS [CD_ID] Long, [SPÅR] Long;
SELECT Count(*) AS [Number]
FROM [T-Sångtitlar];
Slutligen modulen var jag tvungen att ändra till:
Public Function TrackNo(ByVal CD_ID As Variant, ByVal SPÅR As Variant) As Variant
Dim db As DAO.Database
Dim QDef As DAO.QueryDef
Dim rs As DAO.Recordset
Set db = CurrentDb
Set QDef = db.QueryDefs("qryTrackNumber")
QDef.Parameters("CD_ID") = CD_ID
QDef.Parameters("SPÅR") = SPÅR
Set rs = QDef.OpenRecordset(dbOpenForwardOnly)
TrackNo = rs(0)
rs.Close
End Function
</code>
Men det blir fel, han räknar inte bara dom sångtitlar som finns på en CD utan ALLA.
Vad göra?
MSv: Räknar Spår i en CD-databas
Sv: Räknar Spår i en CD-databas
Om du förståt dett skulle du helt enkel bara bytt namn på SpårId till Spår. MEn om du skriver om frågan till att räkna antalet poster. KAn du inte klaga på någon annan än dig själv. ;O)
Så försök med:
qryTrackNumber
PARAMETERS [pCDid] Long, [pSpårId] Long;
SELECT Count(*) AS [Number]
FROM [T-Sångtitlar]
WHERE [T-Sångtitlar].CDid=[pCDid] AND [T-Sångtitlar].Spår<=[pSpårId];Sv: Räknar Spår i en CD-databas
Jo jag vet att jag har en hel del att lära, tror inte att man någonsin lär sig allt om Access och programering.
Dock, jag har/hade namngivit allt, så där var inga missar, även ändrat SpårId till Spår.
Därimot så måste jag sätta mig ner och grunna ut varför detta fungerar som det gör, så att jag kan ta lärdom av det.
Igen tack för din medverkan.