Avatar billede hnto Nybegynder
07. oktober 2002 - 11:22 Der er 13 kommentarer og
1 løsning

VBA script

Såfremt 200 point ikke er nok skal jeg have hjælp til at defienre denne i sharks forum. eller give de resterende på efterflg. spørgsmål.

Denne er svær at forklare men her kommer den...

Nedenstående er et eksempel!!
Jeg har en tabel med 2 felter. indholdet er som flg.:

FIELD 1        FIELD 2
NSC total    data
test1        10.800
test2        5.000
test3        20.000
NSC F01    data
test1        1.800
test2        350
test3        1.200

Det jeg ønsker er at lave et extra felt hvor indholdet er som flg. :

FIELD 1        FIELD 2        FIELD 3
NSC total    data        NSC total data
test1        10.800        NSC total data
test2        5.000        NSC total data
test3        20.000        NSC total data
NSC F01    data        NSC F01 data
test1        1.800        NSC F01 data
test2        350        NSC F01 data
test3        1.200        NSC F01 data

Idet der er flere end de 2 definerede ”afsnit” skal der enten være mulighed for at oprette en ”afsnit liste” eller jeg skal have mulighed for at udbygge scriptet med extra variabler. Det er ikke altid de starter med NSC… derfor forestiller jeg mig at man definerer sin EOF som en værdi.

Der kan være mindre varianter der skal justeres i scriptet / filen, hvorfor fuld point kun gives til en komplet brugbar løsning.
07. oktober 2002 - 11:38 #1
hej hnto,

Du må have flere felter i din tabel. Hvis du kigger på den øverste tabel; hvordan ved du så om Test1 hører til NSC Total eller til NSC F01?

Hvis man skal lave en funktion, som indsætter Field3, så er man nødt til at sortere tabellen efter et eller andet kriterie. Og hvis man bare sorterer efter Field1, så kommer Test1 til at stå efter hinanden 2 gange....!?

Kan du give lidt flere oplysninger?
Avatar billede terry Ekspert
07. oktober 2002 - 12:07 #2
I agree with Thomas, your going to need som extra fields and I would suggest an extra table for your "afsnit liste”.
07. oktober 2002 - 12:40 #3
ok, hvis vi antger at data er indtastet i den rækkefølge, som de skal ligge, så skal du lave en tabel kaldet "Afsnitliste", som kun har ét felt: "Afsnit" af datatypen Text
Din første tabel hedder "DinTabel"
Lav en forespørgsel, men denne SQL:
SELECT DinTabel.Field1, DinTabel.Field2, DinTabel.Field3, Afsnitliste.Afsnit
FROM DinTabel LEFT JOIN Afsnitliste ON DinTabel.Field1 = Afsnitliste.Afsnit;
Kald forespørgslen for "DinQuery"

Når alt dette er på plads, så vil følgende VBA-funktion opdatere Field3 med de rigtige værdier:
Public Function Opdater_NSC()
    Dim cn As ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim Afsnit As String
    Set cn = CurrentProject.Connection
    rs.Open "DinQuery", cn, adOpenKeyset, adLockOptimistic
   
    Do
        If Not IsNull(rs!Afsnit) Then
            Afsnit = rs!Afsnit
        End If
        rs!Field3 = Afsnit
        rs.MoveNext
    Loop Until rs.EOF
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function

/Thomas
Avatar billede hnto Nybegynder
07. oktober 2002 - 17:16 #4
Thomas:

for at kommentere dit første indlæg :
Hvis du kigger på den øverste tabel; hvordan ved du så om Test1 hører til NSC Total eller til NSC F01?

Det havde jeg forestillet mig løst på en måde der kunne minde om dette her :

Hvis jeg nu kunne definere en tabelafsnitsliste kaldet "afsnit" der indeholdt eks. 3 variabler

field1 i afsnit :

NSC total
NSC F01
HQS 0233

så ville jeg starte et script der i hovedtabellen begyndte at gennelæse field1. jeg kan jo ikke scriptet så her er et forsøg på en tanke:

private sub test()
if me!field1.value <> afsnit!field1.value then
field3.value = null
else
field3.value = afsnit!field1.value
next
end sub

