Bonjour,

Décidément, mettre à jour une base de données Access depuis Visual Basic n'est pas de tout repos.

J'essaye d'insérer des records dans une table sur base d'une table créée en mémoire.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
52
53
  Function CopyToDB(ByRef tblSource As DataTable, ByVal strDbFile As String) As Boolean
    Dim adapter As OleDbDataAdapter
    Dim connection As New OleDbConnection
    Dim ds As New DataSet
    Dim fi As New FileInfo(strDbFile)
    Dim strConnect As String = ""
    Dim strInsertCommand As String
    Dim strTable As String = ""
    Dim tblDest As DataTable
 
    If Not fi.Exists Then
      MsgBox(String.Format("The file {0} doesn't exist", strDbFile))
      Return False
      Exit Function
    End If
 
    Select Case fi.Extension.ToUpper
      Case ".ACCDB"
 
        strConnect = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Jet OLEDB:Database Password={1};", strDbFile, "ThePassword")
        strTable = "CounterParty"
        connection.ConnectionString = strConnect
 
        Try
          connection.Open()
 
          adapter = New OleDbDataAdapter("SELECT * FROM " & strTable & ";", connection)
          Dim cmdBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
          adapter.Fill(ds)
          tblDest = ds.Tables(0)
 
          strInsertCommand = "INSERT INTO CounterParty (ID, Name, NickName, AccountNumber, AccountCountry) VALUES (?, ?, ?, ?, ?)"
          adapter.InsertCommand = New OleDbCommand(strInsertCommand)
 
          For Each record As DataRow In tblSource.Rows
 
            tblDest.ImportRow(record)
            'Stop
            Debug.Print(String.Join("|", tblDest.Rows(tblDest.Rows.Count - 1).ItemArray))
            adapter.Update(tblDest) ' <== Erreur ici
          Next
 
        Catch ex As Exception
          MsgBox(ex.Message)
          Return False
        End Try
 
        Return True
      Case Else
        Return False
    End Select
 
  End Function
Erreur au moment de l'Update:
Aucune valeur donnée pour un ou plusieurs des paramètres requis.
J'ai d'abord essayé de faire l'update à la fin de la boucle.
Comme ça ne fonctionnait pas, je l'ai mis dans la boucle et pas mieux.

J'ai expressément réduit le nombre des champs dans les 2 tables et n'en ai gardé que 5 pour éviter les champs spéciaux tels que Mémo et AutoNumber.

Quoi que je tente, j'ai toujours cette foutue erreur.

Les cas trouvés sur Google sont toujours liés à des Queries complexes ou mal formulées.
Dans mon cas, la commande INSERT INTO a été réduite au plus simple.

Merci à ceux qui voudront bien se pencher sur ce problème.