I personally would not use the ActiveX controls for this. They are more
simpler to program but more difficult to administer. For instance right
click on your merge agent after you have created your pull/push subscription
and try to start it. You can't as the start and stop agent menu options are
grayed out.
You can't create push subscriptions with them either (I realize you are not
doing this).
Here is some SQL DMO to do what you are trying to do (this is for
transactional).
Option explicit
Const SQLDMOPubAttrib_AllowAnonymous = 4
Const SQLDMOPubAttrib_AllowPull = 2
Const SQLDMOPubAttrib_ImmediateSync = 16
Const SQLDMOPubAttrib_IndependentAgent = 32
Const SQLDMOPubAttrib_InternetEnabled = 8
Const SQLDMOCreationScript_PrimaryObject =1
Const SQLDMOCreationScript_DRI_Defaults = 2048
Const SQLDMOCreationScript_DRI_ForeignKeys = 512
Const SQLDMOCreationScript_ClusteredIndexes = 16
Const SQLDMOCreationScript_NonClusteredIndexes = 64
Const SQLDMOCreationScript_DRI_Checks = 1024
Const SQLDMOCreationScript_PKUKAsConstraints = 32768
Const SQLDMOCreationScript_UDDTsToBaseTypes = 32
Const SQLDMOTranSubscriber_Default = 0
Const SQLDMOSubscription_Pull = 1
Const SQLDMOSubscription_Anonymous = 2
Const SQLDMOReplSecurity_Normal = 0
Const SQLDMOReplSecurity_Integrated = 1
Const SQLDMOSubscription_All = 3
Dim objServer, objReplication, objSubscriber, _ objReplicationDatabases,
objReplicationDatabase, _
objTransPublications,objTransPublication,objTransArticle, objTransArticles,
objTransSusbcriptions,_ objTransPullSubscription,objTransPullSubscriptions,_
objReplicationSecurity, objJobServer, objJobs, objJob,_ property
set objServer = CreateObject("SQLDMO.SQLServer")
objServer.Connect "hilary2kp", "sa","se1cure#"
set objReplication=objServer.Replication
set objReplicationDatabases=objReplication._
ReplicationDatabases
set objReplicationDatabase=objReplicationDatabases("Pubs")
set objTransPublications=objReplicationDatabase._
TransPublications
set objTransPublication=_
CreateObject("SQLDMO.TransPublication2")
set objTransArticle=CreateObject("SQLDMO.TransArticle2")
with objTransArticle
.Name="authors"
.SourceObjectName="authors"
.SourceObjectOwner="dbo"
.CreationScriptOptions=_
SQLDMOCreationScript_PrimaryObject+_
SQLDMOCreationScript_DRI_Defaults + _
SQLDMOCreationScript_DRI_ForeignKeys + _
SQLDMOCreationScript_ClusteredIndexes + _
SQLDMOCreationScript_DRI_Checks +_
SQLDMOCreationScript_PKUKAsConstraints +_
SQLDMOCreationScript_UDDTsToBaseTypes +_
SQLDMOCreationScript_NonClusteredIndexes
end with
with objTransPublication
.Name="test"
.AltSnapShotFolder="C:\inetpub\ftproot"
.Enabled=TRUE
.FTPAddress="hilary2kp"
.FTPLogin="Anonymous"
.FTPSubdirectory="/ftp"
.PublicationAttributes=SQLDMOPubAttrib_AllowAnonymous+_
SQLDMOPubAttrib_AllowPull+_
SQLDMOPubAttrib_ImmediateSync+_
SQLDMOPubAttrib_IndependentAgent+_
SQLDMOPubAttrib_InternetEnabled
.RetentionPeriod=14
end with
objTransPublications.Add objTransPublication
objTransPublication.TransArticles.Add objTransArticle
'Starting the snapshot job
set objJobServer=objServer.JobServer
set objJobs=objJobServer.Jobs
for each objJob in objJobs
if objJob.JobID=objTranspublication.SnapshotJobID then
objJob.Start
end if
next
set objJob=Nothing
set objJobs=Nothing
set objJobServer=Nothing
set objTransArticle=Nothing
set objTransPublications=Nothing
set objTransPublication=Nothing
set objReplication=Nothing
objServer.Disconnect
objServer.Connect "Hilary2kp\test","sa","se1cure#"
set objReplication=objServer.Replication
set objReplicationDatabases=objReplication._
ReplicationDatabases
set objReplicationDatabase=objReplicationDatabases("sub")
set objTransPullSubscription=_
CreateObject("SQLDMO.TransPullSubscription2")
set objReplicationSecurity=objTransPullSubscription._
DistributorSecurity
objReplicationSecurity.SecurityMode=_
SQLDMOReplSecurity_Normal
objReplicationSecurity.StandardLogin="sa"
objReplicationSecurity.StandardPassword="se1cure#"
with objTransPullSubscription
.FTPAddress="hilary2kp"
.FTPLogin="Anonymous"
.Publisher= "hilary2kp"
.Distributor="hilary2kp"
.DistributorSecurity.SecurityMode=_
SQLDMOReplSecurity_Normal
.DistributorSecurity.StandardLogin="sa"
.DistributorSecurity.StandardPassword="se1cure#"
.PublicationDB="pubs"
.Publication="test"
.PublisherSecurity.SecurityMode=_
SQLDMOReplSecurity_Normal
.PublisherSecurity.StandardLogin="sa"
.PublisherSecurity.StandardPassword="se1cure#"
.SubscriberType = SQLDMOTranSubscriber_Default
.SubscriptionType = SQLDMOSubscription_Anonymous
.PublicationAttributes=SQLDMOPubAttrib_AllowAnonymous+_
SQLDMOPubAttrib_AllowPull+_
SQLDMOPubAttrib_ImmediateSync+_
SQLDMOPubAttrib_IndependentAgent+_
SQLDMOPubAttrib_InternetEnabled
.SubscriberSecurityMode=SQLDMOReplSecurity_Normal
.SubscriberLogin="sa"
.SubscriberPassword="se1cure#"
.UseFTP=True
end with
set objTransPullSubscriptions=objReplicationDatabase._
TransPullSubscriptions
objTransPullSubscriptions.Add objTransPullSubscription
set objTransPullSubscription=Nothing
set objTransPullSubscriptions=Nothing
set objReplicationDatabases=Nothing
set objReplication=Nothing
set objServer=Nothing
[quoted text, click to view] "Paul Ibison" <Paul.Ibison@Pygmalion.Com> wrote in message
news:488C49AB-FE23-4C94-BCA0-C85D523D0FB2@microsoft.com...
> I'd use merge replication with a central publisher and each MSDE database
is an anonymous pull subscriber. Synchronization can be programatic using
the activex controls (optionally installed with samples on a full SQL Server
install) or more simply using windows synchronization manager. To be secure
I'd use this replication topology over a VPN. When you come to implementing
it, the main potential stumbling points are security and sql registration.
Both are explained in detail in this article:
http://support.microsoft.com/?id=321822. I set up non-trusted domain sql
security and had a couple of extra issues so if you go down that route then
let us know.
[quoted text, click to view] > HTH,
> Paul Ibison