#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