Conflicts can arise on succesive runs whenever you create  create temporary
layers and resued the file name.  It is safer to use GetTempFileName() and
then move the results to the final destination usging CopyDatabase()

 Also, always try yo avoid hardwired  layernames.  Instead, use the
layername returned by the command that loads or create the layer.

The code belows should do the job.

Cheers


Macro "testaddfield"
    RunMAcro("addfield" ,  "New Layer", "newareas" ,
"c:\\temp\\outputareas.dbd")
endmacro

Macro "addfield" ( sExistingAreaLayer, sOutputLayerName, sOutputFile)

    linelayer = "lines"
    newtitle = "newtitle"


    linefile = GetTempFileName("lines.dbd")
    converttolinedatabase(sExistingAreaLayer + "|", linefile,
{{"Label",linelayer},{"Layer Name",linelayer}})
    newlines = addlayer(,,"c:\\TEMP\\lines.dbd", linelayer)

    areafile = GetTempFileName("areas.dbd")
    converttoareadatabase(newlines + "|",areafile, {{"Label",
sOutputLayerName},{"Layer Name", sOutputLayerName}})
    droplayer(,newlines)


    newareas = addlayer(, sOutputLayerName, areafile, sOutputLayerName)
    setlayer (newareas)
    currview = GetLayer()
    tblflag = gettablemodifyflag(currview)
    fieldinfo = gettablestructure(currview)
    for i = 1 to fieldinfo.length do
    fieldinfo[i] = fieldinfo[i] + {fieldinfo[i][1]}
    end
    fieldinfo = fieldinfo + {{"Precinct","Character",16,0,"false", , , , ,
, , null}}
    modifytable(currview,fieldinfo)

    // Move to final destiantion
    CopyDatabase(areafile, sOutputFile)


endmacro



On Thu, Jul 4, 2013 at 3:35 PM, pdr_dan <[email protected]> wrote:

> **
>
>
> Below is the pertinent portion. Occasionally we have issues with broken
> polygons especially after a lot of changes are made. I've found the easiest
> way to repair this is converting to lines and then back to areas.
> Afterwards I modify the table to add back the lost field and fill by
> tagging with the old table (just id, area and precinct 16*char). This was
> just an attempt at automating it. Thanks for any help
>
> converttolinedatabase("newareas|","c:\\TEMP\\lines.dbd",
> {{"Label","lines"},{"Layer Name","lines"}})
> addlayer(,,"c:\\TEMP\\lines.dbd","lines")
> droplayer(,"newareas") // drop old newareas
> converttoareadatabase("lines|",homedir+newtitle+".dbd",
> {{"Label",newtitle},{"Layer Name","newareas"}})
> droplayer(,"lines")
> addlayer(,"newareas",homedir+newtitle+".dbd","newareas")
> setlayer("newareas")
> currview = getview()
> tblflag = gettablemodifyflag(currview)
> fieldinfo = gettablestructure(currview)
> for i = 1 to fieldinfo.length do
> fieldinfo[i] = fieldinfo[i] + {fieldinfo[i][1]}
> end
> fieldinfo = fieldinfo + {{"Precinct","Character",16,0,"false", , , , , , ,
> null}}
> modifytable(currview,fieldinfo)
>
>
> --- In [email protected], Armando Scalise <armando.scalise@...>
> wrote:
> >
> > Please copy the exact code you are using, as well as screenshot of the
> > table structure. That could help in finding the problem. Also, is the
> > view joined to other views?
> >
> >
> > On Wed, Jul 3, 2013 at 7:19 PM, pdr_dan <dan@...> wrote:
> >
> > > **
>
> > >
> > >
> > > Hi,
> > > has anyone used this function in GISDK? I'm trying to modify a .bin
> table
> > > in a geographic layer to add a character field. I basically cut and
> pasted
> > > the example from the manual for the function but I'm getting the
> following
> > > error:
> > > "unable to modify table (by adding a hard-link) when the .BIN, .DCB or
> .BX
> > > files exist. Please remove or rename them and try again"
> > > This doesn't make sense to me as how could you modify a file that
> doesn't
> > > exist. I ran it again with the gettablemodifyflag() function and that
> came
> > > back as "true" so it is modifiable. Any ideas what I'm doing wrong?
> > >
> > > Thanks
> > >
> > > Dan
> > >
> > >
> > >
> >
> >
> >
> > --
> > Armando Scalise
> >
>
>  
>



-- 
Armando Scalise

Reply via email to