Tip elke dag uit database?

Status
Niet open voor verdere reacties.

Dummy1912

Gebruiker
Lid geworden
26 mrt 2010
Berichten
362
Hallo,

Hoe krijg ik uit de database een Tip
als je je prog start krijg je een form met een tip en als je next klikt de volgende tip

die dus elke dag worden weergeven maar telkens een andere tip?

Dummy1912
 
statisch gezien kan je tabel maken met de dagnummer ervoor en de tip.

Code:
dag = DatePart("y", Now)

select tip where id = dag
 
dus moet ik in de database
een ID autonumber hebben

en een Tip column

of ben ik fout?

Dummy1912


ik probeer deze maar het werkt niet want krijg het 1ste record
Code:
    Public Sub GetTip()
        If EditPass.State = 1 Then EditPass.Close()
        With EditPass
            .Open("select * from TipofDay ", CN, 1, 2)
            .MoveFirst()
            Label39.Text = .Fields("TipDay").Value
            .Fields("TipDay").Value = DatePart("y", Now)
        End With
 
Laatst bewerkt:
De tip van Mighty is een beetje kort door de bocht, want die houdt geen rekening met het aantal tips dat je hebt, en zet de tip ook niet willekeurig op het formulier. Normaliter wil je een verse tip elke keer als je de db opstart, al is dat 5 keer op dezelfde dag. Neem ik tenminste aan dat je dat wel wilt.
Je moet dus om te beginnen afvangen hoeveel tips je hebt staan in de tabel, en je wilt een random nummer uit die tabel ophalen elke keer als het formulier start.
 
ja correct

maar moet natuurlijk als we een andere dag zijn moet hij een andere tip laten zien.

ik heb zo iets al geprobeerd maar werkt niet

Code:
            Dim dt As DateTime = DateTime.Now
            .Open("select * from TipofDay where id='" & Trim(Format(dt.Today, "dd")) & "'", ConBill, 1, 2)
            Label39.Text = .Fields("id").Value ' = txtnew.Text

de ID staat voor datum bv 1 tot 30 of 31

enig idee kan je mij op weg helpen aub OctaFish

dummy1912
 
Voor een volkomen willekeurige tip, en dat zou ik toch doen als ik jou was, want anders krijg je regelmatig dezelfde tips voor je snufferd, heb je deze functie nodig.

Code:
Function Randomizer() As Integer
Static AlreadyDone As Integer
        If AlreadyDone = False Then Randomize: AlreadyDone = True
    Randomizer = 0
End Function

Die roep je dan als volgt aan op je formulier:
Code:
Private Sub Form_Load()
Dim strSQL As String
strSQL = "SELECT TOP 1 [B][COLOR=blue]Tip[/COLOR][/B] FROM [B][COLOR=red]tblTips[/COLOR][/B] " & vbCrLf
strSQL = strSQL & "WHERE (((Randomizer()) = 0)) " & vbCrLf
strSQL = strSQL & "ORDER BY Rnd(IsNull([[B][COLOR="red"]tblTips[/COLOR][/B]].[Id])*0+1)"
With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount = 1 Then Me.[COLOR=blue][B]txtTip[/B][/COLOR] = .Fields("[B][COLOR=blue]Tip[/COLOR][/B]")
End WithEnd Sub
Et voila, elke keer als je het formulier opent, een verse tip!
 
Laatst bewerkt:
bedankt octafish

maar ik gebruik een iets andere structuur dan je hebt gegeven
en krijg een foutmeldingen in men project

dat CurrentDb is not declared.

hoe moet ik deze veranderen zodat het werkt met mijn connect

Code:
        Dim strSQL As String
        strSQL = "SELECT TOP 1 Tip FROM tblTips " & vbCrLf
        strSQL = strSQL & "WHERE (((Randomizer()) = 0)) " & vbCrLf
        strSQL = strSQL & "ORDER BY Rnd(IsNull([tblTips].[Id])*0+1)"
        With CurrentDb.OpenRecordset(strSQL)
 
De tip van Mighty is een beetje kort door de bocht, want die houdt geen rekening met het aantal tips dat je hebt, en zet de tip ook niet willekeurig op het formulier. Normaliter wil je een verse tip elke keer als je de db opstart, al is dat 5 keer op dezelfde dag. Neem ik tenminste aan dat je dat wel wilt.
Je moet dus om te beginnen afvangen hoeveel tips je hebt staan in de tabel, en je wilt een random nummer uit die tabel ophalen elke keer als het formulier start.

klopt deze methode zorgt er voor dat je doormiddel van theoretisch gezien 365 tips van de dagen nodig hebt. Je kan hem altijd randomize , dit zorgt er wel voor dat veel meer tips theoretisch nodig heb. Door in de ondergenoemde bericht aan te geven hoe vaak de tip geweest is kan je aan
 
Waarschijnlijk heb je de ADO 3.6 bibliotheek niet geladen. Via <Extra>, <Verwijzingen> kun je dat controleren. Je kunt uiteraard ook op een andere manier de recordset openen, als je dat wilt.
 
Maar met jouw eigen procedure zou het er zo uit moeten zien:

