when you position an object in DB it positions from the centre - at least i think this is the case - e.g.
int radius = 100;
dbMakeObjectSphere(1,radius);
dbPositionObject(1,0,0,0); // positions the centre of the object at 0,0,0
you can correct this by changing the last statement to
dbPositionObject(1,0,dbObjectSizeY(1)/2,0)
This same principle of passing half the vertical height into the dbPositionObject() fn, will work for almost all objects. At least I think it does.

Happy coding!

[edit]
wait that didn't answer the question did it

are you using a terrain or a matrix?
for terrain use:
dbPositionObject (objID, x, (dbObjectSizeY(objID)/2) + dbGetTerrainGroundHeight( terrainID, x, z ), z);
for a matrix use:
dbPositionObject (objID, x, (dbObjectSizeY(objID)/2) + dbGetGroundHeight( matrixID, x, z ), z);
x, z are the position variables of the object you wish to place at ground height