OVH Cloud OVH Cloud

Taille des tables en octets

6 réponses
Avatar
Patrick
Bonjour,

Est-il possible de connaître la place que prend une table dans une base de
données ?
Par exemple, si la base fait 10 Mo, j'aimerais savoir que la table TTT
utilise 1 Mo, la table UUU utilise 2 Mo et ainsi de suite.

Merci pour votre aide.

------
Patrick

6 réponses

Avatar
Daniel Carollo
Bonjour Patrick!

On ne peut pas avoir cette information directement, mais il n'est pas
difficile de la calculer. Pour une table donnee, il suffit d'ajouter la
taille des champs (que l'on trouve dans l'aide en ligne), et de multiplier
ca par le nombre d'enregistrements.
Ne vous attendez toutefois pas a avoir un resultat exact: Jet stocke les
donnees en pages de 2kOctets, un nouvel enregistrement ne chevauchera pas
d'une page a l'autre.
De plus, les donnees peuvent n'etre pas stockees de facon adjacente
(probablement pas a moins d'avoir fait un "compactage" de la base et de ne
plus y avoir touche).
Pourquoi vous est-il necessaire de connaitre le volume des tables?

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Patrick" wrote in message
news:
Bonjour,

Est-il possible de connaître la place que prend une table dans une base de
données ?
Par exemple, si la base fait 10 Mo, j'aimerais savoir que la table TTT
utilise 1 Mo, la table UUU utilise 2 Mo et ainsi de suite.

Merci pour votre aide.

------
Patrick





Avatar
Eric
Bonjour Patrick,

En complément de la réponse de Daniel,
j'avais déjà posté une procédure sur ton post du 30/07-Espace utilisé.
Voila le lien. J'avais précisé que la procédure te donnerait un "ordre de
grandeur"

http://groups.google.com/groups?
q=Taille+des+tables+en+octets+group:microsoft.public.fr.access&hl=fr&lr=&ie
=UTF-8
&group=microsoft.public.fr.access&selm=XnF953876B0CA4A7fframZZhotmailcom%
40207.46.248.16&rnum=1

A+
Eric



"Patrick" écrivait
news::

Bonjour,

Est-il possible de connaître la place que prend une table dans une
base de données ?
Par exemple, si la base fait 10 Mo, j'aimerais savoir que la table TTT
utilise 1 Mo, la table UUU utilise 2 Mo et ainsi de suite.

Merci pour votre aide.

------
Patrick






Avatar
Raymond [mvp]
Bonsoir daniel.

et si la table contient deux champs OLE et une image intégrée, comment que
c'est-y qu'il va compter les octets le monsieur ? on est toujours mieux dans
l'ignorance.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Daniel Carollo" a écrit dans le
message de news:%
Bonjour Patrick!

On ne peut pas avoir cette information directement, mais il n'est pas
difficile de la calculer. Pour une table donnee, il suffit d'ajouter la
taille des champs (que l'on trouve dans l'aide en ligne), et de multiplier
ca par le nombre d'enregistrements.
Ne vous attendez toutefois pas a avoir un resultat exact: Jet stocke les
donnees en pages de 2kOctets, un nouvel enregistrement ne chevauchera pas
d'une page a l'autre.
De plus, les donnees peuvent n'etre pas stockees de facon adjacente
(probablement pas a moins d'avoir fait un "compactage" de la base et de ne
plus y avoir touche).
Pourquoi vous est-il necessaire de connaitre le volume des tables?

--
Daniel :-)


Avatar
Jinroh [MOS MI]
Bonsoir

Une pseudo astuce assez nulle consisterait à exporter la
table dans une base vide... hum.... c'est tout ce que j'ai
trouvé
-----Message d'origine-----
Bonsoir daniel.

et si la table contient deux champs OLE et une image
intégrée, comment que

c'est-y qu'il va compter les octets le monsieur ? on est
toujours mieux dans

l'ignorance.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Daniel Carollo"
tech.com> a écrit dans le

message de news:%
Bonjour Patrick!

On ne peut pas avoir cette information directement,
mais il n'est pas


difficile de la calculer. Pour une table donnee, il
suffit d'ajouter la


taille des champs (que l'on trouve dans l'aide en
ligne), et de multiplier


ca par le nombre d'enregistrements.
Ne vous attendez toutefois pas a avoir un resultat
exact: Jet stocke les


donnees en pages de 2kOctets, un nouvel enregistrement
ne chevauchera pas


d'une page a l'autre.
De plus, les donnees peuvent n'etre pas stockees de
facon adjacente


(probablement pas a moins d'avoir fait un "compactage"
de la base et de ne


plus y avoir touche).
Pourquoi vous est-il necessaire de connaitre le volume
des tables?



--
Daniel :-)



.




Avatar
?Lo»Paris?
Jinroh [MOS MI] wrote:
Bonsoir

Une pseudo astuce assez nulle consisterait à exporter la
table dans une base vide... hum.... c'est tout ce que j'ai
trouvé
-----Message d'origine-----
Bonsoir daniel.

et si la table contient deux champs OLE et une image intégrée,
comment que c'est-y qu'il va compter les octets le monsieur ? on est
toujours mieux dans l'ignorance.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Daniel Carollo" tech.com> a
écrit dans le message de
news:%
Bonjour Patrick!

