不知賢者50,但我已經與賢者300 API,這大概是類似的工作;您可以/應該存儲您的Sage會話實例,並保持活動狀態,只要您需要Sage連接存活即可。
我與之合作過的會話界面需要初始化,然後打開;您的代碼需要提供一個字符串句柄,一個appID,一個程序名稱和一個應用程序版本以進行初始化,然後當您打開會話時,您需要一個用戶ID,一個密碼和一個數據庫名稱。
下面是我使用(referenging賢者COM API)一個C#包裝界面,顯示的值是如何傳遞:
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
,DatabaseName
,時間戳和您需要的任何DBLinkFlags
;您的VBA代碼看起來是這樣的:
mySession.Open APP_USERID, APP_PWD, APP_TESTDB, Now, DBLinkFlags.ReadWrite
凡mySession
是一個全局對象變量,那麼無論APP_USERID
來自完全取決於你。在.Open
調用中對它們進行硬編碼,使它們成爲代碼內常量,或者將它們設置爲代碼內變量並將值存儲在Access數據庫或外部xml配置文件中,這些都是可行的;首先獲取硬編碼證書的工作,然後找出一個策略來對它們進行參數化。
*因爲我只需要爲每個「會話」登錄一次,如果這是正確的術語 –
顯示您的連接字符串和連接代碼 – dbmitch
子login_Click() 昏暗sagedb數據庫 昏暗ACCESSDB數據庫 昏暗RS作爲Recordset Dim strConnect As String Set sagedb = OpenDatabase(「Directory」) strConnect =「DSN = SageAccountsVer20; uid = xxx; pwd = xxx;」 Set accessdb = OpenDatabase(「」,False,False,strConnect) accessdb.Close Set accessdb = Nothing Set rs = sagedb。OpenRecordset( 「dbo_authors」) Debug.Print RS(0) Debug.Print 「記錄成功舉辦」 rs.Close sagedb.CloseSet RS =什麼 –