banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 05 August 2004 20:17

Mathias Dubreuil
Invité

vb/AV8.3 : creation table

Bonjour
Sous Arcview 8.3, j'essaye de creer une table... et de remplir ses lignes...
J'ai regarde dans la doc (p800 d'exploring arcobject)

Set pRow = pTable.CreateRow

J'obtiens : Message d'erreur : element non trouve dans cette collection

Auriez vous une petite idee ?
Merci par avance
Mathias

Pour le detail, j'utilise cette procedure :

Code:

Public Sub MaProcedure(strDBPath As String, strTableName As String)
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap

Dim pWorkspaceFactory As IWorkspaceFactory
Set pWorkspaceFactory = New AccessWorkspaceFactory

' --ouverture de l'espace de travail
Dim pFWorkspace As IFeatureWorkspace
Set pFWorkspace = pWorkspaceFactory.OpenFromFile(strDBPath, 0)

Dim pWorkspace As IWorkspace
Set pWorkspace = pFWorkspace 'QI

Dim pEnumDatasetName As IEnumDatasetName
Set pEnumDatasetName = pWorkspace.DatasetNames(esriDTTable)
Dim pDatasetname As IDatasetName
Set pDatasetname = pEnumDatasetName.Next
Dim BooTableExist As Boolean
BooTableExist = False

Dim pRow As IRow
Dim pTable As ITable

'Definition d'une collection de champs :
Dim pField1 As IFieldEdit
Set pField1 = New Field
Dim pField2 As IFieldEdit
Set pField2 = New Field
Dim pField3 As IFieldEdit
Set pField3 = New Field

With pField1
  .Name = Code_sit
  .Type = esriFieldTypeString
  .Length = 50
End With
With pField2
  .Name = groupe
  .Type = esriFieldTypeString
  .Length = 50
End With
With pField3
  .Name = Detail
  .Type = esriFieldTypeString
  .Length = 50
End With
Dim pFieldsEdit As IFieldsEdit
Set pFieldsEdit = New Fields
pFieldsEdit.AddField pField1
pFieldsEdit.AddField pField2
pFieldsEdit.AddField pField3

'Creation d'une nouvelle table
Set pTable = pFWorkspace.CreateTable( essai , pFieldsEdit, Nothing, Nothing,  )

' C'est ici que ca coince :
' Message d'erreur : element non trouve dans cette collection

Set pRow = pTable.CreateRow                                                                                                '
pRow.Value(0) = "essai2"
pRow.Store

End Sub
 

#2 Fri 06 August 2004 10:21

Olivier GUYOT-DE-LA-POMMERAYE
Invité

Re: vb/AV8.3 : creation table

Bonjour,

Il est possible que le probleme vienne du fait que vous n'ayez pas d'ObjectID dans ta Table, mais je ne suis pas sur, il faudrait faire des tests.

Sinon, une maniere plus efficace (aux dires d'ESRI) d'ecrire des donnees dans une table est d'utiliser un Insert Cursor comme ceci :

Code:

'Instanciation des objets permettant de creer une table et des objets permettant de la remplir
Dim oOutPutTable As ITable

'Fonction interne permettant de generer une table dans ArcSDE avec la structure approprie
Set oOutPutTable = CreateArcSDE_DICT_Table("DICT", oIFeatureWorkspace)

Dim oOutPutICursor As ICursor
'Instanciation du Curseur en mode d'insertion
Set oOutPutICursor = oOutPutTable.Insert(True)

Dim oOutPutIRowBuffer As IRowBuffer
'Instanciation du RowBuffer permettant de faire une insertion de plusieurs valeurs de facon plus efficace
Set oOutPutIRowBuffer = oOutPutTable.CreateRowBuffer

'Remplissage des valeurs
oOutPutIRowBuffer.Value(oOutPutIRowBuffer.Fields.FindField("Code_SIT")) = "A"
oOutPutIRowBuffer.Value(oOutPutIRowBuffer.Fields.FindField("Groupe")) = "E"
oOutPutIRowBuffer.Value(oOutPutIRowBuffer.Fields.FindField("Detail")) = "Blablablabla"

'Injection de la ligne du RowBuffer vers le Curseur d'insertion pointant sur la table
oOutPutICursor.InsertRow oOutPutIRowBuffer

'Procede a l'ecriture "proprement dite" de la ligne dans la table (au niveau physique)
oOutPutICursor.Flush

En esperant que cela vous soit utile, je vous souhaites une bonne journee,

Cordialement,

Olivier Guyot de La Pommeraye

 

#3 Fri 06 August 2004 16:54

Mathias Dubreuil
Invité

Re: vb/AV8.3 : creation table

Bonjour
Voici la procedure repondant a mon probleme. Il s'avere plus judicieux d'utiliser Insert Cursor que createrow.

Code:

Public Sub MaProcedure(strDBPath As String, strTableName As String)
Dim pWorkspaceFactory As IWorkspaceFactory
Set pWorkspaceFactory = New AccessWorkspaceFactory

' --ouverture de l'espace de travail
Dim pFWorkspace As IFeatureWorkspace
Set pFWorkspace = pWorkspaceFactory.OpenFromFile(strDBPath, 0)

Dim pWorkspace As IWorkspace
Set pWorkspace = pFWorkspace 'QI

' Ouverture de la table
Dim pTable As ITable
Set pTable = pFWorkspace.OpenTable(strTableName)

' creation du RowBuffer
Dim pRowBuffer As IRowBuffer
Set pRowBuffer = pTable.CreateRowBuffer
pRowBuffer.Value(0) = Valeur du premier champ
pRowBuffer.Value(1) = Valeur du deuxieme champ
pRowBuffer.Value(2) = Valeur du troisieme champ

'Instanciation du Curseur en mode d'insertion
Dim pCursor As ICursor
Set pCursor = pTable.Insert(True)
pCursor.InsertRow pRowBuffer
pCursor.Flush
End Sub

Un grand merci a Olivier et Julien

Cordialement
Mathias

 

Pied de page des forums

Powered by FluxBB