
рдбреЗрд▓реНрдлреА рдХреЗ рд╕реНрдерд╛рдпреА рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд╛рд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдордВрдЪ рдЬреАрд╡рд┐рдд рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИ, рдФрд░ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде, рдпрд╣
рдПрдХ рджреВрд╕рд░реА рд╣рд╡рд╛ рднреА
рд▓реЗрддрд╛ рд╣реИ рдФрд░ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд╣рдЬрд╛рд░реЛрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдмрдирд╛ рд╣реБрдЖ рд╣реИред
рдХрд┐рд╕реА рднреА рдЕрдиреНрдп DBMS рдХреЗ рд░реВрдк рдореЗрдВ, рдбреЗрд▓реНрдлреА Cach├й DBMS рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред
рдбреЗрд▓реНрдлреА рд╕реЗ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдЪ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╣ рдЖрд▓реЗрдЦ Cach├й DBMS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдЫреЛрдЯреЗ VBScript рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕реАрдзреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрднрд┐рдЧрдо рдЙрджрд╛рд╣рд░рдг:
Set f = CreateObject("VISM.VisMCtrl.1") f.Server="CN_IPTCP:localhost[1972]:_system:@ SYS" f.NameSpace="SAMPLES" f.Execute("=$zv")
рд╕рдВрдмрдВрдзрдкрд░рдХ рдкрд╣реБрдВрдЪ рдЙрджрд╛рд╣рд░рдг:
Set cn=Createobject("ADODB.Connection") cn.ConnectionString="DRIVER={InterSystems ODBC35}; SERVER=127.0.0.1; PORT=1972; DATABASE=SAMPLES; UID=_system; PWD=SYS" cn.open WScript.Echo "Succesfully!"
рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╕реЗрд╕ рдЙрджрд╛рд╣рд░рдг:
Set f = CreateObject("CacheActiveX.Factory") Set rs = CreateObject("CacheActiveX.ResultSet") If Not f.IsConnected() Then f.Connect("cn_iptcp:127.0.0.1[1972]:SAMPLES:_SYSTEM:SYS") Set rs=f.DynamicSQL("select TOP 3 * from Sample.Person") rs.Execute() while rs.Next WScript.Echo rs.Get("SSN")
рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдЖрдк JScript, Visual Basic, C ++ рдмрд┐рд▓реНрдбрд░, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Cach├й DBMS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЛрдЯ: рдЬрд╛рд╡рд╛ рдФрд░ .NET рдХреЗ рд▓рд┐рдП рдХрдИ рджреЗрд╢реА рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рджреЗрд░ рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рдмрд╛рдзреНрдпрдХрд╛рд░реА
рдбреЗрд▓реНрдлреА рд╕реЗ рдХрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:
рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВ, рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд░рджреНрдж рдХрд░рддреЗ рд╣реИрдВред
рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд╕рд╛рде, рдХреЛрдб рд╕рдВрдХреЗрдд рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ; рддрджрдиреБрд╕рд╛рд░, рдХреЛрдб рдореЗрдВ рдЧрд▓рддреА рдХрд░рдиреЗ рдХреА рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдб рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдСрдкрд░реЗрд╢рди рдХреА рдЧрддрд┐ рд╢реБрд░реБрдЖрддреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдХрдо рд╣реИред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рдпреЗ рдХрдорд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдпрд╛
рдХреИрдЪ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп
, рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрди рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдЖрдк рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╡рд░реНрдгрд┐рдд рд╣реИред
Cach├й рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ
C: \ Program Files \ Common Files \ InterSystems \ Cache \ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
- CacheObject.dll (рдкрджрд╛рд╡рдирдд);
- CacheActiveX.dll (рдЕрдиреБрд╢рдВрд╕рд┐рдд)ред
Cach├й 5.1 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, InterSystems рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирдП
CacheActiveX.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
CacheObject.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ
CacheActiveX.dll рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред
рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ
CacheObject.dll рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдКрдкрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЖрдк рдЕрдиреНрдп рдлрд╛рдЗрд▓реЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:
- DelphiCallback.dll ;
- CacheList.ocx ;
- CacheQuery.ocx ;
- VISM.ocx ред
рдбреЗрд▓реНрдлреА рдореЗрдВ Cach├й Objects ActiveX рдШрдЯрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдпрд╣ рдЦрдВрдб рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Cach├й DBMS рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд▓реНрдлреА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ, рдХреНрд░рдо рдореЗрдВ:
- рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдШрдЯрдХ> рдЖрдпрд╛рдд рдШрдЯрдХ ... ;


- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, CacheActiveX 2.0 рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ;

- рд╣рдорд╛рд░реЗ рдмреБрдХрдорд╛рд░реНрдХ рдХрд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ, рд╕рд╛рде рд╣реА рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ;

- рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВ, рдЕрдм рддрдХ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд┐рдирд╛;

- рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░рдг 2-4 рджреЛрд╣рд░рд╛рдПрдВ:
- CacheActiveX 2.0 рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп ;
- CacheList ActiveX рдирд┐рдпрдВрддреНрд░рдг рдореЙрдбреНрдпреВрд▓ ;
- рдХреИрд╢реЗрд╡рд┐рдХ рдПрдХреНрдЯрд┐рд╡рдПрдХреНрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдореЙрдбреНрдпреВрд▓ ;
- рдбреЗрд▓реНрдлреАрдХреЙрд▓рдмреИрдХ 1.0 рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп ;
- рд╡реАрдПрд╕рдПрдо 7.2 рдПрдХреНрдЯрд┐рд╡рдПрдХреНрд╕ рдХрдВрдЯреНрд░реЛрд▓ ;
- рдЯреАрдПрд▓ 1.0 рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп ред
рдиреЛрдЯ: рдЖрдк рдбреЗрд▓реНрдлреА рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ tlibimp.exe рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдореЙрдбреНрдпреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


рдиреЛрдЯ: рдбреЗрд▓реНрдлреА рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╣реИ:
- рдореЗрдиреВ рдЖрдЗрдЯрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ> рдЖрдпрд╛рдд рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ... ;

