Article ID: | qGEN012 |
Date Revised: | June 05, 1998 |
Keywords: | View, DBC, Field Properties |
See Also: | Download dbcViewProp.prg (3KB) |
Question: How can I easily copy the properties of database table fields to the view fields?
Answer: You can run GENDBC to generate the database code and edit it to alter the views.
I wrote this little program to handle the task:
* dbcViewProp.prg 08-May-98
* load all view field properties from the underlying table field properties
* Copyright 1998 DF Software Development, Inc.
* http://www.geocities.com/ResearchTriangle/9834/
* Unrestricted public use
* Standard disclaimer: Backup your DBC files before running this program
* I'm not liable for any damages. While this utility works great on my
* views it may fail on the views you have created.
local lcDBC, laFields[1], laViews[1], laProperties[6], i, j
lcDBC = set( "database" )
if ( empty( lcDBC ) )
* no database open so prompt for one
open database ?
lcDBC = set( "database" )
if ( empty( lcDBC ) )
return .f.
endif
endif
lcDBC = lcDBC + ".dbc"
* list of field properties to copy over to the view
* the list of properties is in the help for DBGetProp
laProperties[1] = "Caption"
laProperties[2] = "Comment"
laProperties[3] = "DisplayClass"
laProperties[4] = "DisplayClassLibrary"
laProperties[5] = "Format"
laProperties[6] = "InputMask"
*laProperties[] = ""
* find all the views in the database
select ObjectName, "" ;
from (lcDBC) ;
into array laViews ;
where objecttype = "View"
* self join to find all of the view fields
select DBC.ObjectName, Tables.ObjectName ;
from (lcDBC) as DBC;
inner join (lcDBC) as Tables ;
on dbc.ParentID = tables.ObjectID ;
into array laFields ;
where DBC.objecttype = "Field" and tables.ObjectType = "View"
wait window "Updating view fields" nowait
for i = 1 to _tally
laFields[i,1] = lower( alltrim( laFields[i,1] ) )
laFields[i,2] = alltrim( laFields[i,2] ) + "." + laFields[i,1]
lcField = dbgetprop( laFields[i,2], "Field", "UpdateName" )
j = at( ".", lcField )
if ( j = 0 )
* not a field from a table, likely to be calculated
loop
endif
j = at( "!", lcField )
if ( j > 0 )
* pull the database name off
lcField = substr( lcField, j + 1 )
endif
lcField = chrtran( lcField, "*", "" )
* set the properties
for j = 1 to alen( laProperties )
dbsetprop( laFields[i,2], "Field", laProperties[j], ;
dbgetprop( lcField, "Field", laProperties[j] ) )
endfor
endfor
wait clear
use in (lcDBC)
return .t.