Avatar billede kryster Nybegynder
08. august 2003 - 09:46 Der er 5 kommentarer

database når ikke at blive opdateret før udlæsning

Jeg har en userform i excel med en listbox hvor i jeg loader indholdet af en database med navne.
Hvis jeg dobbelt klikker på et navn loades en ny userform, hvor man kan rette navnet, når der klikkes gem i denne, gemmes det selvfølgelig ned i databasen hvorefter jeg loader indholdet af databasen til listboxen igen, men den tager ikke rettelsen med.
Enten skal jeg klikke på et navn igen og blot forlade det igen uden ændringer eller sætte en lang loop ind inden jeg loader listboxen.
Excel VB burde vil ikke køre videre i koden før en kommando er færdig, er der evt en måde at finde ud af hvornår databasen er! opdateres?

Her er koden til det. cmdSave_Click() er en commandbutton på en userform.
Som når den har gemt ændringer i db kalder refreshowners, men det virker som om db'en ikke er nået og blive opdateret.

Private Sub refreshowners()
  i = 1
  Set Rs = Db.Execute("SELECT * FROM owners ORDER BY name")
  If Not Rs.BOF Then
    Do Until Rs.EOF
      MyArray(i, 0) = Rs("name")
      MyArray(i, 1) = Rs("id")
      i = i + 1
      Rs.MoveNext
    Loop
  End If
  lstOwner.ColumnWidths = "100;0"
  MyArray(0, 0) = "Navn"
  MyArray(0, 1) = "id"
  lstOwner.List() = MyArray
End Sub


Private Sub cmdSave_Click()
  If Not IsEmpty(id) Then
    Db.Execute "UPDATE owners SET name = '" & txtName.Value & "', address = '" & txtAddress.Value & "', postal = '" & txtPostal.Value & "', city = '" & txtCity.Value & "', phone = '" & txtPhone.Value & "', mobile = '" & txtMobile.Value & "', email = '" & txtEmail.Value & "' WHERE id = " & id
  End If
  Unload Me
  Call refreshowners
End Sub
Avatar billede jennemaan Nybegynder
08. august 2003 - 10:51 #1
Vis lige hvordan du instansierer og åbner Db ...

/Jennemaan
Avatar billede kryster Nybegynder
08. august 2003 - 11:56 #2
Disse 2 linier har jeg i starten af hver Sub, hvilket jeg også gerne ville have gjort nemmere så det kun står et sted så man evt kalder en function der åbner databasen.

Set Db = CreateObject("ADODB.Connection")
Db.Open = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & ActiveWorkbook.Path & "\allerupgaard.mdb"

Hvad er instansierer?
Avatar billede jennemaan Nybegynder
08. august 2003 - 12:05 #3
Jeg gætter på at problemet er at den userform du åbner, åbnes modal...

Jeg ville lave en generel refreshoowners (i et separat kodemodul) ala

Sub refreshowners()
  i = 1
  Set Rs = Db.Execute("SELECT * FROM owners ORDER BY name")
  If Not Rs.BOF Then
    Do Until Rs.EOF
      MyArray(i, 0) = Rs("name")
      MyArray(i, 1) = Rs("id")
      i = i + 1
      Rs.MoveNext
    Loop
  End If
  NavnPåFørsteUserForm.lstOwner.ColumnWidths = "100;0"
  MyArray(0, 0) = "Navn"
  MyArray(0, 1) = "id"
  NavnPåFørsteUserForm.lstOwner.List() = MyArray
End Sub

hvor  NavnPåFørsteUserForm er navnet på den userform der har listen...

Og så flytte "Unload Me" til slutningen af cmdSave_Click-eventen.

/Jennemaan
Avatar billede kryster Nybegynder
08. august 2003 - 12:59 #4
Det ser ikke ud til at ændre noget.
Åbnes modal? det betyder, hvordan kan det gøres anderledes?
Avatar billede jennemaan Nybegynder
11. august 2003 - 12:10 #5
prøv lige at sætte et breakpoint i linjen "Call refreshowners".

Mit gæt er at linjen aldrig når at blive udført pga. "unload me"...

Som sagt mener jeg at løsningen er at lave en rutine der refererer den første userform direkte når du opdaterer den, da nummer 2 userform sandsynligvis bliver åbnet modal (dvs. at den skal lukkes før andre forms kan vises/kaldes).

/Jennemaan
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester