Toon posts:

Access - maak en vul tabel probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo

Ik heb een tabel gemaakt die als standaard dient voor andere tabellen,
deze tabel bestaat uit de volgende kolommen : NR, O1, Onderdeel, Serienummer, Datum, Oorzaak, Oplossing. Nu zijn de velden NR, O1 en Onderdeel al ingevuld want deze zijn standaard, en dit gaat ook met de module die ik heb. Nou zit het probleem dat ik nu bij het maken van een tabel het serienummer en datum bij alle records wil invoeren, maar ik weet niet wat ik daarvoor moet veranderen in mijn code bij de module. Nou heb ik de volgende module gemaakt die ik oproep via een formulier :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Option Compare Database
Option Explicit

Function Create_New_Table(tabelnaam)
'Functie voor aanmaken van een nieuwe controle tabel
'De controle tabel wordt een kopie van de tabel "controle_m"
'De tabel krijgt de naam van het Serienummer van de gekozen turbine
On Error GoTo Create_New_Table_Err


    'tabel maken
    DoCmd.CopyObject "c:\mijn documenten\turbines2\db4.mdb", tabelnaam,  acTable, "controle_m"

'==================================
    Dim connectie As ADODB.Connection
    Dim rsWindturbine As ADODB.Recordset
    Dim strCnn As String
    Dim strID As String
    
    ' Een verbinding openen
    Set connectie = New ADODB.Connection
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\mijn documenten\turbines2\db4.mdb;"
    connectie.Open strCnn
        
    ' Tabel openen
     Set rsWindturbine = New ADODB.Recordset
     rsWindturbine.CursorType = adOpenKeyset
     rsWindturbine.LockType = adLockOptimistic
     rsWindturbine.Open tabelnaam, connectie, , , adCmdTable

    
    'Alleen verdergaan als de gebruiker werkelijk iets heeft ingevoerd
    If (tabelnaam > "") Then
        rsWindturbine.AddNew
        rsWindturbine!serienummer = tabelnaam
        rsWindturbine.AddNew
        rsWindturbine!datum = [Forms]![ntable]![datum]
        rsWindturbine.Update
        End If
    
    rsWindturbine.close
    connectie.close
'==================================

Create_New_Table_Exit:
    Exit Function

Create_New_Table_Err:
    Resume Create_New_Table_Exit

End Function


Ik denk dat het volgende stuk niet klopt maar weet niet hoe wel zou moeten :
code:
1
2
3
4
5
6
7
    If (tabelnaam > "") Then
        rsWindturbine.AddNew
        rsWindturbine!serienummer = tabelnaam
        rsWindturbine.AddNew
        rsWindturbine!datum = [Forms]![ntable]![datum]
        rsWindturbine.Update
        End If

Ik hoop dat iemand weet wat ik moet veranderen, want ik weet het niet

Verwijderd

Ik heb je verhaal nog half gelezen en krijg nu al kippevel :P

code:
1
2
3
4
5
6
7
    If (tabelnaam > "") Then
        rsWindturbine.AddNew
        rsWindturbine!serienummer = tabelnaam
        rsWindturbine.AddNew
        rsWindturbine!datum = [Forms]![ntable]![datum]
        rsWindturbine.Update
      End If

Dit lijkt me beter
code:
1
2
3
4
5
6
    If tabelnaam <> "" Then
        rsWindturbine.AddNew
        rsWindturbine!serienummer = serienummer
        rsWindturbine!datum = [Forms]![ntable]![datum]
        rsWindturbine.Update
      End If

Verwijderd

Ik heb je verhaal nog half gelezen en krijg nu al kippevel :P

code:
1
2
3
4
5
6
7
    If (tabelnaam > "") Then
        rsWindturbine.AddNew
        rsWindturbine!serienummer = tabelnaam
        rsWindturbine.AddNew
        rsWindturbine!datum = [Forms]![ntable]![datum]
        rsWindturbine.Update
      End If

Dit lijkt me beter
code:
1
2
3
4
5
6
    If tabelnaam <> "" Then
        rsWindturbine.AddNew
        rsWindturbine!serienummer = serienummer
        rsWindturbine!datum = [Forms]![ntable]![datum]
        rsWindturbine.Update
      End If

Verder zou ik de test If (tabelnaam > "") Then eerder doen en zou ik currentDB gebruiken.
[edit] ik sta te echo-en :*)
vervang dit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Dim connectie As ADODB.Connection
    Dim rsWindturbine As ADODB.Recordset
    Dim strCnn As String
    Dim strID As String
    
    ' Een verbinding openen
    Set connectie = New ADODB.Connection
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\mijn documenten\turbines2\db4.mdb;"
    connectie.Open strCnn
        
    ' Tabel openen
     Set rsWindturbine = New ADODB.Recordset
     rsWindturbine.CursorType = adOpenKeyset
     rsWindturbine.LockType = adLockOptimistic
     rsWindturbine.Open tabelnaam, connectie, , , adCmdTable

door dit
code:
1
2
3
4
 Dim dbs as database
 Dim rst as Recordset
 Set dbs=currentDB
 Set rst=dbs.openrecordset(tableName)

Verwijderd

Topicstarter
uhm, ik heb het een en het ander verandert zoals jij zei, maar nu werkt het helemaal niet meer.
Ik weet ook even niet meer wat ik wel en niet zou moeten veranderen

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

~~> P&W dan maar :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Dit lijkt me voldoende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function Create_New_Table(tabelnaam)

    DoCmd.CopyObject, tabelnaam, acTable, "controle_m"

    Dim dbs As Database
    Dim rst As Recordset
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(tabelnaam)
    
    rst.AddNew
    rst!serienummer = "12345"
    rst!datum = Date
    rst.Update
    
    rst.Close
    dbs.Close
    Set rst = Nothing
    Set dbs = Nothing

End Function

Verwijderd

