Ik heb een aantal probleempjes met betrekking tot mijn applicatie + database. De database zelf is goed uitgenormaliseerd, geen problemen mee.
Probleem nr. 1
Ik heb in de database een tabel tbl_Templates met de volgende 2 velden:
ID_Template -> Primairy key (autonumber), heeft uiteraard een 1 op veel relatie met een andere tabel.
strNaam -> Naam van de template
Indien het knopje voor een nieuw template ingedrukt wordt gebeurt ongeveer het volgende: een InputBox vraagt voor een naam, controleer eerst in de database of deze al bestaat, zoniet, invoeren. Nu komt het probleem
Ik wil nu de ID_Template hebben. Ik krijg hem ook wel, alleen het duurt even. Ik doe dit nu met het volgende stukje code:
Iets meer uitleg van CDatabase komt verder onderin de post, maar GetValue lijkt me voor zich spreken
ExecuteScalar dus.
Als ik nu een teller laat meelopen in de Do While Loop, staat die aan het eind op rond de 1000
. Het duurt ook een paar seconde voordat ie de ID_Template heeft. Waarschijnlijk ook omdat ie een paarhonderd keer per seconde een query uitvoer. Als ik break op Do While, dus de INSERT van het template naam is net uitgevoerd, moet ik ook ong. 2 seconde wachten voordat ik naar de volgende stap ga (getvalue..). Niet heel boeiend zou je denken, het queryen vertraagt het nu niet veel, maar dit bestand komt zometeen op het netwerk op een share te staan, en dan maakt het (lijkt me) wel veel uit kwa tijd.
Wat ik zelf als oplossing had bedacht is een Timer control met een delay van een halve seconde en bij de timer_Tick die ID_Template opvragen, maar het is me niet gelukt om de timer aan de praat te krijgen. Ik doe vast iets fout maar ik weet niet wat.
Nu zijn mijn vragen mbt tot dit probleem, hoe doe ik dat met die timer en is er misschien een andere manier om de ID op te vragen met ODBC? Uiteraard gaan we niet met Max(id)+1 werken.
Oke, volgende problemen komen in een andere post, tis 4:24, weltruste
ohja hier nog een stukje:
CDatabase -> Regelt alles mbt het mdb bestand
Deze klasse bevat een CONST connectionstring en een OdbcConnection.
Hier een aantal functies uit de klasse:
Hoe ik met tabellen werk:
Voor bijv. de Templates heb ik de volgende 2 klasses:
CTemplates en CTemplate
Een CTemplate bevat uiteraard een 2tal variabelen en properties om de variabellen te setten en getten
Ook een public sub new(byval id_Template as long). Deze sub leest uiteraard de template naam in op basis van die ID_Template dmv van een query.
CTemplates bevat een Collection van CTemplate's en aantal property's om wat met de Collection te kunnen.
Wil ik nu door mijn Templates heen lopen doe ik dat zo:
Probleem nr. 1
Ik heb in de database een tabel tbl_Templates met de volgende 2 velden:
ID_Template -> Primairy key (autonumber), heeft uiteraard een 1 op veel relatie met een andere tabel.
strNaam -> Naam van de template
Indien het knopje voor een nieuw template ingedrukt wordt gebeurt ongeveer het volgende: een InputBox vraagt voor een naam, controleer eerst in de database of deze al bestaat, zoniet, invoeren. Nu komt het probleem
code:
1
2
3
4
| strSQL = "SELECT ID_Template FROM tbl_Templates WHERE strNaam = '" & strResult & "'"
Do While ID_Template = 0
ID_Template = m_objDatabase.GetValue(strSQL)
Loop |
Iets meer uitleg van CDatabase komt verder onderin de post, maar GetValue lijkt me voor zich spreken
Als ik nu een teller laat meelopen in de Do While Loop, staat die aan het eind op rond de 1000
Wat ik zelf als oplossing had bedacht is een Timer control met een delay van een halve seconde en bij de timer_Tick die ID_Template opvragen, maar het is me niet gelukt om de timer aan de praat te krijgen. Ik doe vast iets fout maar ik weet niet wat.
Nu zijn mijn vragen mbt tot dit probleem, hoe doe ik dat met die timer en is er misschien een andere manier om de ID op te vragen met ODBC? Uiteraard gaan we niet met Max(id)+1 werken.
Oke, volgende problemen komen in een andere post, tis 4:24, weltruste
ohja hier nog een stukje:
CDatabase -> Regelt alles mbt het mdb bestand
Deze klasse bevat een CONST connectionstring en een OdbcConnection.
Hier een aantal functies uit de klasse:
code:
1
2
3
4
5
6
7
8
| Public Sub New()
Public Function Execute(ByVal strSQL As String) As Integer
Public Function OpenRecordset(ByVal strSQL As String) As OdbcDataReader
Public Function GetValue(ByVal strSQL As String) As Object
Public ReadOnly Property IsConnected() As Boolean
Public Sub Disconnect()
Public Sub Reconnect()
Public Sub RefreshDatabase() |
Hoe ik met tabellen werk:
Voor bijv. de Templates heb ik de volgende 2 klasses:
CTemplates en CTemplate
Een CTemplate bevat uiteraard een 2tal variabelen en properties om de variabellen te setten en getten
CTemplates bevat een Collection van CTemplate's en aantal property's om wat met de Collection te kunnen.
Wil ik nu door mijn Templates heen lopen doe ik dat zo:
code:
1
2
3
4
5
6
7
8
9
| Dim Templates As New CTemplates
Dim Template As CTemplate
For Each Template in CTemplates.Templates ' waarbij de property .Templates
' uiteraard de Collection van CTemplates Returnt.
With Template
End With
Next |
Wat een onzin..