- рдЖрдЧреЗ рдКрдкрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рджреЗрдЦреЗрдВред
рдХрд╕реНрдЯрдо рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдирд╛
рдпрд╣ рдЦрдВрдб рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Cach├й DBMS рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдкреАрдврд╝реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдУрдбреАрдПрд▓ рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреА рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Cach├й DBMS рдХреЗ рд╕рд╛рде рджрд┐рдП рдЧрдП
odl_generator.exe рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг:
odl_generator.exe -conn cn_iptcp:localhost[1972]:USER:_system:SYS -class-list test.txt -lib-name test -dir MIDL
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЙрдкрдпреЛрдЧрд┐рддрд╛
USER рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЬреБрдбрд╝рддреА рд╣реИ,
test.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ
MIDL \ test.odl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрддреА рд╣реИрдиреЛрдЯ : рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓ CacheActiveX.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред рдкреБрд░рд╛рдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ ODL рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ExportODL рд╡рд┐рдзрд┐ рдХрд╛ % SYSTEM.OBJ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЙрджрд╛рд╣рд░рдг:
set list= "%Library.Status,Sample.Person"
do $system .OBJ . ExportODL (list, "c:\MIDL\test.odl" , "-d" ,.err)
рддреЛ, ODL рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╣реИ, рдЕрдм рдЖрдкрдХреЛ TLB рдлрд╝рд╛рдЗрд▓ рдФрд░ рдлрд┐рд░ PAS рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рджреГрд╢реНрдп C ++ рдбреЗрд╡рд▓рдкрд░ рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓
midl.exe рдпрд╛
mktypelib.exe рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг:
midl /I . test.odl /tlb test.tlb tlibimp.exe -C- -P+ -Hr- -Ha- -Hs- -XM- test.tlb
рдиреЛрдЯ: рдЖрдк Cach├й DBMS MAC рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ:
///
Class pas.s Extends %SerialObject
{
/// (64-).
Property aInteger As %Integer ;
/// . - 50 .
Property aString As %String ;
}
/// .
Class pas.a Extends %Persistent
{
/// aA;
Index aAIndex On aA;
/// --, "". SQL foreign key.
Relationship aA As pas.test [ Cardinality = one, Inverse = aChilds ];
Property aInteger As %Integer ;
Property aString As %String ;
}
/// %occIO.inc .
Include %occIO
/// .
Class pas.test Extends %Persistent
{
/// , ;
Parameter EXTENTQUERYSPEC As ROWSPEC [ Flags = LIST ] = aBoolean,aInteger,aString,aDate,aTimeStamp" ;
/// (true/false/null);
Property aBoolean As %Boolean ;
Property aInteger As %Integer ;
Property aString As %String ;
/// ;
Property aDate As %Date ;
/// +;
Property aTimeStamp As %TimeStamp ;
/// (CLOB);
Property aMemo As %GlobalCharacterStream ;
/// (BLOB);
Property aPhoto As %GlobalBinaryStream ;
/// --, "". SQL .
Relationship aChilds As pas.a [ Cardinality = many, Inverse = aA ];
/// - ;
///<br> SQL
///<br> -.
Property aS As pas.s ;
/// - ;
///<br> SQL , , .
Property aListOfString As list Of %String ;
/// - ;
///<br> SQL , , .
Property aListOfA As list Of pas.a ;
/// - ;
///<br> SQL .
Property aArrOfString As array Of %String ;
/// - ;
///<br> SQL .
Property aArrOfA As array Of pas.a ;
/// .
/// <br> , .
Method %OnBeforeSave( insert As %Boolean ) As %Status [ Private , ServerOnly = 1 ]
{
;
write "Hello from Cache! (" , $$$CurrentClass , ":" , $$$CurrentMethod , ")" ,!
quit $$$OK
}
/// - : .
Query test1( ABoolean As %Boolean , AInteger As %Integer , AString As %String , ADate As %Date , ATimeStamp As %TimeStamp ) As %SQLQuery ( CONTAINID = 1 , ROWSPEC = "ID:%String,aBoolean:%Boolean,aInteger:%Integer,aString:%String,aDate:%Date,aTimeStamp:%TimeStamp" ) [ SqlProc ]
{
SELECT %ID , aBoolean , aInteger , aString , aDate , aTimeStamp FROM pas . test WHERE
( aBoolean = :ABoolean or :ABoolean is null )
AND ( aInteger = :AInteger or :AInteger is null )
AND ( aString = :AString or :AString is null )
AND ( aDate < :ADate or :ADate is null )
AND ( aTimeStamp <= :ATimeStamp or :ATimeStamp is null )
}
/// - : ""
///<br> %INLIST.
Query test2( AList As %List ) As %SQLQuery ( CONTAINID = 1 , ROWSPEC = "ID:%String,aBoolean:%Boolean,aInteger:%Integer,aString:%String,aDate:%Date,aTimeStamp:%TimeStamp" ) [ SqlProc ]
{
SELECT %ID , aBoolean , aInteger , aString , aDate , aTimeStamp FROM pas . test WHERE ID %INLIST :AList
}
/// .
ClassMethod test3( AList As %List ) As %Status
{
; AList
write AList
;
set ^pastest=AList
quit $$$OK
}
/// .
ClassMethod test4() As %Status
{
quit $$$ERROR ( $$$GeneralError , "My error!" )
}
/// .
ClassMethod test5( Arg1... As %List ) As %Status
{
;
write "Invocation has " , $get (Arg1, 0), " element" , $select (( $get (Arg1, 0)=1): "" , 1: "s" ),!
for i = 1 : 1 : $get (Arg1, 0)
{
write :( $data (Arg1(i))>0) "Argument[" ,i, "]:" ,?15, $get (Arg1(i), "<NULL>" ),!
}
quit $$$OK
}
/// : .
/// <br> .
/// <br>:
/// <br><var>ID</var> - ;
/// <br><var>A</var> - ;
/// <br><var>BLOB</var> - ;
/// <br><var>RS1</var> - , Borland ┬о MyBase (DataSnap (TM)) XML DataSet;
/// <br><var>RS2</var> - , Borland ┬о MyBase (DataSnap (TM)) XML DataSet;
ClassMethod test6(
ID As %String ,
ByRef A As pas.a ,
Output BLOB As %BinaryStream ,
Output RS1 As %CharacterStream ,
Output RS2 As %CharacterStream ) As %Status
{
// ,
set A. aString =999
//
set BLOB= ##class ( %GlobalBinaryStream ). %New ()
//
do BLOB. Write ( "123" )
//
set RS1= ##class ( %GlobalCharacterStream ). %New ()
set RS2= ##class ( %GlobalCharacterStream ). %New ()
// , XML TClientDataSet
set cds= ##class ( %XML.ZMyBaseDataSet ). %New ()
//
do cds. Prepare ( "select * from pas.a where id %inlist ?" )
//
do cds. SetArgs ( $listbuild (1,2,3,9))
// XML
do cds. XMLExportToStream (.RS1)
// ( )
do cds. Close ()
do cds. Prepare ( "select ID,aBoolean,aInteger,aString,aDate,aTimeStamp from pas.test" )
do cds. XMLExportToStream (.RS2)
do cds. Close ()
// ""
quit $$$OK
}
}
рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд╛рде рд╣реА рдирд┐рдореНрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:
- % Library.ArrayOfDataTypes
- % рд▓рд╛рдЗрдмреНрд░реЗрд░реА
- % рд▓рд╛рдЗрдмреНрд░реЗрд░реА.рд▓рд┐рд╕реНрдЯрдСрдлрдСрдмреНрдЬреЗрдХреНрдЯреНрд╕
- % рд▓рд╛рдЗрдмреНрд░реЗрд░реА.рд▓рд┐рд╕реНрдЯрдСрдлрдбрд╛рдЯрд╛рдЯрд╛рдЗрдкреНрд╕
- % рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рдЕрдм, рдпрджрд┐ рдЖрдк рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ PAS рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЗ рдФрд░ рдЧреБрдг рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:
рд╡реГрджреНрдзрд┐рдиреЛрдЯ : рд╕реНрдЯреНрд░реАрдо рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХреЛ Cach├й DBMS рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CacheActiveX.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд╛рдпрд░реНрдб рд╣реИрдВ рдФрд░ рдЙрддреНрдкрдиреНрди рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВред
DBMS Cach├й рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди
рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (рдкреБрд░рд╛рдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА):
var _f:variant; begin _f:=CreateOleObject('CacheObject.Factory'); if _f.Connect(_f.ConnectDlg('+%up')) then ShowMessage('OK') else ShowMessage('ERROR');
рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА (рдирдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп):
var _f:variant; begin _f:=CreateOleObject('CacheActiveX.Factory'); if _f.Connect(_f.ConnectDlg('+%up')) then ShowMessage('OK') else ShowMessage('ERROR');
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд╛рдзреНрдпрдХрд╛рд░реА (рдирдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп):
type Tfm = class(TForm) f: TFactory; ... begin ... if f.Connect1(f.ConnectDlg('+%up')) then ShowMessage('OK') else ShowMessage('ERROR'); ...
рдиреЛрдЯ : рдкреБрд░рд╛рдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА % Service_CacheDirect рд╕реЗрд╡рд╛ рдФрд░ рдХреЗрд╡рд▓ рдЕрдирдзрд┐рдХреГрдд рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдирдпрд╛ %% Service_Bindings рдФрд░ рдЕрдиреНрдп рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред
TFactobry рд╡рд░реНрдЧ, рд╕рд╛рде рд╣реА рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг
ActiveX API рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдХреЙрд▓рд┐рдВрдЧ рдХреНрд╡реЗрд╢реНрдЪрди рдФрд░ рд╢реБрд░реБрдЖрддреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рддрд░реАрдХреЗ
CallBack рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдбреЗрд▓реНрдлреА рд╕реЗ
рдХреЙрд▓рдмреИрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рдбреЗрд▓реНрдлреАрдХреЙрд▓рдмреИрдХ .
dll рдлрд╝рд╛рдЗрд▓ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП
TCallback рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
var f:TFactory; Callback1: TCallback; mm: TMemo; ... f.SetOutput(Callback1.OleObject); ... procedure Tfm.Callback1TextChanged(Sender: TObject; const p_bstrText: WideString); begin mm.Lines.Append(p_bstrText); end;
рд╕рднреА рдбреЗрдЯрд╛ рд╣рдЯрд╛рдПрдВ
mm.Lines.Text:='KillExtent'#10#13;
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ, рднрд░рдиреЗ, рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдЖрдк рд╕рд░реНрдЧреЗрдИ рдХреБрдбрд┐рдиреЛрд╡ рдХреЗ рд▓реЗрдЦ рдореЗрдВ ActiveX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
ActiveX, CPP- рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ ред
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг:
... uses test_TLB, AxCtrls, ComObj, ActiveX, Types; ... const N = 3; var i: integer; _t: test_; _a: A; _s: s; rel: RelationshipObject; listStr: ListOfDataTypes; listA: ListOfObjects; arrStr: ArrayOfDataTypes; arrA: ArrayOfObjects; stream: IDispatch; begin Screen.Cursor := crSQLWait; mm.Lines.Text:='Save'#10#13; try try
рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд░реЛрдз (рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛)
var mm: TMemo; rs: TResultSet; ... mm.Lines.Text:='Extent'#10#13; rs.ConnectTo(IResultSet(f.ResultSet('pas.test', 'Extent'))); rs.Execute; while rs.Next do begin mm.Lines.Append(Format('ID = %s',[rs.GetDataAsString(1)])); mm.Lines.Append(Format('aBoolean = %s',[rs.Get('aBoolean')])); mm.Lines.Append(Format('aInteger = %s',[rs.Get('aInteger')])); mm.Lines.Append(Format('aString = %s',[rs.Get('aString')])); mm.Lines.Append(Format('aDate = %s',[rs.Get('aDate')])); mm.Lines.Append(Format('aTimeStamp = %s',[rs.Get('aTimeStamp')])); mm.Lines.Append('-----'); end; rs.Close; rs.Disconnect;
рдкреНрд░рд╢реНрди рдкрд░реАрдХреНрд╖рдг рез
var i: integer; ... mm.Lines.Text:='test1'#10#13; rs.ConnectTo(IResultSet(f.ResultSet('pas.test', 'test1'))); rs.SetParam(1, null); rs.SetParam(2, 50); rs.SetParam(3, null); rs.SetParam(4, '03.03.2001'); rs.SetParam(5, '1900-01-02 12:34:55.0'); rs.Execute; while rs.Next do begin for i := 1 to rs.GetColumnCount do mm.Lines.Append(rs.GetColumnName(i)+' = '+rs.GetDataAsString(i)); mm.Lines.Append('-----'); end; rs.Close; rs.Disconnect;
рдкреНрд░рд╢реНрди рдкрд░реАрдХреНрд╖рдг реи
var i: integer; syslist: TSyslist; ... mm.Lines.Text:='test2'#10#13;
рд╡рд┐рдзрд┐ рдкрд░реАрдХреНрд╖рдг 3ред рдХрдХреНрд╖рд╛ TSysList рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ (Cach├й рдореЗрдВ% рд╕реВрдЪреА)
mm.Lines.Text:='test3'#10#13;
рд╡рд┐рдзрд┐ рдкрд░реАрдХреНрд╖рдг 4ред рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
mm.Lines.Text:='test4'#10#13; try test_(f.Static('pas.test')).test4(); except on E: Exception do begin mm.Lines.Append(E.Message); end; end;
рдЯреЗрд╕реНрдЯ 5 рд╡рд┐рдзрд┐
mm.Lines.Text:='test5'#10#13;
рдЯреЗрд╕реНрдЯ 6 рд╡рд┐рдзрд┐
рдпрд╣ рдЙрджрд╛рд╣рд░рдг
% XML.ZMyBaseDataSet рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ
рдмреЛрд░рд▓реИрдВрдб┬о рдорд╛рдИрдмреЗрд╕ (рдбреЗрдЯрд╛рд╕реНрдирд╛рдк (рдЯреАрдПрдо)) рдПрдХреНрд╕рдПрдордПрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ ред рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
cds1,cds2:TClientDataSet; ... var _a:a; __a,blob,rs1,rs2:IDispatch; cs1,cs2:ICharStream; begin mm.Lines.Text:='test6'#10#13; try _a:=a(f.OpenId('pas.a','1')); __a:=_a; test_(f.Static('pas.test')).test6('1',__a,blob,rs1,rs2); cs1:=ICharStream(rs1); cs2:=ICharStream(rs2); mm.Lines.Append('A.aString = '+_a.aString); mm.Lines.Append('BLOB.Size = '+IntToStr(IBinaryStream(blob).size)); mm.Lines.Append('RS1.Size = '+IntToStr(cs1.size)); mm.Lines.Append('RS2.Size = '+IntToStr(cs2.size)); cds1.XMLData:=cs1.Data; cds2.XMLData:=cs2.Data; finally _a.SYS_Close; _a:=nil; __a:=nil; blob:=nil; rs1:=nil; rs2:=nil; cs1:=nil; cs2:=nil; f.ForceSync; end;
рдпреВрдирд┐рдХреЛрдб рдбреЗрдЯрд╛ рдХреЗ
% XML.ZMyBaseDataSet рд╡рд░реНрдЧ, рд╕рд╛рде рд╣реА рдЕрдиреНрдп рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЖрд╡реЗрджрди рд╡рд┐рддрд░рдг
рдирдП рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
C: \ Program Files \ Common Files \ InterSystems \ Cache \ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рднреА (рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░
regsvr32 рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
.exe ред
рдЙрджрд╛рд╣рд░рдг:
regsvr32.exe /s "C:\Program Files (x86)\Common Files\Intersystems\Cache\CacheQuery.ocx" regsvr32.exe /s "C:\Program Files (x86)\Common Files\Intersystems\Cache\CacheFormWizard.dll" regsvr32.exe /s "C:\Program Files (x86)\Common Files\Intersystems\Cache\CacheList.ocx" regsvr32.exe /s "C:\Program Files (x86)\Common Files\Intersystems\Cache\CacheActiveX.dll" regsvr32.exe /s "C:\Program Files (x86)\Common Files\Intersystems\Cache\vism.ocx" regsvr32.exe /s "C:\Program Files (x86)\Common Files\Intersystems\Cache\TL.dll"