Code:
Public Sub GetTip()
    strSQL = "SELECT TOP 1 TipDay FROM TipofDay " & vbCrLf
    strSQL = strSQL & "WHERE (((Randomizer()) = 0)) " & vbCrLf
    strSQL = strSQL & "ORDER BY Rnd(IsNull([TipofDay].[Id])*0+1)"
        
    If EditPass.State = 1 Then EditPass.Close()
    With EditPass
        .Open(strSQL, CN, 1, 2)
        If .RecordCount > 0 Then
        Label39.Text = .Fields(0).Value
    End With
End Sub

Wat doet deze regel eigenlijk?
Code:
        .Fields("TipDay").Value = DatePart("y", Now)
Volgens mij probeer je daarmee de Tiptekst te vervangen door het dagwaarde.....
Gelukkig doe je geen .Edit, en eindig je niet met .Update dus er gebeurt niks ;)
 
Laatst bewerkt:
@octafish,

moet ik deze in men database hebben staan of niet

Code:
        strSql = "SELECT[B] TOP 1 TipDay FROM TipofDay[/B] " & vbCrLf
        strSql = strSql & "WHERE ((([B]Randomize[/B]r()) = 0)) " & vbCrLf
        strSql = strSql & "ORDER BY [B]Rnd(IsNull([TipofDay].[Id][/B])*0+1)"

want ik heb enkel Id en Tipday staan

p.s

bedankt voor het omzetten :)
 

Bijlagen

  • 2010-08-10_154027.png
    2010-08-10_154027.png
    17,7 KB · Weergaven: 47
Laatst bewerkt:
In de post van 14:18 begon ik met een Functie die je nodig hebt: Randomizer(). Deze kun je in een nieuwe module zetten, of in een bestaande, maakt niet zoveel uit. Hij zou zelfs op het formulier kunnen. Als de Randomizer in een Moduleblad zet, kun je hem ook in aparte queries gebruiken, wat ik zelf dus regelmatig doe, als ik wat willekeurige records in een voorbeeld tabel wil hebben bijvoorbeeld.
De SQL code heb ik uit je eigen voorbeeld overgenomen, dus die zou moeten kloppen. Zelf gooi ik code voor een Recordset altijd in een variabele, zodat de regel OpenRecordset(strSQL) er wat overzichtelijker uitziet. Het is niet noodzakelijk; je kunt de SQL ook in de OpenRecordset regel zetten als je dat liever doet.
 
@octafish,

ik heb het in een module geplaatst

en zelfs in de database heb ik Randomizer gemaakt

maar toch blijf ik die zelfde fout krijgen?

wat is er dan verkeerd.

Code:
Public Sub GetTip()
        strSql = "SELECT TOP 1 TipDay FROM TipofDay " & vbCrLf
        strSql = strSql & "WHERE (((Randomizer()) = 0)) " & vbCrLf
        strSql = strSql & "ORDER BY Rnd(IsNull([TipofDay].[Id])*0+1)"

        If EditPass.State = 1 Then EditPass.Close()
        With EditPass
            .Open(strSql, CN, 1, 2)
            If .RecordCount > 0 Then
                Label39.Text = .Fields(0).Value
            End If
    End With
 
Kijk eens of de functie het wel in een query doet:

dm tmp
tmp=Inputbox("","",strSQL)
Met <Ctrl>+<C> vervolgens de sql tekst uit de inputbox kopieëren, en in een nieuwe query plakken, waarbij je dus bij het maken van een query geen tabel selecteert, maar gelijk naar de SQL view gaat via <Beeld>, <SQL>

Overigens zou ik de functie alleen in een module plaatsen, en geen twee keer neerzetten; Access heeft het er blijkbaar al moeilijk genoeg mee...
 
In bijgaande db zit op het formulier <Top 10> een knop <Willekeurig Record> die de functie demonstreert.
 

Bijlagen

sorry octafish

maar kan niet goed snappen die database.
die je hebt gestuurd.

en de bovenste code al helemaal niet

wil je nu zeggen dat mijn connectie het niet goed doet dan.

Dummy1912
 
Over welke access versie hebben we het? Want ik herken je foutmelding niet, dus het is zeker geen 2003 melding. En daar is e.e.a. dus wel in gemaakt. Daarom hoopte ik eigenlijk dat mijn voorbeeldje het wel zou doen. Geeft die dezelfde foutmelding?
 
@ octafish,

ik gebruik access 2007

en ik heb je database niet getest enkel overlopen omdat ik het niet begrijp wat ik er moet mee doen.
sorry :(
 
Probeer eerst eens of mijn voorbeeldje werkt, dan zien we daarna wel hoe we het bij jou aan de praat kunnen krijgen :)
Dus je opent de db, opent het formulier <Top 10> en klikt een aantal keer op de knop <Willekeurig Record>. Als het goed is, krijg je verschillende nummers en artikelgroepen te zien in het tekstvak op het formulier.
 
Hallo octafish,

heb het even gedaan dus gestart met access 2007
heb in de table top 10 genomen

krijg een klein kadertje met knop top 10 en knop willekeurig
en een textbox

ik heb aantal meerdere keren op knop willekeurig gedrukt maar er gebeurt niets?

Dummy1912
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan