à la demande de M. Marcelly je renvoie le code incrémenté et un exposé plus concret du pb : j'utilise OOo 2.0.2 sous XP, J'ai systématiquement un plantage sur le update, je vérifie pourtant que j'ai bien le bon type de données, Par contre je n'intercepte pas de numéro d'erreur. En fait je me demande si le pb ne vient pas de la non libération de la connexion lors de mon premier accès à la base de donnée, dans la sub initdonnees. Quand je regarde dans l'explorateur j'ai un fichier courrier.lck qui ne disparait que si je ferme complètement toutes les appli OOO.
Sub ConnecterSource() Dim oDBSource As String, login As String, password As String, dbURL As String Dim oDataSource As Object, oDBContext As Object dbURL=ConvertToUrl("c:\modeles\dgmt\courrier.odb") If NOT FileExists(dbURL) Then Msgbox "Problème de disponibilité de la base de données..." & chr(13) & "Alerte!!!" End If REM Use the DatabaseContext to get a reference to the database. oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") oDataSource = oDBContext.getByName(dbURL) 'Les paramètres de connexion login = "" password = "" maConnexion = oDataSource.getConnection(login, password) if IsNull(maConnexion) then MsgBox("Connexion impossible", 16) Stop end if End Sub Sub DeconnecterSource() maConnexion.close maConnexion.dispose 'que cette ligne soit présente ou pas j'ai le meme pb End Sub sub initDonnees() On Error GoTo Erreurs dim maRequete As Object, resuQuery As Object dim mesRows as long, monRow as long dim mesColonnes as long, maColonne as long dim nbColonnes as long dim instrSQL As String, monSignet As Variant dim info As String, cr As String dim i, monType cr = chr(13) ' retour à la ligne, pour les messages ConnecterSource 'initialiser le tableau des rédacteurs 'Texte de la requête instrSQL = "select * from " & """redacteurs""" & " order by " & """ID_redacteurs""" & "" 'Envoyer la requête maRequete = maConnexion.createStatement() resuQuery = maRequete.executeQuery(instrSQL) 'nombre de colonne nbColonnes = resuQuery.columns.count-1 'xray resuQuery.columns(i) redim tabRedacteurs (1 to 15, nbColonnes) as variant resuQuery.beforefirst() do while resuQuery.next monrow=resuQuery.row 'créer une table pour stocker les rédacteurs for i = 0 to nbColonnes monType=resuQuery.columns(i).TypeName select case monType case "INTEGER" tabRedacteurs ( monrow, i ) = resuQuery.Columns(i).Short case "VARCHAR" tabRedacteurs ( monrow, i) = resuQuery.Columns(i).string case "LONGVARCHAR" tabRedacteurs ( monrow, i) = resuQuery.Columns(i).string end select next loop 'initialiser le tableau des signataires 'Texte de la requête instrSQL = "select * from " & """signataires""" & " order by " & """ID_signataires""" & "" 'instrSQL = "select * from signataires order by ID_signataires" 'Envoyer la requête maRequete = maConnexion.createStatement() resuQuery = maRequete.executeQuery(instrSQL) 'nombre de colonne nbColonnes = resuQuery.columns.count-1 redim tabSignataires (1 to 15, nbColonnes) as variant resuQuery.beforefirst() do while resuQuery.next monrow=resuQuery.row for i = 0 to nbColonnes monType=resuQuery.columns(i).TypeName select case monType case "INTEGER" tabSignataires ( monrow, i ) = resuQuery.Columns(i).Short case "VARCHAR" tabSignataires ( monrow, i) = resuQuery.Columns(i).string case "LONGVARCHAR" tabSignataires ( monrow, i) = resuQuery.Columns(i).string end select next ' info = "Ligne : " & resuQuery.Row & " " & _ ' "ID_redacteurs = " & resuQuery.Columns(0).Short & cr & _ ' "Civilité = " & resuQuery.Columns(1).String & cr & _ ' "Nom = " & resuQuery.Columns(2).String & cr & _ ' "Prénom : " & resuQuery.Columns(3).string & cr & _ ' "Service : " & resuQuery.Columns(4).string & cr & _ ' "Telephone : " & resuQuery.Columns(5).string & cr & _ ' "telecopie : " & resuQuery.Columns(6).string & cr & _ ' "email : " & resuQuery.Columns(7).string & cr & _ ' "grade : " & resuQuery.Columns(8).string & cr & _ ' "fonction : " & resuQuery.Columns(9).string ' MsgBox(info) loop DeconnecterSource Exit Sub Erreurs: erreur_num=err() erreur_txt=error(erreur_num) erreur_ligne = Erl() MsgBox("erreur n° " + erreur_num + " à la ligne " + erreur_ligne + chr(13) + erreur_txt, 1 + 16, "Macro recupcurseur") DeconnecterSource End Sub Sub majDonnees() On Error GoTo Erreurs dim maRequete As Object, resuQuery As Object dim mesRows as long, monRow as long dim mesColonnes as long, maColonne as long dim nbColonnes as long dim instrSQL As String, monSignet As Variant dim info As String, cr As String dim i as long dim test1 as string, monType cr = chr(13) ' retour a la ligne, pour les messages ConnecterSource ' Texte de la requete instrSQL = "select * from " & """signataires""" & " order by " & """ID_signataires""" & "" ' Envoyer la requete maRequete = maConnexion.createStatement() resuQuery = maRequete.executeQuery(instrSQL) 'nombre de colonne nbColonnes = resuQuery.columns.count-1 resuQuery.beforefirst() do while resuQuery.next monrow=resuQuery.row for i = 1 to nbColonnes monType=resuQuery.columns(i).TypeName test1 = tabSignataires ( monrow, i) select case monType case "INTEGER" test1 = Cint(tabSignataires ( monrow, i)) msgbox test1 resuQuery.updateShort(i, test1) case "VARCHAR" test1 = CStr(tabSignataires ( monrow, i)) resuQuery.updateString(i, test1) case "LONGVARCHAR" test1 = CStr(tabSignataires ( monrow, i)) resuQuery.updateString(i,test1) end select next resuQuery.updateRow loop DeconnecterSource Exit Sub Erreurs: DeconnecterSource erreur_num=err() erreur_txt=error(erreur_num) erreur_ligne = Erl() MsgBox("erreur n=B0 " + erreur_num + " =E0 la ligne " + erreur_ligne + = chr(13) +erreur_txt, 1 + 16, "Macro recupcurseur") End Sub merci pour votre aide Laurence BOTTIN (DGMT/SG/AG2), bureau informatique ministère des Transports, de l'Equipement, du Tourisme et de la Mer direction générale de la Mer et des Transports (: +33 1 40 81 17 27 Fax : +33 1 40 81 37 95 localisation des bureaux : Grande Arche sud La Défense <mailto:[EMAIL PROTECTED]> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]