|
ChinaUnix ->
SYBASE¼¼Êõ ->
¼¼ÊõÎÄÕ ->PB/PD -> ÕýÎÄ
PB»·¾³Ï·ֲ¼Ê½Ó¦ÓóÌÐòµÄ¿ª·¢
ÈÕÆÚ£º2007-07-06 ChinaUnix.net
Ò»¡¢·Ö²¼Ê½Ó¦ÓóÌÐò¸ÅÊö
¡¡¡¡·Ö²¼Ê½ÏµÍ³µÄ³öÏÖÔ´ÓÚ´«Í³µÄC/S½á¹¹µÄÈô¸É±×²¡£¬ÈçЧÂʵͣ¬°²È«ÐÔ²îµÈ£¬½áºÏµ½Êý¾Ý¿â·½ÃæÀ´Ëµ£¬È«ÇòµÄDNS£¨ÓòÃû½âÎöϵͳ£©ÏµÍ³ÊÇÒ»¸öºÜµäÐ͵ÄÀý×Ó£¬ÊÔÏëÈç¹û°ÑÈ«ÊÀ½çËùÓеÄÓòÃû¶¼¼¯Öе½Ò»Ì¨·þÎñÆ÷ÖÐÀ´½øÐйÜÀí£¬ÄÇ·þÎñÆ÷¿Ï¶¨»áÒò¸ºÔعýÖØ¶øÎÞ·¨Õý³£¹¤×÷£¬Õû¸ö»¥ÁªÍøÒ²¾Í̱»¾ÁË¡£
¡¡¡¡ÔÚ±àдC/S½á¹¹µÄÊý¾Ý¿âÓ¦ÓÃϵͳʱ£¬Í¬ÑùÒ²»áÓöµ½ÕâÀàÎÊÌ⣬ÄǾÍÊÇÈç¹û¿Í»§ÊýÁ¿ºÜ¶à£¬Êý¾ÝÁ¿ÓÖ¶¼ºÜ´óµÄÇé¿öÏ£¬·þÎñÆ÷µÄ¸ºÔؾͻáºÜÖØ£¬¶øÇÒÖØ¸´ÐÔ¹¤×÷ºÜ¶à£¬ÒòΪºÜ¶à¿Í»§·¢³öµÄ²éѯ¿ÉÄÜÍêÈ«Ïàͬ¶ø·þÎñÆ÷È´ÐèÒªÒ»Ò»½øÐвéѯ£»Í¬Ê±²éѯËã·¨´æ´¢ÓÚ¿Í»§¶Ë£¬Õâ¿ÉÄܲ»ÊʺÏһЩÉÌÒµ»·¾³£¬ÒòΪËã·¨±¾Éí¿ÉÄÜÊÇÐèÒª±£Ãܵġ£Èç¹ûÄܹ»ÔÚ´«Í³µÄ·þÎñÆ÷ºÍ¿Í»§»úÖ®¼äÔÙ¼ÓÒ»¸ö·þÎñÆ÷ÓÃÓÚ´æ´¢²éѯËã·¨ºÍÁÙʱ²éѯ½á¹û£¬ÔòÒÔÉÏÎÊÌâ¾ùµÃµ½Á˽â¾ö¡£ÕâÕýÊÇ·Ö²¼Ê½ÏµÍ³µÄ¹¤×÷ÔÀí¡£
¡¡¡¡¶þ¡¢ÔÚPB»·¾³ÏÂÈçºÎ½øÐзֲ¼Ê½Ó¦ÓóÌÐòµÄ¿ª·¢
¡¡¡¡ÏÂͼÊÇ·Ö²¼Ê½ÏµÍ³µÄ¹¤×÷ÔÀíͼ£º
 ͼ£¨Ò»£©