On ne peut pas avoir cette information directement, mais il n'est
pas difficile de la calculer. Pour une table donnee, il suffit
d'ajouter la taille des champs (que l'on trouve dans l'aide en
ligne), et de multiplier ca par le nombre d'enregistrements.
Ne vous attendez toutefois pas a avoir un resultat exact: Jet
stocke les donnees en pages de 2kOctets, un nouvel enregistrement
ne chevauchera pas d'une page a l'autre.
De plus, les donnees peuvent n'etre pas stockees de facon adjacente
(probablement pas a moins d'avoir fait un "compactage" de la base
et de ne plus y avoir touche).
Pourquoi vous est-il necessaire de connaitre le volume des tables?

--
Daniel :-)



.



Bonjour Daniel,

Voici un extrait d'un de mes code, à toi de l'adapter à tes besion :

================================================== Private Function fn_TailleTables() As Byte
On Error GoTo ERR_TaTbl
Const ERR_proc As String = "fn_TailleTables"
Const FS_fld As String = "FieldSize" '// Memo et BinaryLong
Const S_fld As String = "Size" '// Autres

Dim oRstTmp As DAO.Recordset
Dim oFld As DAO.Field
Dim lTailT As Long '// Taille de la table.
Dim snTailT As Single '// Idem, mais pour l'affichage(2 déc).
Dim lTailE As Long '// Taille de l'enregistrement.
Dim lNbEnrg As Long '// Nombre d'enregistrements.
Dim sTbl As String
Dim sSql As String
Dim IDTbl As Long
Dim flgCal As String '// Indique si un champ mémo, OLE, ou
texte.

sSql = "SELECT scm_tblObjetsTables.* " & _
"FROM scm_tblObjetsTables IN '" & CodeDb().Name & "' " & _
"WHERE (((scm_tblObjetsTables.IDApp)=" & gIDApp & "));"
Set moRstObjTbl = CodeDb.OpenRecordset(sSql, dbOpenDynaset)

'// Barre de progression.
moRstObjTbl.MoveLast
moRstObjTbl.MoveFirst
giIncPrb = moRstObjTbl.RecordCount
If giIncPrb <> 0 Then
giIncPrb = 2000 / (giIncPrb + 1)
giLonPrb = giIncPrb
End If

'// On boucle sur les tables et les champs...
Do Until moRstObjTbl.EOF
flgCal = 0
sTbl = moRstObjTbl![sNomT]
IDTbl = moRstObjTbl![IDObjT]

Set oRstTmp = CurrentDb().OpenRecordset(sTbl, dbOpenSnapshot)

'// Parcour la table.
With oRstTmp
If .RecordCount <> 0 Then
.MoveLast
.MoveFirst
End If
lNbEnrg = .RecordCount

'// Parcours les champs de la table, Taille d'un enregistrement.
For Each oFld In .Fields
If (oFld.Type = dbMemo Or oFld.Type = dbLongBinary) Then '// OLE
ou texte ?
If lNbEnrg <> 0 Then
lTailE = lTailE + oFld.Properties(FS_fld)
End If
Else
lTailE = lTailE + oFld.Properties(S_fld)
End If
Next oFld

'// Parcour les enregistrements, Taille réelle de la table.
Do Until .EOF
For Each oFld In .Fields
Select Case oFld.Type
Case dbMemo, dbLongBinary
lTailT = lTailT + oFld.Properties(FS_fld)
flgCal = 1
Case dbText
lTailT = lTailT + (Len(Nz(.Fields(oFld.Name).Value)))
flgCal = 1
Case Else
lTailT = lTailT + oFld.Properties(S_fld)
End Select
Next oFld
'// Pas de champ Mémo, OLE ou texte, calcule la taille,
'// et passe à la table suivante.
If flgCal = 0 Then
lTailT = lTailT * lNbEnrg
Exit Do
End If
'// Enregistrement suivant.
.MoveNext
flgCal = 0
Loop
End With

oRstTmp.Close

snTailT = CSng(lTailT)
snTailT = snTailT / 1024

If fn_StockTaille(IDTbl, lNbEnrg, lTailE, snTailT) = 0 Then '// |--->
Exit Do
End If

lTailT = 0
lTailE = 0
lNbEnrg = 0
moRstObjTbl.MoveNext

'// Barre de progression.
giLonPrb = giLonPrb + giIncPrb
If giLonPrb > 2000 Then giLonPrb = 2000
glblPrb.Width = giLonPrb
gfrmPrg.Repaint

Loop

moRstObjTbl.Close
fn_TailleTables = 1
Set oRstTmp = Nothing
Set oFld = Nothing
Set moRstObjTbl = Nothing

SORTIE_TaTbl:
Exit Function
ERR_TaTbl:
MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, _
ERR_mdl & " - " & ERR_proc
Resume SORTIE_TaTbl
End Function
===================================================
Note moRstObjTbl est un objet DAO.Recordset

Salutations

--
°Laurent°



Avatar
?Lo»Paris?
?Lo»Paris? wrote:
Bonjour Daniel,


Euuh je voulais dire Patirck, sorry

--
°Laurent°