Har ett formulär där man kan välja ett startdatum och ett slutdatum. Nu vill jag att det skrivs ut i en datalist alla datum från start till slut. Den ska nämligen innehålla en beräkning med för varje datum, t.ex.: Du kan väl göra en loop från startdatum till stopdatum och i loopen sätta in datumen i ett dataset du skapat. Vad är det du har i databasen för något som du räknar? Det är msde, procedurer tror jag att jag får skriva Hej!Datum
Välj Datum:
Start 2004-04-01 Slut 2004-04-03
Resultat:
2004-04-01 9
2004-04-02 3
2004-04-03 7
Någon som har en bra idé hur man kan göra?Sv: Datum
Därefter binder du datasetet till datalisten.
Är jag på rätt spår med vad du vill göra?
Vad är det för uträkningar som ska finnas med?
Mvh,
ThomasSv: Datum
Räknar du antalet poster i tabellen som har ett visst datum?
Man kan skriva en fråga som retunerar Datum i ett fält och Antalet poster i ett annat fält...
Sen är det bara att läsa av databasen...
Är det en Access databas?
Mvh,
ThomasSv: Datum
Varje beräkning kommer väl se ut ungefär:
<code>
Function raknaStat1(Byval dat As DateTime)
Dim connectionString As String = "server='(local)'; trusted_connection=true; Database='test'"
Dim sqlConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString As String = "SELECT COUNT([Agent]) FROM [Arende] WHERE ([Oppet].[dat] = @Dat)
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)
sqlCommand.Parameters.Add("@Dat", System.Data.SqlDbType.VarChar).Value = dat
sqlConnection.Open
Dim antal As Object = sqlCommand.ExecuteScalar()
sqlConnection.Close
Return antal
End Function
</code>
Sen i body vore idealet:
datum <% =raknaStat1() %>
Jag vet att det är felaktigt ovan, men ungefär det tänket.Sv: Datum
Här är först en enkel funktion. Den returnerar antalet [Agent]
i intervallet @DateFrom - @DateTo.
Nackdelen är att den får inte med dagar där du inte har någon agent alls.
2003-09-10 4
2003-09-11 0
2003-09-12 7
2003-09-13 5
Kommer alltså inte upp! 2003-09-11 kommer att saknas.
<code>
CREATE PROCEDURE RaknaStat
(@DateFrom datetime, @DateTo datetime)
AS
SELECT [Oppet].[dat], COUNT([Agent]) FROM [Arende]
WHERE [Oppet].[dat] BETWEEN @DateFrom AND @DateTo
GROUP BY [Oppet].[dat]
</code>
Då har du en procedur som är lite mer komplicerad, med den kommer att
returnera allt, även tomma dagar.
<code>
CREATE PROCEDURE RaknaStat
(@DateFrom datetime, @DateTo datetime)
AS
DECLARE @Current datetime
SET @Current = @DateFrom
CREATE TABLE #Results (Datum datetime NOT NULL, Resultat int NOT NULL)
WHILE @Current >= @DateTo
BEGIN
INSERT INTO #Results
SELECT @Current, COUNT([Agent]) FROM [Arende]
WHERE [Oppet].[dat] = @Current
SELECT @Current = @Current + 1
END
SELECT * FROM #Results
DROP TABLE #Results
GO
</code>
Båda två kan du anropa som följer:
<code>
Function raknaStat1(Byval d1 As DateTime, Byval d2 As DateTime) AS SqlDataReader
Dim connectionString As String = "server='(local)'; trusted_connection=true; Database='test'"
Dim sqlConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString As String = "RaknaStat"
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)
sqlCommand.Parameters.Add("@DateFrom", System.Data.SqlDbType.VarChar).Value = d1
sqlCommand.Parameters.Add("@DateTo", System.Data.SqlDbType.VarChar).Value = d2
sqlConnection.Open
Return sqlCommand.ExecuteReader(CommandBehaviour.CloseConnection)
End Function
</code>
(Har inte kollat syntaxen, men principen stämmer för min VB-kod)
/micke