¡¡¡¡Ê×ÏÈ£¬·Ö²¼Ê½·þÎñÆ÷±ØÐ뽨Á¢ÓëÊý¾Ý¿â·þÎñÆ÷µÄÁ¬½Ó£¬¿ÉÒÔͨ¹ýODBC½Ó¿ÚÀ´ÊµÏÖ£¬±¾ÎIJ»ÔÚÐðÊö£¬ÏÂÃæÒª½²Êö¿Í»§¶ËÈçºÎͨ¹ý·Ö²¼Ê½·þÎñÆ÷À´·ÃÎÊÊý¾Ý¡£
¡¡¡¡ÔÚPB»·¾³ÏÂҪʵÏÖ·Ö²¼Ê½µÄ±à³Ì£¬Ê×ÏÈÔÚDTS¶Ë£¬ÐèÒªÓõ½Á½¸ö¶ÔÏó£¬Ò»¸öTransPort¶ÔÏóºÍÒ»¸ö²»¿ÉÊÓµÄÓû§¶ÔÏó£¨Class¨¤ Custom£¬Nonvisible Object£¬ÒÔϼò³ÆNVO£©£¬ÆäÖÐTransPort¶ÔÏóÓÃÓÚÏìÓ¦¿Í»§¶ËµÄÁ¬½ÓÇëÇó£¬NVO¶ÔÏóÓÃÓںͿͻ§¶Ë½øÐÐʵ¼ÊµÄÊý¾Ý´«Êä¡£ÔÚ¿Í»§¶ËÒ²ÐèÒªÓõ½Á½¸ö¶ÔÏ󣬷ֱðÊÇConnection¶ÔÏóºÍ´úÀí¶ÔÏó£¨NVO-Proxy£©£¬ÆäÖÐConnection¶ÔÏóÓÃÓÚ½¨Á¢µ½DTSµÄÁ¬½Ó£¬NVO-Proxy ʵ¼ÊÉÏÊÇÓëNVOÒ»Ò»¶ÔÓ¦µÄ£¬ËüÖ»ÊÇNVOµÄÒ»¸ö´úÀí£¬ÔÚ¿Í»§¶Ëͨ¹ý´Ë´úÀí¶ÔÏóÀ´µ÷ÓÃNVOµÄº¯ÊýÀ´ÊµÏÖÏà¹Ø¹¦ÄÜ¡£ ÒÔÏÂÊÇTransPort¶ÔÏóºÍConnection¶ÔÏóµÄ³£ÓÃÊôÐÔ¼°·½·¨£º
¡¡¡¡1¡¢TransPort¶ÔÏó
¡¡¡¡ÊôÐÔ£º
¡¡¡¡Driver£º¿ÉÑ¡µÄÖµÓÐËĸö£¬·Ö±ðÊÇWinSock¡¢NamedPipes¡¢OpenClientServerºÍLocal£¬ÓÉÓÚWinsockµÄͨÓÃÐÔ£¬Ò»°ãÇé¿ö϶¼Ñ¡ÔñWinsock¡£
¡¡¡¡Application£º¶ÔÓÚWinsock¶øÑÔÖ¸µÄÊǶ˿ںţ¬Óû§¿ÉÒÔÈÎÒâÖ¸¶¨£¬µ«±ØÐë´óÓÚ4096¡£
¡¡¡¡·½·¨£º
¡¡¡¡Listen()£ºÆäµ÷Ó÷½·¨ÊÇtransport.Listen£¨£©£¬¼´¿ªÊ¼¼àÌý£¬Èç¹ûµ÷Óóɹ¦Ôò·µ»Ø0¡£
¡¡¡¡StopListening()£ºÆäµ÷Ó÷½·¨ÊÇtransport.StopListening£¨£©£¬¼´½áÊø¼àÌý£¬Èç¹ûµ÷Óóɹ¦Ôò·µ»Ø0¡£
¡¡¡¡2¡¢Connection¶ÔÏó
¡¡¡¡ÊôÐÔ£º
¡¡¡¡Driver£ºÓëTransport¶ÔÏóÏàͬ
¡¡¡¡Application£ºÓëTransport¶ÔÏóÏàͬ£¬µ«Òª×¢ÒâÁ½Õß±ØÐëÒ»Ö¡£
¡¡¡¡Location£ºDTSµÄIPµØÖ·
¡¡¡¡·½·¨£º
¡¡¡¡ConnectToServer()£ºÆäµ÷Ó÷½·¨ÊÇconnection.ConnectToServer£¨£©£¬¼´Á¬½ÓDTS£¬Èç¹ûµ÷Óóɹ¦Ôò·µ»Ø0£¬ÏÔÈ»ÔÚµ÷Óøú¯Êý֮ǰ£¬DTS±ØÐë´¦ÓÚ¼àÌý״̬¡£
¡¡¡¡DisconnectServer()£ºÆäµ÷Ó÷½·¨ÊÇconnection.DisconnectServer ( )£¬¼´¶Ï¿ªÓëDTSµÄÁ¬½Ó¡£
¡¡¡¡CreateInstance()£ºÆäµ÷Ó÷½·¨ÊÇconnection.CreateInstance£¨variable£©,¼´½¨Á¢Ò»¸öNVOµÄ´úÀíÒÔ±ãµ÷ÓÃNVOµÄÏà¹Øº¯Êý¡£×¢ÒâÔÚµ÷Óøú¯Êý֮ǰ£¬±ØÐë±£Ö¤¿Í»§¶ËÒѾÓëDTS½¨Á¢ÁËÁ¬½Ó¡£
¡¡¡¡¶ÔÓÚNVOºÍNVO-Proxy¶ÔÏó£¬ÔÚDTSÖн¨ºÃNVOºó£¬ÎªÁËÔÚ¿Í»§¶ËÉèÖÃÆä´úÀí£¬¿ÉÒÔÏÈÔÚDTSÖÐÉèÖñ¾µØ´úÀí£¬È»ºó½«´Ë´úÀíÊä³öµ½¿Í»§¶Ë¡£¾ßÌåÉèÖ÷½·¨ÈçÏ£ºÔÚPBµÄÓû§¶ÔÏó»°åÖУ¬ÔÚÓû§¶ÔÏóÉϵã»÷Êó±êÓÒ½¡£¬Ñ¡Ôñ"Set Proxy Name"£¬ÊäÈë´úÀí¶ÔÏóµÄÃû³Æ²¢´æÅÌ£¬´ò¿ªPBµÄLibrary»°å£¬ÕÒµ½¸Õ²Å±£´æµÄ´úÀí¶ÔÏ󣬵ã»÷Êó±êÓÒ½¡²¢Ñ¡Ôñ"Export¡"½«´Ë´úÀí¶ÔÏó±£´æ³ÉÎļþ£¬×îºóÔÚ¿Í»§¶Ë½«´ËÎļþµ¼Èë¼´¿É¡£µ¼ÈëÒÔºó£¬ÔÚ¿Í»§¶Ë¾Í¿ÉÒÔͨ¹ý´Ë´úÀí¶ÔÏóÀ´µ÷ÓÃNVOµÄº¯ÊýÁË¡£
Èý¡¢ÊµÀý
¡¡¡¡ÏÈ¿´ÈçÏÂÁ½¸öͼ£¬Í¼¶þ±íʾDTS¶Ë£¬Í¼Èý±íʾClient¶Ë¡£ÆäÖÐDTSÒѾ½¨Á¢ÁËÓëÊý¾Ý¿â·þÎñÆ÷µÄÁ¬½Ó£¬Êý¾Ý´°¿ÚÖÐÏÔʾµÄÊÇËùÓеÄÊý¾Ý£»Client²¢Ã»ÓÐÊý¾Ý¿â½Ó¿Ú£¬¶øÊÇͨ¹ýDTS¼ä½ÓµÄ·ÃÎÊÊý¾Ý£¬ÔÚÊý¾Ý´°¿ÚÖÐÏÔʾµÄÊÇËùÓÐÄÐÐÔÖ°¹¤¡£
 ͼ(¶þ)
 ͼ(Èý)
