私は Sage 50 については知りませんが、おそらく似ている Sage 300 API で作業しました。Sage セッションのインスタンスを保存して、Sage 接続が必要な間は保存しておくことができます/すべきです。
私が使用したセッション インターフェイスは、初期化してから開く必要があります。コードでは、初期化する文字列ハンドル、appID、プログラム名、およびアプリのバージョンを提供する必要があります。セッションを開くときは、ユーザー ID、パスワード、およびデータベース名が必要です。
これは私が使用している C# ラッパー インターフェイス (Sage の COM API を参照) で、値がどのように渡されるかを示しています。
public interface ISession : IDisposable
{
void Init(string handle, SageAppInfo info);
void Open(SageCredential credential, DateTime timestamp, int flags = 0);
IDbLink OpenDbLink(DBLinkType type, DBLinkFlags flags);
IEnumerable<string> Errors { get; }
}
public class SessionWrapper : ISession
{
private readonly ISessionComInterop _session;
public SessionWrapper(ISessionComInterop session)
{
_session = session;
}
public void Init(string handle, SageAppInfo info)
{
_session.Init(handle, info.AppId, info.ProgramName, info.AppVersion);
}
public void Open(SageCredential credential, DateTime timestamp, int flags = 0)
{
_session.Open(credential.UserId, credential.Password, credential.DatabaseName, timestamp, flags);
}
public IDbLink OpenDbLink(DBLinkType type, DBLinkFlags flags)
{
return new DbLinkWrapper(_session.OpenDBLink(type, flags));
}
public IEnumerable<string> Errors
{
get
{
for (var i = 0; i < _session.Errors.Count; i++)
{
yield return string.Format("[{0}] {1} ({2})", _session.Errors[i].Code, _session.Errors[i].Message, _session.Errors[i].Source);
}
}
}
public void Dispose()
{
_session.Dispose();
}
}
もちろん、VBA の実装は大きく異なりますが、重要な部分は次のとおりです。
_session.Open(credential.UserId, credential.Password, credential.DatabaseName, timestamp, flags);
私の呼び出しコードは次のようになります。
_session.Init(string.Empty, _info);
_session.Open(_credential, DateTime.Now);
_db = _session.OpenDbLink(DBLinkType.Company, DBLinkFlags.ReadWrite);
そのため、コードにUserId
a Password
、 a DatabaseName
、タイムスタンプなど、DBLinkFlags
必要なものを指定してください。VBA コードは次のようになります。
mySession.Open APP_USERID, APP_PWD, APP_TESTDB, Now, DBLinkFlags.ReadWrite
mySession
グローバルオブジェクト変数はどこにあり、どこからAPP_USERID
来るかは完全にあなた次第です。それらを呼び出しでハードコードする.Open
か、コード内定数にするか、コード内変数にして、値を Access データベースまたは外部の xml 構成ファイルに格納します。何でも機能します。ハードコーディングされた資格情報を機能させることから始めて、それらをパラメーター化する戦略を考え出します。