he he... sikkert en gang vås men alligevel. Det der bekymrer mig i mit script eks. er hvordan den kan lave et multiopslag på
afsnit!field1.value idet den jo ikke kun indeholder 1 record. Og såvidt jeg ved er det altid den første record der opslås såfremt andet er definereret. Der skal med andre ord vel være en form for
for-next kommando her med en EOF eller ???
07. oktober 2002 - 18:06 #5
Hvis jeg forstår din semikode korrekt, så mener du nogenlunde det samme som jeg foreslog i mit andet indlæg.

Jeg glemte bare at fortælle at du skulle indtaste NSC total, NSC F01 og HQS 0233 i "Afsnitlisten".

Prøv det engang.....
Avatar billede hnto Nybegynder
08. oktober 2002 - 17:09 #6
jeg tester lige i aften eller i morgen bare så du ikke tror det er glemt....
Avatar billede hnto Nybegynder
08. oktober 2002 - 17:47 #7
den melder fejl på

ADODB

user-defined type not defined


??? er det en registrering af noget med reference registrering eller ?
Avatar billede hnto Nybegynder
08. oktober 2002 - 17:50 #8
ja det var det vist...

nu melder den variable not defined på

CurrentProject ??
Avatar billede hnto Nybegynder
08. oktober 2002 - 18:02 #9
Det ser ud til at access 97 ikke kender denne procedure i sit kartotek.
hvordan fixer vi dette ?
08. oktober 2002 - 21:30 #10
Hej igen,

Jeg gik ud fra, at det var Access 2000/XP.
Men hvis det er '97, så må koden se således ud:

Public Function Opdater_NSC()
    Dim db As Database
    Dim rs As Recordset
    Dim Afsnit As String
    Set db = Currentdb
    Set rs = db.openrecordset("DinQuery", dbopendynaset)
   
    Do
        If Not IsNull(rs!Afsnit) Then
            Afsnit = rs!Afsnit
        End If
        rs!Field3 = Afsnit
        rs.MoveNext
    Loop Until rs.EOF
    rs.Close
    Set rs = Nothing
End Function
Avatar billede hnto Nybegynder
09. oktober 2002 - 08:21 #11
Hmm.

mit modul ser sådan ud.( efter navne er rettet list til )

Public Function Opdater_NSC()
    Dim db As Database
    Dim rs As Recordset
    Dim Afsnit As String
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Q_master", dbOpenDynaset)
   
    Do
        If Not IsNull(rs!Afsnit) Then
            Afsnit = rs!Afsnit
        End If
        rs!Index = Afsnit
        rs.MoveNext
    Loop Until rs.EOF
    rs.Close
    Set rs = Nothing
End Function


fejl på :rs!Index = Afsnit
can't update. Database or object i red only.

NB.
databasen er ikke exclusive åben
Q_Master er Dynaset (Inconsistent Updates)

er det ikke frdi scriptet her forsøger at opdatere en værdi i en tabel ud fra q_master. jeg oplever bare altid at der ved query's med to differente tabeller i denne ikke kan fortages opdatering.

min master tabel hedder T_master i hvilken jeg har lavet et tomt "field3" til updatering af records fradet andet felt. field3 hedder bare "index" istedet fr field3 i min tabel. ( er rettet i scriptet )


hvad gør jeg.?
09. oktober 2002 - 08:34 #12
Hej hnto,

Jeg opdagede en fejl, da jeg ændrede fra '2000- til '97-version. Koden skal derfor se således ud:
Public Function Opdater_NSC()
    Dim db As Database
    Dim rs As Recordset
    Dim Afsnit As String
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Q_master", dbOpenDynaset)
   
    Do
        If Not IsNull(rs!Afsnit) Then
            Afsnit = rs!Afsnit
        End If
        rs.Edit
        rs!Index = Afsnit
        rs.Update
        rs.MoveNext
    Loop Until rs.EOF
    rs.Close
    Set rs = Nothing
End Function

Det kan godt være det, som er fejlen, da DAO-metoden ('97-verionen) kræver at man sætter recordset'et i edit-mode før redigering. Det gør ADO-metoden ikke ('2000-versionen)

Prøv at åbne Q_Master og se om du kan rette direkte i forespørgslen. Hvis du IKKE kan det, så har du ret i, at det er der fejlen ligger. Og derfor skal du åbne tabellen i stedet for forespørgslen.
Avatar billede hnto Nybegynder
09. oktober 2002 - 09:20 #13
efter endnu et par små justeringer virket det perfekt...

thanks...
09. oktober 2002 - 21:51 #14
Selv tak :o)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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