¡¡¡¡¸Ã³ÌÐòµÄ´ó²¿·ÖÔ´´úÂëÈçÏ£º
¡¡¡¡DTS¶Ë£º
¡¡¡¡1¡¢Ê×Ïȶ¨ÒåÒ»¸öÈ«¾Ö±äÁ¿£ºTransport mytrans;
¡¡¡¡2¡¢ÔÚ"¿ªÊ¼¼àÌý"°´Å¥ÖÐÊäÈëÈçÏ´úÂ룺
long ll mytrans=create transport mytrans.driver="winsock" mytrans.application="5000" //¶Ë¿ÚºÅ mytrans.location="." //±¾µØ·þÎñÆ÷ ll=mytrans.listen() //¿ªÊ¼¼àÌý if ll<>0 then messagebox(string(mytrans.errcode),mytrans.errtext) return end if server.settranspool(12,16,10) //ÉèÖÃÁ¬½Ó»º³å£¬×¢Òâ"server"ΪӦÓõÄÃû³Æ this.text="ÕýÔÚ¼àÌýÖÐ..." this.enabled=false
¡¡¡¡3¡¢ÔÚ"½áÊø¼àÌý"°´Å¥ÖÐÊäÈëÈçÏ´úÂ룺
mytrans.stoplistening() //½áÊø¼àÌý destroy mytrans cb_1.text="¿ªÊ¼¼àÌý" cb_1.enabled=true
¡¡¡¡4¡¢½¨Á¢Ò»¸öNVO£º
¡¡¡¡ÀûÓÃPBµÄUser Objects»°å½¨Á¢Ò»¸öclass¨¤customµÄÓû§¶ÔÏ󣬽¨Á¢Óû§¶ÔÏóº¯Êýnvoretrieve(ref blob buffer,string filter) returns long£¬º¯ÊýÌåÈçÏ£º
long ll SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "Connectstring='DSN=person'" connect; //½¨Á¢ÓëÊý¾Ý¿âµÄÁ¬½Ó datastore datastore_buffer datastore_buffer=create datastore datastore_buffer.dataobject="dw_person" //dw_personÊÇÒ»¸öÊý¾Ý´°¿Ú datastore_buffer.settransobject(sqlca) datastore_buffer.retrieve() datastore_buffer.setfilter(filter) datastore_buffer.filter() ll=datastore_buffer.getfullstate(buffer) //º¯Êýgetfullstate()ºÍsetfullstate()³£ÓÃÓÚ·Ö²¼Ê½Ó¦ÓóÌÐò¡£ disconnect; return ll
¡¡¡¡5¡¢½¨Á¢NVOµÄ´úÀí¶ÔÏó
¡¡¡¡ÔÚÓû§¶ÔÏóÉϵãÊó±êÓÒ½¡£¬Ñ¡Ôñ"Set Proxy Name"£¬ÊäÈë"NVO_dw"£¬±£´æÓû§¶ÔÏó¡£
¡¡¡¡´ò¿ªLibrary»°å£¬½«"NVO_dw"Êä³öΪÎļþ£¬ÒÔ±ãÔÚ¿Í»§¶Ëµ¼Èë¸Ã´úÀí¡£
¡¡¡¡Client¶Ë£º
¡¡¡¡¡¡1¡¢´ò¿ªLibrary»°å£¬½«¸Õ²ÅÊä³öµÄÎļþµ¼Èë
¡¡¡¡¡¡2¡¢¶¨ÒåÁ½¸öÈ«¾Ö±äÁ¿£º
connection myconn nvo_dw proxy_dw
¡¡¡¡¡¡3¡¢ÔÚ"Á¬½Ó"°´Å¥ÖÐÊäÈëÈçÏ´úÂ룺
long ll myconn=create connection myconn.driver="winsock" myconn.application="5000" //±ØÐëºÍDTS¶ËµÄ¶Ë¿ÚºÅÒ»Ö myconn.location="192.168.6.1" //DTSµÄIPµØÖ· ll=myconn.connecttoserver() //½¨Á¢Á¬½Ó if ll<>0 then messagebox(string(myconn.errcode),myconn.errtext) return end if this.text="ÕýÔÚÁ¬½ÓÖÐ..." this.enabled=false cb_2.enabled=true cb_3.enabled=true
¡¡¡¡3¡¢ÔÚ"¶Ï¿ª"°´Å¥ÖÐÊäÈëÈçÏ´úÂ룺
myconn.disconnectserver() //¶Ï¿ªÁ¬½Ó destroy myconn cb_1.enabled=true cb_1.text="Á¬½Ó" cb_3.enabled=false this.enabled=false
¡¡¡¡4¡¢ÔÚ"²éѯ"°´Å¥ÖÐÊäÈëÈçÏ´úÂ룺
long result blob buffer myconn.createinstance(proxy_dw) //½¨Á¢´úÀí¶ÔÏó result=proxy_dw.nvoretrieve(buffer,"sex='ÄÐ'") //¼ìË÷ËùÓÐÄÐÐÔÖ°¹¤ result=dw_1.setfullstate(buffer) //dw_1ÊÇÒ»¸öÊý¾Ý´°¿Ú¿Ø¼þ
¡¡¡¡ËÄ¡¢Ð¡½á¼°×¢ÒâÊÂÏî
¡¡¡¡1¡¢ÒÔÉϳÌÐòÔÚWINDOWS'98¡¢PB6.0»·¾³Öе÷ÊÔͨ¹ý£¬ÔÚ¿Í»§ÊýÁ¿ºÜ¶à£¬Êý¾ÝÁ¿ºÜ´óµÄÇé¿öÏ£¬²éѯµÄËÙ¶È»á¿ìºÜ¶à¡£
¡¡¡¡2¡¢±à³ÌʱעÒ⣬Èç¹ûNVOµÄº¯ÊýÌå·¢Éú±ä»¯£¬ÔòÎÞÐëÖØÐÂÉú³É´úÀí£»Èç¹ûNVOµÄº¯Êý½Ó¿Ú·¢Éú±ä»¯£¬Ôò±ØÐëÖØÐÂÉú³ÉËüµÄ´úÀí²¢½«ËüÊäÈëµ½¿Í»§¶ËÖС£
¡¡¡¡3¡¢NVO¶ÔÏóÊÇÒ»¸ö²»¿ÉÊÓ¶ÔÏó£¬Ö»ÄÜͨ¹ýº¯Êýµ÷Óõķ½·¨Ê¹ÓÃËü£¬²»¿É½«Ëü×÷Ϊһ¸ö¿Ø¼þ·ÅÔÚ´°¿ÚÉÏ¡£
±¾Îı»ä¯ÀÀ´Î
| |
|