Du viser ikke hvilke funktioner de ligger - er du sikker på at du har lavet det i vba så der er tilgang til de objekter der har variable dba og rs - at du skiver:
dim ..... om noget der er tildelt værdi (når det skal lukkes ) får mig til at betvivle det.
Nuvel - prøv at anbrige et stop (vba statement stop) før rs.close og - når der skiftes til vba editoren når formen lukkes - træk så 'rs' til watch vindue (det hedder nok noget andet på dansk) - her kan du se at den har noget i sig - i modsat fald står der at den ikke har nogen værdi.
variable i function og sub mm. er lokale varaible der deklareres med DIM - variable der deles mellem functions og/eller subs skal deklares i toppen af modulet med public eller private
Hvad gør jeg så ? Kan de se om jeg har evt fejl i mine koder for DB åbne og lukke? Eller kan de laves bedre?
Det er som om: rs.Close Dba.Close Set rs = Nothing Set Dba = Nothing
Ikke virker ordenligt. Jeg har googlet mig til Access til styring har nogle tælleværker hvor max måske er overskredet. Kan det tænkes, og i så fald hvordan kan jeg så få dem nulstillet?????? Nb Appen er enorm stor ca 150 forme og ca 60 tabeller der fylder 220MB
Det jeg kender til er at en forms datakilde sørger for at tildele klassevariablen recordset værdi - og den bruges af controlelementerne Når formen så lukkes antager jeg at der sker recordset.close
Hvorfor tildeler du variable dba og rs når formen åbnes? - hvad bruges det til?
Hm..... Forstår ikke... De koder jeg indledningsvis har listet, er de rigtige eller kan de optimere. Finde der en kode der effektivt kan stoppe og nulstile databasen, hvorefter den så genstartes på ny
Der er mange forskellige konstellationer men jeg viser som eksempel en typisk nedenfor: Nb: Ofte har jeg koderne liggende i moduler kaldt fra Formene OpenRecordset_Sub og CloseRecordset_Sub er beskrevet i #1
Eksempel: En form med 2-3 sub forme med f.eks en Comboboxe i hændelsen: AfterUpdate:
Option Explicit Option Compare Database
Private Sub PO_AfterUpdate()
CurrentDb.Execute "INSERT INTO Firma_Produkter([Linie],.......... LinieId = DMax("LinieId", "Firma_Produkter")
SQL = "SELECT GruppeId From Gruppe_Struktur WHERE LinieId= " & NiveauOprId Call OpenRecordset_Sub(SQL, Dba, rs, 2) '1=Tabel, 2=SQL query,3=SQL Server If rs.RecordCount > 0 Then Do CurrentDb.Execute "INSERT INTO Gruppe_Struktur([LinieId],[GruppeId]) VALUES(" & LinieId & " ......... rs.MoveNext Loop Until rs.EOF End If Call CloseRecordset_Sub(Dba, rs) . . . SQL = "SELECT Produkt_Gruppe.GruppeId ........... Call OpenRecordset_Sub(SQL, Dba, rs2, 2) '1=Tabel, 2=SQL query,3=SQL Server
If rs2.RecordCount > 0 Then Do FrmPV.Form![Gruppe2].Value = Nz(rs2!GruppeId, 0) rs2.MoveNext Loop Until rs2.EOF End If Call CloseRecordset_Sub(Dba, rs2)
Eftersom du ikke har fået kompileringfejl antager jeg at du kaldt paramerne til de subs eller functions hvis indhold er vist i #1 noget andet end dem du i koden anvender.
'dim' anvendes til lokale variabler - ikke parametre
Princippet for overførsel
sub setvar(var) var="test" end dub
sub usevar() dim myVar call setvar(myVar) debug.print myVar end sub
Du skriver kan ikke kompilere: Nej eksemplet kan ikke men det er jo også kortet ned. Se alle mine ...... Det fulde kan kompileres og kører korrekt i mange varianter masser af steder i appen
Jeg har ingen kodefejl. Det er slet ikke det der er problemet. Hele Appen kører men måske strukturen af DB start og slut kan optimeres så jeg ikke får fejl 3014
Kan det ikke lade sig gøre må jeg konkludere Access ikke kan anvendes til store Applikationer. Nb Min App er på 200Mb koder inklusiv lidt data
Dim SQL As String, Dba As Database, rs As Recordset Set Dba = CurrentDb() Set rs = Dba.OpenRecordset(SQL, dbOpenSnapshot)
DB lukkes på samme form ved:
Dim Dba As Database, rs As Recordset rs.Close Dba.Close Set rs = Nothing Set Dba = Nothing
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.