à 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]

Répondre à