Topicstarter
Nu heb ik deze code geprobeerd, maar dit levert hetzelfde resultaat op als bij de module die ik eerst zelf had.
Ik krijg een copy van mijn tabel controle_m, met de velden NR, O1, en Onderdeel ingevuld(in totaal 309), maar bij serienummer en datum staat niks :( :'(

Verwijderd

Nou zit het probleem dat ik nu bij het maken van een tabel het serienummer en datum bij alle records wil invoeren
Wil je alle bestaande records uit de te kopieren tabel die waardes geven of alleen een nieuw record?

[Edit] Dan wordt het een update query op alle records en kun je heel die recordset actie vergeten.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
 ....
    DoCmd.CopyObject, tabelnaam, acTable, "controle_m"

    Dim mySQL as String
    Dim dbs As Database
    Set dbs = CurrentDb

     mySql = "UPDATE " & tabelnaam & " SET Serienummer = 12345, Datum = Date();"
    dbs.Execute mySQL    
    
    dbs.Close
    Set dbs = Nothing
 ....

Verwijderd

Topicstarter
ik wil aan de bestaande records(NR,O1,Onderdeel al ingevuld) een serienummer en datum toevoegen, omdat dit steeds verandert, de rest is voor elke tabel hetzelfde(NR, O1, Onderdeel) en Oorzaak en Oplossing dienen handmatig ingevuld te worden.

Verwijderd

Wat dacht je van:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public sub CreateTable(sTabelNaam as string)

   Dim DB as Database
   Dim sSQL as string

   sSQL="SELECT c.Nr,c.O1," & _
             "'" & sTabelNaam & "' AS Serienummer," & _ 
             "#" & CDate([Forms]![ntable]![datum]) & "# As Datum," & _
             "Oorzaak,Oplossing " & _
             "INTO " & sTabelNaam & " " & _
             "FROM controle_m c "

   Set DB=CurrentDB
   DB.Execute sSQL

End Sub


O ja - ingeval dat een gebruiker niets heeft ingevuld zet je
om de code nog een

Visual Basic .NET:
1
2
3
If len(trim(sTabelNaam))>0 then
      'Tabel maken
End If

Verwijderd

Topicstarter
die doet helemaal niks :S

Verwijderd

wel even testen of ie bestaat
Visual Basic .NET:
1
2
3
4
5
If len(trim(sTabelNaam))>0 then
  If bestaatTabel(TabelNaam) = false then  'eigen functie in modules maken
      'Tabel maken
  End If
End If


Ier, heb je dit nu al geprobeerd?

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
    DoCmd.CopyObject, tabelnaam, acTable, "controle_m"

    Dim mySQL as String
    Dim dbs As Database
    Set dbs = CurrentDb

     mySql = "UPDATE " & tabelnaam & " SET Serienummer = 12345, Datum = Date();"
    dbs.Execute mySQL    
    
    dbs.Close
    Set dbs = Nothing
 

Verwijderd

Uhuh - er zal toch minimaal een fout-melding komen (oid) komen...
:X

Verwijderd

Topicstarter
Verwijderd schreef op 19 November 2002 @ 14:44:
wel even testen of ie bestaat
Visual Basic .NET:
1
2
3
4
5
If len(trim(sTabelNaam))>0 then
  If bestaatTabel(TabelNaam) = false then  'eigen functie in modules maken
      'Tabel maken
  End If
End If


Ier, heb je dit nu al geprobeerd?

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
    DoCmd.CopyObject, tabelnaam, acTable, "controle_m"

    Dim mySQL as String
    Dim dbs As Database
    Set dbs = CurrentDb

     mySql = "UPDATE " & tabelnaam & " SET Serienummer = "12345", Datum = Date();"
    dbs.Execute mySQL    
    
    dbs.Close
    Set dbs = Nothing
 
Sorry had nog niet gezien dat je een eerder bericht geedit had
maar dit werkt ook niet, trouwens Serienummer = "12345" heb ik vervangen door tabelnaam .

Verwijderd

He - Ier,

Ik weet ZEKER!!! dat zowel mijn voorbeeld als dat van underscore12 werkt.
Je zal zelf wel iets fout doen.......

Misschien kun je wat meer info geven dan 'werkt niet....'

Verwijderd

Topicstarter
Verwijderd schreef op 19 November 2002 @ 14:56:
He - Ier,

Ik weet ZEKER!!! dat zowel mijn voorbeeld als dat van underscore12 werkt.
Je zal zelf wel iets fout doen.......

Misschien kun je wat meer info geven dan 'werkt niet....'
Oke, ik zal uitleggen wat er is :
- Bij die van Underscore, kopieert ie de tabel wel, en vult de 'standaard' velden, maar niet de datum en serienummer.

- bij die van hawk, is het probleem, dat wanneer ik hier een function van wil maken en dan op de knop drukt er niks gebeurd echt niks, ik kan drukken maar doet niks


Ik roep de functie aan met de volgende code in een formulier
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub maak_button_Click()
On Error GoTo Err_maak_button_Click
   Dim EersteFout As Boolean
    Dim Knop2 As Boolean
    Dim sn As String
       
    EersteFout = False
    Knop2 = True
        
    If snr.Value > "" Then
        sn = snr.Value
        
    Else
        EersteFout = True
    End If
           
    If EersteFout = True Then
            MsgBox "Geen serienummer ingevuld"
           
            Invoeren = False
          Exit Sub
           Else
                                    
            Create_New_Table (sn)
            
            Exit Sub
            End If
        
Err_maak_button_Click:
Exit Sub

End Sub

Verwijderd

Wat zijn je veldtypen van datum en serienummer?

Verwijderd

Er van uit gaand dat je mijn functie hebt hernoemd naar Create_New_Table, MOET het echt werken (je zal toch in ieder geval een foutmelding moeten krijgen als er iets niet goed is)

Als je een breakpoint zet op de DB.Execute, komt -ie daar dan wel?
En zo ja, druk dan op F8 en typ in het debug-window eens ?Err.Description (+Enter)

Verwijderd

Topicstarter
Wat zijn je veldtypen van datum en serienummer?
Serienummer is tekst -- wordt uit een keuzelijst met invoervak gehaald
Datum is datum -- wordt uit een tekstvak gehaald

Of bedoel je dat niet?
Er van uit gaand dat je mijn functie hebt hernoemd naar Create_New_Table, MOET het echt werken (je zal toch in ieder geval een foutmelding moeten krijgen als er iets niet goed is)

Als je een breakpoint zet op de DB.Execute, komt -ie daar dan wel?
En zo ja, druk dan op F8 en typ in het debug-window eens ?Err.Description (+Enter)
Ik heb jou code nu zo staan in mijn module
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function Create_New_Table(sTabelNaam As String)

   Dim DB As Database
   Dim sSQL As String

   sSQL = "SELECT c.Nr,c.O1," & _
             "'" & sTabelNaam & "' AS Serienummer," & _
             "#" & CDate([Forms]![ntable]![Datum]) & "# As Datum," & _
             "Oorzaak,Oplossing " & _
             "INTO " & sTabelNaam & " " & _
             "FROM controle_m c "

   Set DB = CurrentDb
   DB.Execute sSQL

End Function


Ik weet niet of ik hier nog iets anders mee moet veranderen als ik er een functie van maak

Verwijderd

Bedoel de veldtypen van de tabelvelden.

Verwijderd

Dat ziet er op zich goed uit.
Misschien een domme vraag, maar weet je zeket dat de knop waar je op klikt inderdaad maak_button heet?

Ik heb het hier even letterlijk nagemaakt en het werkt bij mij zonder enige wijziging.

Verwijderd

Topicstarter
serienummer is tekst en datum is datum/tijd

Ik weet zeker dat de knop maak_button heet, omdat wanneer ik de code van underscore12 hier plaats, access wel een tabel aanmaakt alleen de serienummer en datum niet invult.

Verwijderd

Ik heb het nog eens getest en bij mij werkt het.

aanroep: Create_New_Table("Kopie10")

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function Create_New_Table(tabelnaam As String)

     DoCmd.CopyObject , tabelnaam, acTable, "controle_m"

    Dim mySQL As String
    Dim dbs As Database
    Set dbs = CurrentDb

    mySQL = "UPDATE " & tabelnaam & " SET Serienummer = '" & tabelnaam & "', Datum = Date();"
    dbs.Execute mySQL
    
    dbs.Close
    Set dbs = Nothing
 
End Function

Verwijderd

Topicstarter
Verwijderd schreef op 20 november 2002 @ 09:46:
Ik heb het nog eens getest en bij mij werkt het.

aanroep: Create_New_Table("Kopie10")

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function Create_New_Table(tabelnaam As String)

     DoCmd.CopyObject , tabelnaam, acTable, "controle_m"

    Dim mySQL As String
    Dim dbs As Database
    Set dbs = CurrentDb

    mySQL = "UPDATE " & tabelnaam & " SET Serienummer = '" & tabelnaam & "', Datum = Date();"
    dbs.Execute mySQL
    
    dbs.Close
    Set dbs = Nothing
 
End Function
Hey hartstikke bedankt, het werkt nu!!
Ik weet niet of het misschien lag aan dat ik eerst Function Create..... had ipv Public Function Create.... of misschien toch nog iets fouts gedaan met tabelnaam ergens, maarre het werkt, bedankt!

Oh ja Hawk_eye ook zeker bedankt

Verwijderd

Mooi zo! Graag gedaan. Hawk_eye, ook bedankt voor het meedenken.
Pagina: 1