VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

VFP9.0¤¤³q¹LFFCÃþ®w¨Ï¥ÎGDI+

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
garfield
Site Admin


µù¥U®É¶¡: 2003-01-30
¤å³¹: 2157


²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¥| ¤­¤ë 05, 2011 8:08 pm    ¤å³¹¥DÃD: VFP9.0¤¤³q¹LFFCÃþ®w¨Ï¥ÎGDI+ ¤Þ¨¥¦^ÂÐ

­^¤å­ì§}:
http://msdn.microsoft.com/en-us/library/ms947605.aspx

yaur ²Åé½Ķ«áÂàÁcÅé:

VFP9.0¤¤³q¹LFFCÃþ®w¨Ï¥ÎGDI+
²Ä¤@³¡¤À
­ìµÛ: Walter Nicholls
½Ķ: YAUR
¤@®M·sªºGDI+ FFC¹Ï§ÎÃþ±NÀHµÛvfp9.0³Ì²×ª©¤@°_µo§G¡A¤£¹L§A¥i¥H¥hVFPªº©x¤èºô¯¸¤W(http://msdn.com/vfoxpro)ªº¤U¸ü»¡©ú¤¤¥ý¸@¬°§Ö¡C³o®MGDI+Ãþ¹w­p¦b8¤ë¤W¦¯©Î¤§«á¤£¤[´N¥i¥H¤U¸ü¤F¡A¥¦¥i¥H¦bvfp9.0 betaª©¤¤¨Ï¥Î¡A¤U¸üºô§}ÁÙ¬O¤WÃä´£¨ìªº¨º­Ó¡A¦b³o½g¤å³¹¤¤¡AWalter Nicholls ¤¶²Ð¤F¥»¨t¦C(¦@¥|³¡¤À)¤¤ªº²Ä¤@³¡¤À¡Gª½±µ¦bvfpªí³æ¤Wø¹Ï¡C
¦b vfp9¤¤³Ì¥O¤H´Á«Ýªº©M³ÌÅý¤H¿³¾Äªº·s¯SÂI¤§¤@´N¬O¼W±jªº³øªí¤ÞÀº¡A¾¨ºÞ³o­Ó³øªí¤ÞÀº¦³²³¦h¥O¤H¿E°Êªº¯SÂI¡A¤£¹L¡A³ÌÅý§Ú¿³¾Äªº¬O§Ú­Ì¥i¥H³q¹L½s¼g¥Î¤á¥~±¾µ{¦¡¨Ó­×§ï©MÂX®i³øªí¤¤Ãþ¥Øªº¥~Æ[
¹Ï1
¦³¨âºØ¤èªk¥i¥H°µ¨ì³o¨Ç¡A¨ä¤¤¤§¤@¬O¨Ï¥ÎReportListenerÃþ¡A¥¦´£¨Ñ¤F¤@ºØ¥i¥H¹_¦í(©ÎĶÃöÁpºÊ±± hook)³øªí²£¥Í©MÅã¥Ü¹Lµ{ªº¤èªk¡C¥t¥~¤@­Ó«h¬Oª½±µ³X°Ý¥Î¨ÓÅã¥Ü³øªíªºGDI+¹Ï§Î¤¶­±¡C
´N¹³¤@¥÷ÃB¥~ªº¬õ§Q¤@¼Ë¡Avfp9.0¤¤ªº¹ïReportListenerÃþªº¤@¨Ç¤ä«ù§ï¶i¨Ï±o¦b¨ä¥L¦a¤è¤]¥i¥H¨Ï¥ÎGDI+¡A°µ¤@­Ó¸Ô²Óªº­pµe¡A§A¤]¥i¥H¼g¥X¤@­Ó³æ¿Wªº¥i¥H¦bªí³æ¡B³øªí¤Wø¹Ï¡B¬Æ¦Ü±N¹Ï¤ù¦s¬°ÀÉ¡B¦s¤JºÏ¤ùªºGDIÃþ¡C
VFP¦Û±a¤F¤@®MÃþ®wªº¶°¦X¡AºÙ¤§¬°"¥\¯àÃþ"¡A´N¬O§Ú­Ì±`»¡ªºFFC,¦b9.0¤¤¥]§t¤F¤@­ÓÃþ®w¡G_GDIPPLUS.VCX,¥¦µ¹§A´£¨Ñ¤F¦bvfpÀ³¥Îµ{¦¡¤¤¨Ï¥ÎGDI+ªº±¶®|¡C
ª`¡G§Ú­Ì´Á±æGDI+Ãþ®w¯à°÷¦b2004¦~8¤ë¥÷ªº¦­¨Ç®É­Ô©Î¤§«á¤£¤[´N¯à°÷¦b·L³nªººô¯¸¤¤´£¨Ñ¤U¸ü¡A¤j®aª`·N·L³nªºvfp¥D­¶¤¤ªº¤@¨Ç¤½§i(http://msdn.com/vfoxpro)
¦b³o­ÓÃö©óGDI+ FFCÃþ®w¤¶²Ð¨t¦Cªº²Ä¤@³¡¤À¡A§Ú­Ì´£¨Ñµ¹§A­Ì¤@­Ó±Û­·¯ëªº®È¦æ¡A¨Ã¥B¤]¬°§A­Ì¥Ü½d¦p¦ó¦bvfpªºªí³æ¤Wø¹Ï¡A¦b²Ä¤G³¡¤À¡A§Ú±N¬°§A­Ì®i¥Ü¦p¦ó¨Ï¥Î¤@¨Ç§Þ¥©¨ÓÂX®i§Aªº³øªí¨t²Î¡Gµ²¦XGDI+Ãþ®w¨Ï¥ÎReportListenerÃþ¡C
§Ú±N°µªºÅý¥¦¬Ý°_¨Ó®e©ö¦Ü·¥
¬Ý¬Ý«e­±´X­¶¡A§ä§ä"¦p¦ó°µ¤@­Ó¶ê§Î¹Ï"³o¤@©¡¡A³o­Ó¹Ï¤ù¬O¤@­Ó³q¹L³o½g¤å³¹¦Ó§¹¦¨ªº¤@­Ó³Ì²×²£«~¡A¨Ã¥B§Ú©Ó¿Õ±N·|¨Ï³o­Ó¹Lµ{¬Ý¤W¥h«Ü®e©ö¡A¨ì¤å³¹ªºµ²§À¡A§A´N·|µo²{¡A³o¤@¤Á¬Oªºªº½T½Tªº«D±`²³æ¡C
ºò°O³o½g¤å³¹©Ò´y­zªº¬O°ò©ó vfp9 betaª©ªº(version 09.00.0000.1720). ©Ò¥H¦b¼g³o½g¤å³¹ªº®É­Ô¡Avfp9ªº¤@¨Ç¥\¯à¨Ã¤£¬O¤@¦¨¤£Åܪº¡A¥¦¥i¯à©M³Ì²×¥¿¦¡ª©¥Ñ¤@¨Ç¤£¦P¡AµM¦Ó¡A§AÀ³¸Ó¥i¥H¦¨¥\ªº¥Îvfp9 BETAª©¨Ó¨Ï¥Î³o¨Çµo§G¦b³o¸Ìªº½d¨Ò(¤å³¹ªþ±aªº¥Ü¨Ò)
FFCÃþ®w©MGDI+ APIªºÃö«Y
§Ú­Ì©Ò«üªº"GDI+"¹ê»Ú¤W¬°µ{¦¡®v´£¨Ñ¤F¦n´XºØ§Î¦¡¡C¦b.net¥@¬É¤¤¡A¥¦­Ì¦³System.Drawing ¥H¤Î»P¤§¬ÛÃöÁpªº©R¦WªÅ¶¡¡CC++µ{¦¡®v¨Ï¥Î¤@­Ó´X¥G®t¤£¦hªº¦bgdiplus.h¤¤ªºAPI©w¸q¡AµM¦Ó¡A³q¹LGDIPLUS.DLL(vfp¶}µo¤H­û¤]¥i¥H§Q¥Î³o¨Çapi¨Ó¶i¦æ¤¶­±¼W±j)´£¨Ñªº¤¶­±¹ê»Ú¤W¬O³QºÙ¤§¬°"GDI+ Flat API"ªº«D¥iµø¤¶­±¡C
¬°¤F¨ÏGDI+·F°_¬¡¨Ó§ó¥[®e©ö¡A·sªºVFP9ªºFFCÃþ®wGDIPLUS.VCX´£¨Ñ¤F¤@­Ó«D±`Ãþ¦ü©ó.net¨t²Î¤¤ System.Drawing ©R¦WªÅ¶¡ªºµøı¤Æ¤¶­±¡A³o´N·N¨ýµÛ¨º¨Ç³Ìªì¬°.NET©MC++µ{¦¡®v©Ò¼gªº®ÑÄy¡B¤å³¹©MÃþ¦ü©óMSDNªº°Ñ¦Ò¸ê®Æ³q¹L¨Ï¥ÎFFCÃþ®w¦P¼Ë¥i¥HÀ³¥Î¨ìVFP¤¤¡A·íµM¤@¨Ç¤pªº§ï°Ê¸Ó¬O­n°µ¦a¡C
¥D­nªº°Ï§O¦b©ó¡G
¡D ©Ò¦³ªºÃþ¦W³£³Q«a¥H"GP"¦r¥Àªº­º½X
¡D ¤@¨ÇÄݩʪº¦W¦r¬O¤£¦Pªº(¨Ò¦p¥ÎPenWidth¨Ó¥N´ÀWidth)
¡D ¥Î#define ¨Ó©w¸qªº±`¶q¤]·|¥[¤W"GDIPLUS_" ­º½X
¡D ¥¦¶È¶È¬OGDI+§¹¾ã¥\¯à¶°¦Xªº¤@­Ó¤l¶°¡A¤£¹LÂX®i°_¨Ó¬O®e©ö¦a
³o¨Ç¤£¦P¤¤ªº¤j³¡¤À®É¨M©w¤_¶}µo»y¨¥ªº¬ù§ô¡A¨Ò¦p¡A"Point"©M"Width"¦bvfp¤¤¦³¨ä¥Lªº§t¸q¡A integers©Mfloatsªº®t§O©M¨ä¥L¶}µo»y¨¥¤£¦P¡Aªí1®i¥Ü¤F_GDIPLUS.VCXªºÃþ©w¸q©M.net¤¤¬Û¦PÃþªº¹ï¤ñÃö«Y¡C
ªí1
FFC Ãþ ¥\¯à´y­z .NET Ãþ
GpGraphics ø¹Ï¤¶­±(µe¥¬)©Mø¹Ï¾Þ§@ Graphics
GpColor ¥Ñ¬õ¡BÂÅ¡Bºñ¤Îalpha²Õ¦¨ªºÃC¦â Color
GpPoint 2D¥­­±®y¼Ð Point, PointF
GpSize ¤Ø¤o¤j¤p (¼e«×, °ª«×). Size, SizeF
GpRectangle ¦ì¸m©M¤Ø¤o¶°¦X Rectangle, RectangleF
GpPen ø»sª½½u©M¦±½u Pen
GpBrush ¼Æ¦rµeµ§Ãþªº©â¶H°òÃþ Brush
GpSolidBrush ¨Ï¥Î¯Â¦â¶ñ¥R°Ï°ì SolidBrush
GpHatchBrush ¨Ï¥Î¹Ï®×¶ñ¥R°Ï°ì HatchBrush
GpFontFamily ´y­z¤@ºØ¦rÅ骺¦PÃþ¦rÅé (¨Ò¦p, "Arial"). FontFamily
GpFont ¥Î¨Ó­×¬O¤å¥»ªº¶°¦X¡A¥]¬A¤j¤p¡A¦rÅéµ¥ Font
GpStringFormat ¤å¥»±Æª©¡B±Æ¦C¸ê°T¡A¨Ò¦p¡G©~¤¤ StringFormat
GpImage ¹Ï¤ùÃþªº°òÃþ¡G¥]¬A¦V¶q¹Ï©MÂI°}¹Ï Image
GpBitmap ¥Ñ2D¹Ï¤¸¸ê°T°}¦C²Õ¦¨ªº¹Ï§Î Bitmap
¦bªí³æ¤W¨Ï¥ÎGDI+
·í§Ú¶}©l¦bvfp¤¤¨Ï¥ÎGDI+ªº®É­Ô¡A¦]¬°GDI+¦­¤w¦bVFP¤¤¨Ï¥Î¤F¡A©Ò¥H§Ú´Á±æ§Ú¯à§ó¦X²zªº¨Ï¥ÎGDI+¥\¯à¨Ã¥BÅý©Ò°µ±o¨Æ±¡Åܱo§ó¦n¡C¬Ý°_¨Ó¦ü¥G§Ú¬O¿ùªº¡A¤£¹L¦n¹³¤£¬O¤Ó¿ù¡A¦b¨Ï¥ÎGDI+¥\¯àªº®É­Ô¦³¨ÇÀô¸`§AÁÙ¬O­n¥J²Ó¤@ÂI¡A¦Ó¥B§Aªº¤u§@¤]¤£±o¤£¨ü¨ì¤@¨Ç¨î¬ù¡C
§Ú­Ì±N¨Ï¥ÎGDI+ªº¥\¯à¨Ó¦bªí³æ¤Wª½±µÃ¸»s¨Ó¨ú¥N³q±`¨Ï¥Îªº±±¨î¶µ¡A¨Ò¦p¹Ï¹³©M®e¾¹±±¨î¶µ¡A¤èªk´N¬O¨Ï¥Îªí³æ¨Æ¥ó¡GPaint()¡A¥¦¬O¦b­«Ã¸ªí³æ­I´º©M©Ò¦³ªí³æ¤Wªºª«¥óªº®É­Ô³QIJµoªº¡C
«O«ù²M¼äªºªí³æ¤¶­±
§AÀ³¸Ó­º¥ý½T«O§A·Qø»sªºªí³æ°Ï°ì¨S¦³³QVFP¤¤ªº¨ä¥L¥ô¦ó¾Þ§@©Îª«¥ó¨Ó¨Ï¥Î¡A§@¬°¶}©l½m²ßªº±¡ªp¡A¤£­n¦b¤W­±©ñ¸m¨ä¥Lªº±±¨î¶µ(«ö¶s¡B¤å¦r¤è¶ôµ¥)¡A¦]¬°¥¦­Ì±N¾É­P­«Ã¸½Ä¬ð¡A§Ú³ßÅw¦bªí³æ¤W©ñ¤@­ÓÁôÂ꺧Ϊ¬±±¨î¶µ¡A¦bø¹Ï§Y±Nµo¥Íªº®É­Ô±N¥¦Åã¥Ü¥X¨Ó¡A³o¤£¶È´£¿ô§Ú«O«ù¨ä¥L±±¨î¶µ¤£¨ÓÄÌÂZ¡A¤]¨Ï±o§Ú¦b½s¼g¨ä¤Wø¹Ïªº¦ì¸m©M¤Ø¤oªº¥N½Xªº®É­Ô¤è«K¤F³\¦h¡C
¦pªG§A·Q¦b¤@­Ó­¶­±©Î­¶®Ø¤¤Ã¸¹Ïªº®É­Ô¡A§A¥²¶·±Ä¥Î¤@¨Ç¾÷¨î¨Ó½T«O³o¨Çø¹Ï¥N½X¥u¯à¦b¬ÛÀ³ªº­¶­±³B©ó¬¡°Êªº±¡ªp¤U¤~¯à°õ¦æ¡C
³Ì«á¡A¤£­n§Ñ°O¤F¡¨?¡¨»y¥y©ÎªÌ¨Ï¥Î¤Fset talk on¾É­Pªº¿é¥X¡C§A¥i¥H¥Î±Nªí³æÄÝ©ÊAllowOutput ³]¸m¬°.F.ªº¤èªk¨ÓÁקK¿é¥X¡C¥¦¥i¥H¨¾¤îµ{¦¡±N§Aªºªí³æ§@¬°¬¡°Ê¿é¥Xµøµ¡¡A§Ú¸g±`¦b§Úªº°òÃþªí³æ¤¤³]¸m³o­ÓÄÝ©Ê¡A¦]¬°³o­Ó³]¸m±`±`¤£¤Ó®e©ö·Q°_¨Ó¡C
Áô«Ìø¹Ï
¬°¤F§ïµ½©Ê¯à,VFP³q±`¨Ï¥Î¤@­ÓºÙ¤§¬°¡¨Âù½w½Ä¡¨ªº§Þ³N¡A¦b³oºØ¼Ò¦¡¤U¡AVFP¤£¬Oª½±µ¦bµøµ¡¤¤Ã¸»s±±¨î¶µ¡A¨ú¥N¥¦ªº¬Oø»s¦¨¤@­ÓÁô«ÌÂI°}¹Ï¡AµM«á¦b»Ý­nªº®É­Ô½Æ»s³o­Ó¹Ï¹³¨Ó¨ê·sµøµ¡¡A³oºØ¾÷¨îªº³t«×»·¤ñ¨ººØ¦bµøµ¡©Îµøµ¡¤¤ªºª«¥ó¦b§ïÅܤj¤p¡B¦ì¸mµ¥ªº®É­Ô´N¨ê·s§Öªº¦h¡C
¤£²nªº¬O¡A§Ú­Ì«o¤£¯à¨Ï¥Î³oºØÁô«Ì¤¶­±¼Ò¦¡¡A¦]¬°¦bµøµ¡³Q¨ê·sªº®É­Ô«X§Ú­Ì¹ïªí³æ¤¶­±ªº©Ò¦³Ã¸¹Ï¾Þ§@·|³Q§R°£¡A¦Ó¥Bpaint()¨Æ¥ó¶È¶È¬O¦bÁô«ÌÂI°}¹Ï³Q­«Ã¸ªº®É­Ô¤~³QIJµoªº¡C
Áô«Ìø¹Ï
³ò¶³o­Ó¤u§@¬OÄÝ©ó¥»½g¤å³¹ªº½d³ò¤§¤ºªº¡A©Ò¥H²{¦bÀ³¸ÓÃö³¬Áô«ÌÂI°}¹Ïªº¼Ò¦¡¨Ó¹B¦æªþ±aªº¥Ü¨Ò¡A©ÎªÌ¤w¸gª¾¹D³o­Ó­­¨î¤F¡C§A¥i¥H¨Ï¥ÎSYS(602,0)¨Ó¸T¤î¨Ï¥ÎÁô«ÌÂI°}¹Ï¼Ò¦¡¡A¨Ï¥ÎSYS(602,0)´N¥i¥H§ï¦^¨Ó¤F¡C³o¬O¤@­Ó¥þ°ì³]©w¡A©Ò¥H§Ú¤£«Øij§A¦b§Aªºªí³æªºInit()¤¤©Î¨ä¥LªºÃþ¦ü¥þ°ì¨Æ¥ó¤¤¸ü¤J³o­Ó³]¸m¡C
GDI+ªì©l¤Æ
¦b¥ô¦óGDI+¥\¯à³Q¨Ï¥Îªº®É­Ô¡AGDI+¨t²Î¥²¶·³Q¡§±Ò°Ê¡¨¡CVFP¥i¥H¦Û°Ê°µ³o¨Ç¡A¤£¹L¶È¶È¬O¦b»Ý­nªº®É­Ô¡A¦p¨t²Î¦ÛµM¤]¤£ª¾¹D§Aªº·Qªk¡I©Ò¥H§A¥i¥H§¹¥þ¦Û¤v¨Ó¸ü¤JGDI+¡A¶È¶È¤@¥y¥N½X¡G
createobject( "ReportListener" )
§A¤£¥Î¾á¤ßGDI+ªºÄÀ©ñ¡AVFP·|¦bÀ³¥Îµ{¦¡Ãö³¬ªº®É­Ô¬°§A°µ³o­Óªº¡C
³]¸m¤@­Ó°ò¦¸ê®Æªí³æ
¦b¥»¤åªº³Ñ¾l³¡¤À¡A§Ú­Ì±N¨Ï¥Î¦P¼Ëªº°ò¦¸ê®Æªí³æ¨Ó·F¬¡¡A³o¬O¤@­Ómodeless, resizableªí³æ¡A¦Ó¥B¤WÃäÁÙ¦³¤@­Ó©~¤¤ÁôÂ꺧Ϊ¬±±¨î¶µ(shpPlaceholder)¡A¬Ý¹Ï2¡C§Ú±N¨Ï¥Î·sªºÁãÄÝ©Ê(VFP·s¼Wªº)¨Ó½T«O·íªí³æ¤Ø¤o§ïÅܪº®É­Ô³o­Ó§Îª¬±±¨î¶µ¤Ø¤o¤]¯àÅܤơCªí2®i¥Ü¤F¤@¨Çªí³æªº¥D­nÄÝ©Ê©M¤èªk¡A¦P¼Ë¦bªþ±aªº¤U¸üÀÉgpintro_blank.scx¤¤³o¨ÇÄݩʤw³Q·d©w¡C
¹Ï2
Äݩʤèªk ­È©Mªí­z
Width, Height 350, 250
AllowOutput .F.
BorderStyle 3 (Sizable)
Caption "Blank form - GDI+ Intro"
WindowType 0 (Modeless)
Init() * ½T«O GDI+ ¤w¸gªì©l¤Æ
createobject("ReportListener")
shpPlaceholder.Left, .Top, .Width, .Height 25, 25, 300, 200
shpPlaceholder.Anchor 15 («O«ù©Mªí³æ©Ò¦³Ãä¶Z¬Û¦P)
shpPlaceholder.Visible .F.
ªí2
§Ú°²©w§A¤w¸g½Æ»s¤FFFCÃþ®w¨ì§Aªº±M®×®Ú¥Ø¿ý¤¤ªºFFC/¥Ø¿ý¤¤¡A¦pªG¤£·Q³o¼Ë¡A½Õ¾ã¤@¤U¬ÛÀ³±o¸ô®|¡A²{¦b¡A§Ú­Ì·Ç³Æ¶}©l¨Ï¥ÎGDI+¡C
¥Xµo¡GGpGraphics¹ï¶H
­n·Qµøı¤Æªº¨Ó°µ³o¨Ç¨Æ±¡¡A§A»Ý­nGpGraphicsª«¥ó¡A¥¦´yø¤@­Óµøµ¡¤¶­±¡B¤@­Ó³øªí­¶©ÎªÌ¨ä¥L¥ô¦ó¥i¯àªºª«¥ó¡CGpGraphicsª«¥ó´£¨Ñ¤F¬d§ä(­×§ï)¤@­Óø¹Ï¤¶­±ªº¤Ø¤o©M¸ÑªR«×¡AÁÙ¦³Ã¸»s¤¶­±ªº¤èªk¡Aªí3®i¥Ü¤F¤@¨ÇGpGraphicsª«¥ó«D±`­«­nªºÄÝ©Ê©M¤èªk¡C
»¡©ú: ø»s¦UºØ§Îª¬ªº½ü¹ø
FillRectangle( oPen, x,y, width,height )
FillRectangle( oPen, oRect )
FillRectangles( oPen, aRects[] )
FillEllipse( oPen, x,y, width,height )
FillEllipse( oPen, oRect)
FillClosedCurve( oPen, aPoints[] )
FillPie( oPen, x,y, width,height, start,sweep )
FillPie( oPen, oRect, start, sweep )
FillPolygon( oPen, aPoints[] )
Description: ø»s¦UºØ¶ñ¥R¹Ï§Î
DrawImageAt( oImage, x,y )
DrawImageAt( oImage, oPoint )
DrawImageScaled( oImage, x,y,width, height )
DrawImageScaled( oImage, oRect )
DrawImagePortionAt( oImage, oDestPoint, oSrcRect, nSrcUnit )
DrawImagePortionScaled( oImage, oDestRect, oSrcRect, nSrcUnit )
»¡©ú: ø»s¹Ï§Î©Î¥b´V¹³.
DrawStringA( cString, oFont, oRect, [oStringFormat], [oBrush] )
DrawStringW( cUnicodeString, oFont, oRect, [oStringFormat], [oBrush] )
»¡©ú:ø»s¤å¦r.
MeasureStringA( cString, oFont, layoutarea, [oStringFormat], [@nChars], [@nLines]
MeasureStringW( cUnicodeString, oFont, layoutarea, [oStringFormat], [@nChars], [@nLines]
»¡©ú: ­pºâ¤å¥»ªº¤j¤p
ResetTransform()
TranslateTransform( xOffset, yOffset [,matrixorder] ) RotateTransform( nAngle [,matrixorder] )
ScaleTransform( xScale, yScale [,matrixorder] )
»¡©ú: §ïÅܹϧΧ¤¼Ð¨t
Save( @graphicsstate )
»¡©ú: «O¦s·í«e¹Ï§Îª«¥óªºª¬ºA¡C
Restore( graphicsstate )
»¡©ú: «ì´_«e¤@¦¸«O¦sªºª¬ºA¡C
ªí3
¦b¬Y¨Ç±¡ªp¤U¡AGDI+ª«¥ó¤w¸g¦s¦b¦Ó¥B§Ú­Ì»Ý­nµ¹¥¦¤@­Ó²³æªºVFP¤¶­±¡C¨Ò¦p¡AVFP9ªº³øªí¨t²Î¤º³¡´N¨Ï¥Î¤FGDI+¡C³øªí¤¤ªº¨C¤@­¶³£³Q¤@­Ó¹Ï§Îª«¥ó«Ê¸Ë¤F¡A³q¹L¦sÀx©óReportListenerªº¤@­ÓÄݩʸ̪º±±¨î½X¡A¦b³oºØ±¡ªp¤U¡A´N¦³¤@­Ó²³æªºGpGraphics¥Ü¨Ò¡A¦Ó¥B«XI§A¥i¥H³q¹L³o­Ó±±¨î½X¨Ó³X°Ý¥¦¡]§ó¸Ô²Óªº¤º®e¦b¤U½g¤å³¹¤¤´y­z¡^¡C
¦b¨ä¥L±¡ªp¤U¡A§A¥²¶·¦Û¤v³Ð«Ø¤@­ÓGDI+¹Ï§Îª«¥ó¡A¨Ò¦p¡G­nø»s¤@­Óªí³æ¡A§A¥²¶·³Ð«Ø¤@­Ó°ò©ó­ì©lªí³æµøµ¡ªº±±¨î½X(HWnd)ªºGpGraphicsª«¥ó¡C
local oGr as GpGraphics of ffc/_gdiplus.vcx
oGr = newobject('GpGraphics','ffc/_gdiplus.vcx')
oGr.CreateFromHWND( Thisform.HWnd )
GpGraphicsª«¥ó¤w¸g¦b³o­Óªí³æ¤¤¶i¦æ¤F¾A·íªº³]¸m¡A¥¦ªº®y¼ÐªÅ¶¡¬°¡]0¡A0¡^¦ì¸m¨Ó¥N´À¥ª¤W¨¤¡C¦pªG§A¨S¦³¤@­Ó¹w¥ý·d¦nªºGpGraphics°òÃþª«¥ó¡A¨Ò¦p§A­n²£¥Í¤@­ÓÂI°}¹Ï¨Ã¥B«O¦s¨ìÀÉ¡A¨º§A¥i¯à­n°µ«Ü¦h²Ó·Lªº¤u§@¡C
ø»s½u±ø©M§Îª¬
¬°¤F®i¥Ü²Ä¤@­Ó¥Ü¨Ò¡A§Ú±N«ùÄò§Ö³tªº¤¶²Ð¤@¨t¦CÃþ¡A§Ú­Ì±N±qø»s¤@­ÓÃþ¦ü©ó¹Ï3ªº¾ò¶ê§Î¨Ó¶}©l¡C
¹Ï3
­n¦bµøµ¡¤¶­±¤¤Ã¸»s¤@¨Ç¹Ï§Î¡A§Ú­Ì»Ý­n¤@­Ó¤u¨ã¡A¦b³o¤@¨B¤¤¡A§Ú­Ì¨Ï¥ÎGpPenª«¥ó¡A¥¦¥i¥Hø»s½u±ø(³o¸Ì¬O¾ò¶êªº½ü¹ø½u)¡C§Ú­Ì¤]»Ý­n³]¸mÃC¦â¤u¨ã¡A¨Ï¥ÎGpColorª«¥ó¡Aªí4©Mªí5¤¤¦C¥X¤F¤@¨Ç«D±`­«­nªºGpPen©MGpColorª«¥óªºÄÝ©Ê©M¤èªk¡C
ÄÝ©Ê/¤èªk¦W »¡©ú
PenColor µeµ§ÃC¦â(ARGB ­È)
PenWidth µeµ§¼e«×
PenType µeµ§Ãþ«¬ (°Ñ¦Ò GDIPLUS_PENTYPE_ ±`¶q).
Alignment µeµ§¹ï»ô¤è¦¡(°Ñ¦Ò GDIPLUS_PENALIGNMENT_ ±`¶q).
DashStyle ¨Ï¥Îªºµê½uÃþ«¬
Create( color [, width] [, unit] ) ¥Îµ¹©wªºÃC¦âµe¹Ï
CreateFromBrush( brush [, width] [, unit] ) ³Ð«Ø¤@­Ó°ò©ó¨ê¤lªºµeµ§
Init( color ) ³]©wªì©lÃC¦â
Init() ²£¥Í¤@­ÓªÅªºµeµ§ª«¥ó (¨Ï¥Î®É¥²¶·½Õ¥ÎCreate())
ªí4¡GGpPenªºÄÝ©Ê/¤èªk´y­z
ÄÝ©Ê/¤èªk¦W »¡©ú
Red Red component (0...255).
Green Green component (0...255).
Blue Blue component (0...255).
Alpha Alpha (³z©ú«×). 0 =§¹¥þ³z©ú,
255 =§¹¥þ¤£³z©ú
ARGB GDI+ ÃC¦â (32¦ì¾ã§Î°Ñ¼Æ).
FoxRGB Visual FoxPro ÃC¦â­È,¥i¥H¥Î RGB()©Î GETCOLOR() ¨ç¼Æªð¦^.ª`·N: ³o­Ó­È¤£¥]¬Aalpha¸ê°T, ¨Ã¥B­n±NAlphaÄݩʭȳ]¸m¬°§¹¥þ¤£³z©ú(255).
Set( red,green,blue [,alpha] ) ³]¸mÃC¦â (¦pªG¨S¦³¨î©wAlpha,¨ºÀq»{¬° 100% ¤£³z©ú)
Init( red,green,blue [,alpha] ) ³Ð«Ø¯S©wªºÃC¦â(¦pªG¨S¦³¨î©wAlpha,¨ºÀq»{¬° 100% ¤£³z©ú)
Init( argb ) ³Ð«Ø³æ¤@ªºGDI+ color
Init() ³Ð«ØÀq»{ÃC¦â¡A¶Â¦â
ªí5¡GGpColorªºÄÝ©Ê/¤èªk´y­z
¥H¤U¥N½X³Ð«Ø¤F¤@­Ó²`ÂŦ⪺GpColorª«¥ó
oLineColor = newobject( ;
'GpColor','ffc/_gdiplus.vcx','', 0,0,100 )
¥H¤U¥N½X³Ð«Ø¤F¤@­Ó°ò©ó¥H¤WÃC¦âªºGpPenª«¥ó¡A¦Ó¥B¨î©w¼e«×¬°3¹Ï¤¸
oPen = newobject('GpPen', 'ffc/_gdiplus.vcx' )
oPen.Create( m.oLineColor, 3 )
­n¦bªí³æ¤¶­±¤¤Ã¸»s¤@­Ó¾ò¶ê§Î¡A§Ú­Ì¨Ï¥ÎGpGraphicsª«¥óªºDrawEllipse¤èªk¡A¥H¤U¥N½X±N¨Ï¥Î¤§«e³Ð«Øªºµeµ§ª«¥ó¨Óø»s³o­Ó¾ò¶ê¡A¥¦ªº¦ì¸m¬O¥Ñ§Ú­Ì¤§«eÁôÂ꺨º­Ó¥e¦ì¤¸§Îª¬ª«¥ó©Ò¨M©wªº¡C
oGr.DrawEllipse( m.oPen ;
, Thisform.shpPlaceholder.Left ;
, Thisform.shpPlaceholder.Top ;
, Thisform.shpPlaceholder.Width ;
, Thisform.shpPlaceholder.Height ;
)
±N³o¨Ç¥N½X©ñ¸m¨ìªí³æªºPaint()¨Æ¥ó¤¤¡A·í§A¹B¦æ¥H«á¡A§A´N¯à¬Ý¨ì¦p¹Ï3ªº¼W±j¹Ï§Î¤F¡C
Ãö©ó¯x§Î
¦b±µ¤U¨Óªº³o­Ó¨Ò¤l¤¤¡A§Ú­Ì±N¦A¦¸¨Ï¥Î¦P¼Ëªº®y¼Ð¡A¬°¤F¸`¬Ù¥N½X¡A§Ú­Ì±N³Ð«Ø¤@­ÓGpRectangleª«¥ó¨Ã¥B±N¤§§@¬°¤@­Ó³æ¿W±o°Ñ¼Æ¨Ó¤Þ¥Î¡A³o¸ÌÁÙ¬Oø»s¾ò¶êªº¥N½X¸H¤ù¡A³o®É§Ú­Ì¨Ï¥ÎGpRectangleª«¥ó¨Ó©w¸q¾ò¶ê°Ï°ìªº½d³ò¡C
oBounds = newobject( ;
'GpRectangle','ffc/_gdiplus.vcx','' ;
, Thisform.shpPlaceholder.Left ;
, Thisform.shpPlaceholder.Top ;
, Thisform.shpPlaceholder.Width ;
, Thisform.shpPlaceholder.Height ;
)
oGr.DrawEllipse( m.oPen, m.oBounds )
¶ñ¥R°Ï°ì¡G¨ê¤l
²{¦b¡AÅý§Ú¨Ó¥Î¶qºñ¦â¨Ó¶ñ¥R³o­Ó¾ò¶ê¡A¬°¤Fø»s¶ñ¥R°Ï°ì¡A§Ú­Ì»Ý­n¤@­Ó·sªº¤u¨ã¡G¨ê¤l¡CGDI+ FFCÃþ®w´£¨Ñ¤F´X­Ó¨ê¤l¡A¦ý¬O¥Î¬K¦â¨Óø»s§Ú­ÌÁÙ¬O­n¥ÎGpSolidBrushª«¥ó¡C
* ³Ð«Ø¤@­Ó«Gºñ¦âªº¨ê¤l
local oFillColor as GpColor of ffc/_gdiplus.vcx ;
, oBrush as GpSolidBrush of ffc/_gdiplus.vcx
oFillColor = newobject( ;
'GpColor','ffc/_gdiplus.vcx','' ;
, 0,255,0 ) && green
oBrush = newobject( ;
'GpSolidBrush', 'ffc/_gdiplus.vcx', '' ;
, m.oFillColor )
­n¦b¿Ã¹õ¤W¶ñ¥R¾ò¶ê¡A§Ú¥i¥H¨Ï¥ÎFillEllipse()¤èªk¡C
oGr.FillEllipse( m.oBrush, m.oBounds )
­nø»s¾ò¶êªº½ü¹ø½u¡A§Ú­Ì¥²¶·­º¥ý½Õ¥ÎFillEllipse()¤èªk¡AµM«á¨Ï¥ÎDrawEllipse()¡C³Ì«á§A´N¯à¬Ý¨ì¦p¹Ï4©Ò¥Üªºµ²ªG¤F¡C
¹Ï4
¨Ó­Ó »æ§Î¹Ï «ç»ò¼Ë¡H
²{¦b§A¤w¸g¦³¤F¨Ç°ò¦¡A¨Ó¬Ý¬Ý«ç»òµe¤@­Ó »æ§Î¹Ï §a¡C¤U­±ªº¥N½X§Ú¥Î¤F¤@­Ó¥]§t2¦Cªº°}¦C§@¬°ªí³æÄÝ©Ê¡A¨C1¦C³£¬°»æ§Î¹Ïªº1­Ó¤Á¤ù´£¨Ñ¸ê®Æ¡A¨Ó¬Ý¤@¤U°°¥N½X¡G
aSliceData[ nRow, 1 ] = data value
aSliceData[ nRow, 2 ] = fill color for the slice
(in GDI+ ARGB format)
nSliceTotal = total of all the data values
Paint¡]¡^¨Æ¥ó·|½Õ¥Î³o­Ó°}¦C¨Ã­pºâ¾A·íªº¨¤«×¨Óµe³o­Ó»æ§Î¹Ï¡C³o¸Ì¦³­Ó·s·§©À¡GDrawPie¡]¡^©MFillPie¡]¡^¤èªk¡A¥L­Ì´N¶HDrawEllipse ©M FillEllipse ¤@¼Ë¡A¥Î¤@­Ó °_©l¨¤ ©M¤@­Ó ±½´y¨¤¡]¤Á¤ùªº¤@­Ó½d³ò¡^¡A¨Ó´y­z ¤Á¤ù¨¤«×¡C
±`¦¡§Ú³o¬O¬G·N§Ë±o²³æ¨Ç¡A¨ä¹ê§A¥i¥H«Ü®e©ö¦aÂX®i¦o¡A¤ñ¦pÅã¥Ü¼ÐÅҩμаO­È¡]©Î³\§A­n§â¨ä¤¤¤@­Ó¤Á¤ù©ì¥X¨Ó¡^¡C¾¨ºÞ¥Î»·ºÝªºSQL¬d¸ßÀò¨ú¤Á¤ù¸ê®Æ¥i¯à¤£¬O­Ó¦n¥D·N¡A¦ý§A¤]§O¦bPaint¡]¡^¨Æ¥ó¤¤©ñ¤Ó¦hªº¥N½X¡C
¤U­±ªº¬OPaint¡]¡^ªºÃöÁä¥N½X¡A§¹¾ãªº·½½X¦bªþ±aªº gpintro_piechart.scx ¸Ì¡A¹Ï5¬O°õ¦æµ²ªG¡C
¹Ï5
* Create the drawing objects
local oLineColor as GpColor of ffc/_gdiplus.vcx ;
, oPen as GpPen of ffc/_gdiplus.vcx ;
, oBrush as GpSolidBrush of ffc/_gdiplus.vcx
oLineColor = newobject( ;
'GpColor','ffc/_gdiplus.vcx','' ;
, 0,0,0 ) && black
oPen = newobject( ;
'GpPen', 'ffc/_gdiplus.vcx','';
, m.oLineColor ) && 1-pixel-wide pen
oBrush = newobject( ;
'GpSolidBrush', 'ffc/_gdiplus.vcx','' )
oBrush.Create() && don't specify colour yet
* Work out from the slice data what the starting
* angles should be
local nSlices
nSlices = alen(This.aSliceData,1)
local aAngles[m.nSlices+1], iSlice
aAngles[1] = 0 && start at 0 degrees (+ve x axis)
for iSlice = 2 TO m.nSlices
aAngles[m.iSlice] = aAngles[m.iSlice-1] ;
+ 360*This.aSliceData[m.iSlice-1,1]/This.nSliceTotal
endfor
aAngles[m.nSlices+1] = 360 && Stop at full circle
* Draw the pie slices
for iSlice = 1 to m.nSlices
oBrush.BrushColor = This.aSliceData[m.iSlice,2]
oGr.FillPie(m.oBrush, m.oBounds ;
, aAngles[m.iSlice] ;
, aAngles[m.iSlice+1] - aAngles[m.iSlice])
oGr.DrawPie(m.oPen, m.oBounds ;
, aAngles[m.iSlice] ;
, aAngles[m.iSlice+1] - aAngles[m.iSlice])
endfor
¼g¤W¤å¥»
³Ì«á¤@¨B¬O¦b»æ§Î¹Ï¤W¼g¤W¤@¨Ç¤å¥»¡C¦]¬°»æ§Î¹Ï¤W¥]§t¤F«Ü¦h¤£¦PªºÃC¦â¡A¤@¯ë¼Ë¦¡ªº¤å¦r¥i¯àÃø¥H¾\Ū¡A¦]¦¹§Úµ¹¦o±a¤W³±¼v¡AÅý§Ú­Ì¦b¹Ï¤W¼g¤@­Ó¡§VFP9 is cool¡I¡¨¡C³o¸Ì¦³­Ó·s¤u¨ã¡GGpFontÃþ¡A¸Ô¨£ ªí6¡C
ÄÝ©Ê/¤èªk¦W »¡©ú
FontName ¦rÅé¦WºÙ¡A¤ñ¦p¡G"Arial."
Style ¤ñ¦p¡G²ÊÅé¡B±×Åé¡]GDIPLUS_FONTSTYLE_ bitsªº¶°¦X¡^
Size ¦r¤j¤p
Unit Àq»{¬Opoints¡]1/72­^¤o¡^
Create( fontname, size [,style [,unit]] ) «ü©w¦rÅé¦r§Î«Ø¥ßGDI+ªº¦rÅ骫¥ó
Create( GpFontFamily, size [,style [,unit]] ) «ü©w¦r«¬®a±Ú©M¦r§Î«Ø¥ßGDI+ªº¦rÅ骫¥ó
Init( fontname/family, size [,style [,unit]] ) ªì©l¤Æ¤@­ÓªÅªºGpFont¨Ã½Õ¥ÎCreate()
GetHeight( GpGraphics ) Àò¨ú«ü©wªºGpGraphicsª«¥óªº¦rÅé¦æ¶¡¶Z
GetHeightGivenDPI( nDPI ) ¥Î«ü©wªº¸ÑªR«×¡]ÂI/­^¤o¡^Àò¨ú¦rÅé¦æ¶¡¶Z
ªí6¡GGpFontÃþ
¦b³o­Ó»æ§Î¹Ï¤W¼g¦r¡A§Ú­Ì«Ø¥ß¤@­ÓGpFontª«¥ó¡A³]¬° Arial¡A²ÊÅé¡A32Points°ª¡G
oFont = newobject('GpFont','ffc/_gdiplus.vcx')
oFont.Create( "Arial" ; && font name
, 32 ; && size in units below
, GDIPLUS_FONTSTYLE_BOLD; && attributes
, GDIPLUS_UNIT_POINT ; && units
)
§Ú­ÌÁٻݭn¤@­ÓBrushª«¥ó¡ABrush«e­±§Ú¤¶²Ð¹L¡A§Ú­Ì¥²¶·«ü©w³o¨Ç¦r¼g¦b­þ¨à¡Ð¡ÐÅý§Ú­Ì§â¦o©ñ¨ì¹Ïªº¤¤¶¡¡C§Ú­Ì¤w¸g¦³¤F¤@­ÓGpRectangleª«¥ó©w¸q¤FÃä¬É¡A¦]¦¹³Ì«á¤@¨B´N¬O§i¶DGDI+¦p¦ó¦b³o­Ó¯x§Î¤¤±Æª©¡C¨º»ò¡AÅwªï¨Ó¨ì GpStringFormatÃþ¡]½Ð¬Ýªí7¡^
* Get a basic string format object, then set properties
oStringFormat = newobject( ;
'GpStringFormat','ffc/_gdiplus.vcx')
oStringFormat.Create( )
oStringFormat.Alignment ;
= GDIPLUS_STRINGALIGNMENT_Center
oStringFormat.LineAlignment ;
= GDIPLUS_STRINGALIGNMENT_Center
ÄÝ©Ê/¤èªk¦W »¡©ú
Alignment ¤å¥»ªº¤ô·Ç¹ï»ô¤è¦¡
LineAlignment ««ª½¹ï»ô
FormatFlags ½Ð¬Ý gdiplus.h ¸Ìªº GDIPLUS_STRINGFORMATFLAGS_ ±`¶q
Trimming ¦p¦óTRIM¤@­Ó¦r¦ê
HotkeyPrefix Windows "hotkey" ­º½X
Create( [flags] [, languageID] ) «Ø¤@­Ó·sªº¦r¦ê®æ¦¡ª«¥ó
GetGenericDefault( [lMakeClone] ) ½Æ»s¤@­ÓÀq»{¦r¦ê®æ¦¡©ÎÀò¨ú¤@­ÓÀq»{¦r¦ê®æ¦¡ªº±±¨î½X
GetGenericTypographic( [lMakeClone] ) ½Æ»s¤@­ÓÀq»{¦r¦ê®æ¦¡¦¡¼Ë©ÎÀò¨ú¤@­ÓÀq»{¦r¦ê®æ¦¡¦¡¼Ëªº±±¨î½X
ªí7¡GGpStringFormatÃþªº¤@¨ÇÄÝ©Ê©M¤èªk
³o­Ó¦r¦ê§Ú­Ì­nµe2¦¸¡G¤W­±¬O¯Â¦â¡A°¾²¾´XÂI¦A¨Ó­Ó¥b³z©úªº³±¼v¡C³o¸Ì¤S­n¸ÑÄÀ¤@­Ó·s·§©À¡GÃC¦â­Èªº¡§alpha¡¨¤¸¥ó¡C¥N½X¦p¤U¡G
* Now draw the text with a drop-shadow.
* First, shrink the bounding box by 4 pixels
* and move 4 pixels to the right and down
oBounds.W = oBounds.W - 4
oBounds.H = oBounds.H - 4
oBounds.X = oBounds.X + 4
oBounds.Y = oBounds.Y + 4
* and draw the shadow in a 66% black
oBrush.BrushColor = 0xA8000000
oGr.DrawStringA( This.cOverlayText ;
, oFont, oBounds, oStringFormat, oBrush )
* Now move the bounding box back to its original
* position, and draw the same string in opaque white
oBounds.X = oBounds.X - 4
oBounds.Y = oBounds.Y - 4
oBrush.BrushColor = 0xFFFFFFFF
oGr.DrawStringA( This.cOverlayText ;
, oFont, oBounds, oStringFormat, oBrush )
§A²{¦bÀ³¸Ó¥i¥H¬Ý¨ì¦p ¹Ï6 ©Ò¥Ü¡Cª`·N¡G­n¬O§ARESIZE³o­Óªí³æ¡A³o¤å¥»¤]·|¸òµÛ¦ùÁY¡C§AÁÙ¥i¥H¥Î GpStringFormatª«¥ó ªº¨ä¥LÄݩʱ±¨î¦oªº¦ùÁY¡C
¹Ï6
µ²§ô»y
§A­nª`·N¼g¤å¥»ªº¤èªk¥s¡§DrawStringA¡¨¦Ó¤£¬O¡§DrawString¡¨¡A³o¬O¦]¬°³o­Ó¨ç¼Æ¦³2­Óª©¥»¡CDrawStringA¬°VFP¤¤8¦ì¤¸ªº¦r¦ê¦Ó³]­p¡ADrawStringW¬°16¦ì¤¸ªºUnicode¦r¦ê¦Ó³]­p¡]³o­ÓW¬OWIDEªº·N«ä¡^¡C³o¦P¼Ë¥Î©óReportListener¡A¦b¨º¸Ì§A¥ÎUnicode©¹©¹¤ñ¥ÎVFPªº¦r¦ê­È§ó¦n¡C
«Ø¤@­Ó¶HGpGraphics©MGpFont³o¼ËªºGDI+ª«¥ó¬O»Ý­n¥N»ùªº¡]«Ü¥eCPU¸ê·½¡^¡C¬°¤F´£°ª©Ê¯à¡A§A¥i¥H½w½Ä³o¨ÇPaint¡]¡^¨Æ¥ó¡A¦ý§A¥²¶·ª`·N¦³®É³o¨Ç½w½Ä·|¥¢®Ä¡A¤ñ¦p¡Aªí³æRESIZE¤F¡A©Î§Aµeªº¨º­Ó¸j©w®Ø§ïÅܤFµ¥µ¥¡C
©Ê¯à¤è­±ÁÙ¦³¨Ç¤p§Þ¥©¡C¦pªG§A²ßºD¥ÎARGB­È¡A§A´N§¹¥þ¥i¥H¤£¨Ï¥ÎGpColorª«¥ó¡Ð¡Ð§A¨Ï¥Î32¦ì¤¸ªºÃC¦â­È´N¦n¤F¡CÁÙ¦³­Ó§Þ¥©¥i¥H¥R¤À´£°ª©Ê¯à¡GÂù½w½Ä¡A¤£¹L³o­Ó§Þ¥©¦b¥t¤@½g¤å³¹¸Ì­±¡C
¤U­Ó¤ë¡G¹Ïªí¦b³øªí¤¤ªºÀ³¥Î
³o­Ó¨t¦Cªº¤U­Ó¤ë³¡¤À¡A§Ú­n®i¥Ü¦p¦ó§â¹Ïªí²¾¨ìVFP9ªº³øªí¸Ì­±¡A¦Ó¥BÁÙ¦³«Ü¦h¦³½ìªº§Þ¥©¡C







¡@
»ïÁÂ
¸g±`¨Ó BOE ªºªB¤Í³£ª¾¹D¡A§Ú¦­´N¬O¤@­Ó·~¾lªº Foxer ¤F¡AÀHµÛ®É¶¡ªº±À²¾¡A¨C¤@¦¸¼gªF¦è³£¬O´m´m¤£¦wªº¡A¯uªº¾á¤ß§Ë¥X¤@¨Ç»~¾É¨¥½×©ÎªÌ¬O¶M¯º¤j¤è¡C
¨C¤@¦¸§¹¦¨ªì½Z§Ú³£·|µ¹¤@¨ÇªB¤Í¹wÄý¡A¦nťť¥L­Ìªº«Øij¡Cº©¨BªÌ¡BBoby¡B±N¨Ó¬O§Ú ³o¤T¦ìºô¤Í´N¬O§Úªº²Ä¤@§åŪªÌ¡A·PÁÂ¥L­Ì¤@¦¸¤S¤@¦¸Åª¨º¨Ç±âÀߪº¨¥»y¡B²z¸Ñ¤£¦¨¼ô«ä·Q¡C¯S§O¬Oº©¨BªÌ¡A´X¥G¦¨¤F§Úªº¨p¤H¯µ®Ñ¡A´N®³³o½gªF¦è¨Ó»¡¡A¥¿¤å¤¤©Ò¦³ªº¤p¼ÐÃD³£¬O¥L¥[¤Wªº¡C¥L»¡¡A³o¼Ë¯àÅýŪªÌ®e©ö¬ÝÀ´¡K¡K
¦¨¤å«á¡AÄݤWªº³£¬O§Úªº¦W¦r¡A¯u¬O¦³¥Õ¥e§O¤H³Ò°Êªº¶ûºÃ¡A³o¸Ì¦V³o¨ÇªB¤Íªí¥Ü²`²`¦a·PÁ¡I
¼g¦b¶}©l
¨º¤@¤é¡A§Ú³s©]µ¥«Ý Visual FoxPro 8¤U¸ü¡Aª½¨ìÕæ±á2ÂI¡A¹ê¦b¬O¼õ¤£¤U¥h¡A³o¤~ºÎ¤U¡F4ÂI®É¤À¡A³Q¾xÄÁ¶Ê¿ô¡AºÎ²´ÂaÄg¤¤¬Ý¨ì¤F Visual FoxPro 8 ªº¤U¸ü³s±µ¡A°g°g½k½kªº¤]ª¾¹D°Ê§@¬O«ç¼Ë§¹¦¨ªº¡A¤Ï¥¿¦­¤W¿ô¨Ó Visual FoxPro 8 ¤w¸g¦b§ÚªºµwºÐ¤W¤F¡C¸ÑÀ£¡B¦w¸Ë¡A¤@°}¿³¾ÄÃø¥H¨¥ªí¡F©¿¤S·Q°_¡AÁÙ­n¤W¯Z¡A©ó¬O¿N½L¡B¨«¸ô¡K¡K³o¼Ë¡A¶}©l¤F§Úªº Visual FoxPro8 ±´¯Á¤§®È¡C
­ì¨Ó¥H¬°¡A¤w¸g¬Ý¹L¤j¶q­ìª©¸ê®Æ¡]·PÁ ©]¨Ó­»¡BRMH¡BFbilo ¥L­Ì¤w¸g½Ķ³o¨ÇªF¦è¡A­^¤å¤£¦nªºªB¤Í²{¦b¤]¯à¨É¥Î¤F¡^¡A§Ú¬ã¨sVisual FoxPro ¥u»Ý­n¤Ö¶qªººë¤O¡C¼K¼K¡A½Öª¾¹D¡G§Ú³ºµMªá¶O¤F¾ã¾ã10¤Ñ¤~¬Ý§¹¤F§Ú©Ò·P¿³½ìªºªF¦è¡C¦Ó¥B¬O¨C¤Ñ§@¾Ô¨ìÕæ±á¡A®a¤H·N¨£¤£¤Ö¡A¦ý¬O¥L­Ì­þª¾¹D§Ú¼Ö¦b¨ä¤¤©O¡H
¤µ¦~10¤ë¡A·L³n¤½¥q¦p´Áµo§G¤F Visual FoxPro 8b ª©¡A³o¬O¦Û Visual FoxPro 3 ¥H¨Ó¤S¤@­Óºë±mªºª©¥»¡A¤@¤U¤l§l¤Þ¦í¤F¥þ²y Foxers ªº²´²y¡I¤U¤å¬O§Ú¾Ç²ß¡B±´¯Á Visual FoxPro 8bªº¤@¨Ç·P¨ü¡AÄ@»PŪªÌ¤À¨É¡C
¡]¤@¡^µ²ºc¤Æ²§±`³B²z
¸g±`¦³¤H°Ý§Ú¡A§A»{¬° Visual FoxPro ³Ì»Ý­n§ï¶iªº¦a¤è¦b¨º¸Ì¡C§ÚÁ`¬O¤£°²«ä¯Á¦a¦^µª¡G²§±`³B²z¡I´Á¬ß¥¦¯à¾Ö¦³µ²ºc¤Æ²§±`³B²z¾÷¨î¡A§â²§±`¤Î¨ä³B²z­­©w¦b³Ì¤pªº½d³ò¤§¤º¡A¨Ï¥N½Xªº«Ê¸Ë§óÀu¡C
Visual FoxPro 8 ¥H«e¹ï²§±`³B²zÁÙ­­©ó¥þ°ì On Error ±`¦¡©Mª«¥óªº Error ªº¨Æ¥ó¡A¥¦­Ì³£¦³³o¼Ë¤@­Ó¤ò¯f¡G¤@¥¹¥X²{¤F²§±`¡Aµ{¦¡´N¥²¶·¸õ¥X¥¿¦b°õ¦æªºµ{¦¡¼Ò²Õ¡A°õ¦æ²§±`³B²z±`¦¡¡A³o®Éµo¥Í²§±`«e°õ¦æªºµ{¦¡¼Ò²Õªº¤W¤U¤å¤w¸g¥á¥¢¬pºÉ¡A¨t²Î«ÜÃø½Õ¾ã¨ì¥¿±`ª¬ºA©ÎªÌµ¹½Õ¥Î¤¶­±¤@­Ó©ú½TªºµªÂСI
Visual FoxPro 8ªº Try¡KCatch¡KFinally¡KEnd Try µ²ºcÅý¤H¿E°Ê¤£¤w¡A¥¦À°§U§Ú­Ì¤è«Kªº§ì¦í¡§²§±`¡¨¡A§Y®É°w¹ï¦UºØ²§±`°µ¥X¤ÏÀ³¡AÁY¤p²§±`ªº¼vÅT½d³ò¡A«OÅ@¨t²Îªº¹B¦æª¬ºA¡F¤]¨Ï±oµ{¦¡¼Ò²Õªº«Ê¸Ë©Ê§ó¦n¡C·Q·Q¥H«eÀ³¥I¡§²§±`¡¨¦Ó³]­pªº¦UºØ¤è®×¡A¤@©]¤§¶¡¦¨¤F©õ¤é¶Àªá¡BÅã±o¨º¼Ë»a¥ÕµL¤O¡A¯u¬O¡§·É®üÅÜ®á¥Ð¡¨°Ú¡I
¶È¦¹¤@¶µ¼W±j¡AVisual FoxPro 8´N¤w¸g¥ú±m¹Ü¥Ø¡A¬Û«H¥ô¦ó¶}µo¤H­û³£¸g¤£°_¡§µ²ºc¤Æ²§±`³B²z¡¨ªº»¤´b¡A¤É¯Å¨ìVisual FoxPro 8¡I
¡]¤G¡^CursorAdapter Ãþ
Visual FoxPro 8´£¨ÑªºCursorAdapter Ãþ¤]¬O¤j®a©Ò¬z¬z¼Ö¹Dªº¡CCursorAdapter ¬O¤@­Ó°ò©óÃP´²½¢¦X«ä·Q³]­pªºª«¥ó¤Æªº Cursor ³B²z¼Ò«¬¡C
1¡BVFP8¥H«eªº¸ê®Æ³B²z
¦b Visual FoxPro 8 ¤§«e¡A§Ú³o¼Ëµû»ù¦b Visual FoxPro ¸Ìªº¸ê®Æ³B²z¡GÆF¬¡¦Ó±j°·¡A­±¦V°O¿ý³B²z¬°¥D¡B­±¦V¶°¦X³B²z¬°»²¡A±Ä¥Î¹Lµ{¤Æµ{¦¡¤Æ¼Ò«¬¡A¦ý¥i¥H§Q¥Îª«¥ó¾É¦Vªº XBase »y¨¥¦Û¦æ«Ê¸Ë¸ê®Æ³B²zª«¥ó¡C
»¡¨ìVisual FoxPro ³B²z¸ê®ÆªºÆF¬¡©M±j°·¡AÂk®Ú¨ì©³¬OVisual FoxPro ¦P®É¤ä´© XBase»y¨¥©MSQL »y¨¥¡CXBase »y¨¥µ½©ó¹ï°O¿ýªº®Þ²z¡A³oºØ³B²z©¹©¹¬O°ò©ó¡§¦æ¡¨ªº¼Ò¦¡¡FSQL »y¥y¹ï¸ê®Æªº³B²z¬O®Ú¾Ú¡§¶°¦X¡¨ªº·§©À¡A«ö·Ó±ø¥ó¨ú±o¡§¶°¦X¡¨¡AµM«á³B²z¡CµL½×±Ä¥Î XBase »y¨¥³B²z¸ê®Æ¡AÁÙ¬O¨Ï¥Î SQL»y¨¥¡AVisual FoxPro ¹w³]´£¨Ñ­±¦V¹Lµ{ªº¸ê®Æ³B²zµ{¦¡¤Æ¼Ò«¬¡A¦Ó¤£¬O¬y¦æªºª«¥ó¾É¦Vªºµ{¦¡¤Æ¼Ò«¬¡C¡]·íµM¡AVisual FoxPro ¨Ã¤£­­¨î¶}µo¤H­û½s¼g¦Û¤vªº¸ê®Æ³B²zª«¥ó¡C¡^
¨º»ò¦b Visual FoxPro ¤¤©Ò¿×ªº¡§¸ê®Æ¡¨¨ì©³¬O¤°»ò©O¡H¬O Cursor¡I¦bVisual FoxPro ¤¤¾ã­Ó¸ê®Æ³B²z¬O³ò¶µÛ Cursor ¶i¦æªº¡]¦Ó¤£¬O DBF¡^¡A©Ò¥Hª«¥ó¤Æ¸ê®Æ³B²z¼Ò«¬¤]À³¸Ó±q Cursor µÛ¤â¡I
2¡Bª«¥ó¾É¦Vªº¸ê®Æ³B²z¾¹
¦b Visual FoxPro ³]­pª«¥ó¤Æªº Cursor ¬O¨S¦³¤Ó¤jªº·N¸qªº¡A³o¥y¸Ü«Ü¬ð¤a¡BÅý¤HºN¤£¨ìÀY¸£¡I
§Ú­Ì¥Î¨å«¬ªºª«¥ó¤Æ´å¼Ð¢w¢wADO ¤¸¥óªº RecordSet °µ¤ÀªR¡C¥i¥Hµo²{RecordSet ¤¤©w¸q¤F¸ê®Æ¶°¦Xªº¨Ó·½¡B¸ê®Æ¶°¦Xªºµ²ºc(ªíµ²ºc)¡B¸ê®Æªº§ó·s¦^°e¤è¦¡¡A¥t¥~RecordSetÁÙ¯à°÷¹ï¸ê®Æ¶°¦X¶i¦æ¾Þ§@¡A½Ñ¦pMove¡BFind¡BDelete¤§Ãþªº¤èªk¡C
¦b Visual FoxPro ¸Ì¹ï¶H¤Æ Cursor¡A¬O¤£¬O­n·Ó·h RecordSet ªº¤@®M©O¡H¦pªG¥Ñ§Ú­Ì¨Ó³]­p³o­Óºc¬[¡A§Ú­Ì¦p¦ó¨ú±Ë©O¡H§Úı±o¨S¦³¥²­n¹ê²{¹ï Cursor ¥»¨­ªº«Ê¸Ë¡A³o¼Ë¬O¦b¦Û´Ý¡A§Ú­è¤~¤w¸g»¡¹L¤F¡G¾ã­Ó Visual FoxPro ¹ï¸ê®Æªº³B²z´N¬O¹ï Cursor ªº³B²z¡A¦pªG«Ê¸Ë¤FCursor¡A´N­IÂ÷¤F¾ã­ÓÅé¨tªººc¬[«ä¸ô¡A¦P®É¤]©ñ±ó¤F Visual FoxPro ¹ï¸ê®Æ³B²zªº¡§ÆF¬¡»P±j°·¡¨ªº¯S¦â¡C³o´N¬O«e­±´£¨ìªº¡§¦b Visual FoxPro ³]­pª«¥ó¤Æªº Cursor ¬O¨S¦³¤Ó¤jªº·N¸qªº¡¨¡C
ª«¥ó¤Æ Cursor ¨S·N¸q¡A¨º»ò§Ú­Ì¨s³º»Ý­n¤°»ò©O¡H
¥Î¤@­Óª«¥ó¾É¦Vªº Cursor ªº³B²z¡]ºÞ²z¡^¾¹¨ÓºÞ²z Cursorªº¸ê®Æ¨Ó·½¡BCursor ªº¸ê®Æµ²ºc¡BCursor ¤¤¸ê®ÆÅܰʪº§ó·s¦^°e¡F¦ÓCursor ¨Ì¬O¶Ç²Î·N¸q¤Wªº Cursor¡A¨S¦³¥ô¦ó§ïÅÜ¡A¨ÌÂÂ¥i¥H¥Î XBase ©ÎªÌ SQL »y¨¥¹ïª½±µ Cursor ¶i¦æ³B²z¢w¢w³o¤~¬O§Ú­Ì»Ý­nªº¡C
»¡¨ì³o¸Ì¡A¤j®a·|°Ý¤F¡A³o¤£´N¬ODBC ¤¤ªºµø¹Ï¶Ü¡H¥¦­Ì¦b¹ê²{ªº¥\¯à¤W½T¹ê¦³ÂI¹³¡A¦ý¹ê½è¤W¬O¦³®t§Oªº¡G
­º¥ý¡Aµø¹Ï¬O DBC ªºª«¥ó¡]¤¸¥ó¡^¡A§Q¥Îµø¹Ï³]­pªº¨t²Î¹ï DBC ªº¨Ì¿à©Ê¤j¡A¤£²Å¦X¦h¼hÅé¨tºc¬[ªº«ä¸ô¡C¦Ó§Ú­Ìªºª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹»P DBC µLÃö¡A§¹¥þ¬Oµ{¦¡³]­p¯Å§O¤Wªº·§©À¡C±q¦h¼hÅé¨t³]­pªºÆ[ÂI¬Ý¡AÄÝ©ó·~°ÈÅÞ¿è¼h¦¸¡C
¦AªÌ¡Aµø¹Ï¬O¸ê®Æ®w¤¤ªº·§©À¡AÆF¬¡©Ê®t¡B¥i±±¨î©Ê®t¡F¦Óª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹´N¤£¤@¼Ë¤F¡A§@¬°ª«¥ó¡A¨ã³Æ¤Fª«¥ó¾É¦Vµ{¦¡³]­pªº¤@¤Á¦n³B¡A«Ü®e©ö©w¸q¡B§ïÅÜ¡BºûÅ@¡A§ó¯à°÷Ä~©Ó¨Ï¥Î¡A³o³£¬O¨Ï¥Îµø¹Ï©Ò¿ì¤£¨ìªº¡C
ÀH«K´N¯àÁ|¥X´X­Óµø¹Ï®z¶Õªº¨Ò¤l¡A¦³®É­Ô¸ê®Æ¶°¦Xªºµ²ºc¤@­P¡A¦ý¬O¸ê®Æ¨Ó·½¤£¤@¼Ë¡A´N¥²¶·³Â·Ðªº³]­p´X­Óµø¹Ï¡A¦Ó¨Ï¥Îª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹´N¥u»Ý­n§ïÅܸê®Æ¨Ó·½ÄÝ©Ê¡F¤S¨Ò¦p¡A¸ê®Æ¨Ó·½¬Û¦P¡B¸ê®Æ¶°¦Xµ²ºc¬Û¦P¡A¥u¤£¹LÀò¨ú¸ê®Æªº±ø¥ó¤£¦P¡]Where ¤l¥yºc³y¤£¤@¼Ë¡^¡A¥Îµø¹Ï´N¥²¶·³]­p·sªºµø¹Ï¡A¦Ó¨Ï¥Îª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹¥u»Ý­n§ïÅܬÛÃöÄݩʧY¥i¡K¡K
»¡¨ì©³¡Gµø¹Ï¬O¸ê®Æ®wªº·§©À¡A¨ã³Æªº¬O¸ê®Æ®wª«¥ó¡]¤¸¥ó¡^ªº¯S©Ê¡A¦Ó¤£¨ã³Æµ{¦¡¤Æ»y¨¥ªº¯SÂI¡Aª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹¸Ñ¨Mªº´N¬O³o­Ó°ÝÃD¡C
3¡BÃP´²½¢¦X
¦bµø¹Ï®É¥N©ÎªÌ¬ORecordSet®É¥N±Ä¥Îªº¬Oºò±K½¢¦Xªº«äºû¡A»¡ªºª½¥Õ¤@ÂI¡A´N¬O¡G¸ê®Æ±q­þ¸Ì¨Ó´N§ó·s¨ì­þ¸Ì¥h¡Aµ{¦¡®v¨Ã¤£¯à¦b¨ä¤¤°µ¤°»ò¤z¯A¡A¤@¥¹°õ¦æ¤FTableUpdate()¡A´N¦Û°Ê§ó·s¸ê®Æ¨Ó·½¡A¨S¦³°Ó¶qªº¾l¦a¡I
ÃP´²½¢¦X´£¨Ñ¤F¤@ºØ¶}©ñªº¼Ò«¬¡A¥¦¥H Cursor ¬°¤¤¤ß¡A±q¥»½è¤W»{ÃѨì Cursor »P¸ê®Æ·½ªº¬Û¤¬Ãö«Y¬O¡G¸ê®ÆÀò¨ú©MÅܰʧó·s¦^¼g¡C¸ê®ÆÀò¨ú´N¬O SQL-Select¾Þ§@¡B¸ê®Æ§ó·s¦^¼g´N¬OSQL-Insert¡BSQL-Update¡BSQL-Delete¡CÃP´²½¢¦X¼Ò«¬´£¨Ñ Cursor ¸ê®Æ¨Ó·½ªºSelect¤lª«¥ó¡BCursor ¸ê®Æ²K¥[¦^¼g¸ê®Æ¨Ó·½ªº Insert¤lª«¥ó¡BCursor ¸ê®Æ­×§ï¦^¼g¸ê®Æ¨Ó·½ªº Update ¤lª«¥ó¡BCursor¸ê®Æ§R°£¦^¼g¸ê®Æ¨Ó·½ªº Delete ¤lª«¥ó¡C¥Ñ©ó±qºc¬[¤W§âCursor»P¸ê®Æ¨Ó·½ªº¦UºØ¤¬°Ê¾Þ§@¤À³Î¶}¨Ó¡A¦A»²¥H¨Æ¥ó¼Ò«¬¡A³o´Nµ¹¤F¶}µo¤H­û«Ü¤jªºµ{¦¡¤Æ¾l¦a¡I
¬Û¤ñ¤§¤U¡Aµø¹ÏÁöµM¤]±Ä¥ÎÃþ¦üªº«ä¸ô»P¸ê®Æ¨Ó·½¤¬°Ê¡A¦ý¬O¥¦§â¾ã­Ó¤¬°Ê¹Lµ{§@¬°¤@­Ó¾ãÅé¬Ý«Ý¡AÄYÄY¹ê¹êªº¥]¸Ë°_¨Ó¡A³y¦¨¶}µo¤H­ûªº°Ñ»P©Ê®t¡C
4¡BVFP8ªºCursorAdapter¹ï¶H
Åý§Ú­Ì¦^¹LÀY¦A¬Ý Visual FoxPro 8 ´£¨Ñªº CursorAdapter ª«¥ó¡A¹w³]±¡ªp¤U¤ä´©¥|ºØ¸ê®Æ¨Ó·½¡A¤À§O¬O¡GNative¡]¥»¦a¸ê®Æ¡^¡BADO¡BODBC¡BXML¡C½Ð«ä¦Ò¤@¤U¡A¬°¤°»ò CursorAdapter ¯à°÷¤ä´©´XºØ©Ê½è§¹¥þ¤£¦P¸ê®Æ¨Ó·½©O¡A­ì¦]´N¬O±Ä¥Î¤FÃP´²½¢¦X¼Ò«¬¡AÅý¶}µo¤H­û¥Î¦Û¤vªº¥N½X°Ñ»P¸ê®ÆªºÀò¨ú¡A¨Ï±o¾ã­ÓÅé¨tªºÂX®i©Ê¤j¤j¼W±j¡A³o´N¬OÃP´²½¢¦Xªº¾y¤O¡I
·§¬AVFP8¤¤ªºCursorAdapter¡A¥¦¬O¡G¤@­Ó°ò©óÃP´²½¢¦X«ä·Q³]­pªºª«¥ó¤Æªº Cursor ³B²z¼Ò«¬¡CCursorAdapter ¬J«O¯d¤F Visual FoxPro ¹ï Cursor ³B²zªº¶Ç²ÎÀu¶Õ¡A¤S¤Þ¤J¤F¥ý¶iªºµ{¦¡¤Æ¼Ò«¬©Mºc¬[¡C¦A¦¸±j½Õ¥¦ªº¯S¦â¡G
Cursor ¥»¨­¨S¦³³Qª«¥ó¤Æ¡A¨Ì¬O¶Ç²Î·N¸q¤Wªº Cursor¡A¥i¥H¨Ï¥Î¤@¤Á¶Ç²Î»y¥y³B²z Cursor¡C
Cursor ªººÞ²z¤è¦¡ª«¥ó¤Æ¤F¡A¥iµ{¦¡¤Æ©Ê§ó¦n¡A¦³§Q©ó¥N½Xªº«Ê¸Ë¡C
±Ä¥Î¤FÃP´²½¢¦Xªº³]­p«äºû¡A¥H Cursor ¬°¤¤¤ß¡B¦ý¤S¤À³Î¤F Cursor »P¸ê®Æ¨Ó·½¤§¶¡ªº¦UºØ¾Þ§@¡B¦A¥[¤J¨Æ¥ó¼Ò«¬¡A¬°¶}µo¤H­û´£¨Ñ¤F«Ü¦h°Ñ»Pªº¾÷·|¡C
¡@
¡]¤T¡^¥þ·sªº¡§³s±µ¡¨
Visual FoxPro 8¦b²§ºc¸ê®Æ®wµ{¦¡¤Æªº¼W±j¡A§óª½±µ¤@¨Ç´N¬O¹ï SQL Server¤ä«ùªº§ï¶i¡C§Úı±o¡A¦Ü¤ÖÅé²{¦b¨â­Ó¤è­±¡G¤@­Ó¬O³q¹L CursorAdapter ª«¥ó´£¨Ñ¤@ºØ¤ñ»·ºÝµø¹Ï§ó¥[ÆF¬¡¡B§ó®e©öµ{¦¡¤Æªº Cursor ºÞ²zª«¥ó¡F¥t¤@­Ó¬O¦b­ì¦³ªº°ò¦¤W­²·s¤F¡§³s±µ¡¨ªº·§©À¡A¨Ï±o¡§³s±µ¡¨³B²z§ó¥[¿W¥ß¡B¡§³s±µ¡¨ºÞ²z§ó¥[¤è«K¡B¡§³s±µ¡¨§ó®e©ö³Q¦@¥Î¡I
«e­±§Ú­Ì¤w¸g¹ïCursorAdapter§@¤F¤ÀªR¡A±µ¤U¨Ó´NÅý§Ú­Ì¬Ý¬Ý¡§³s±µ¡¨ªºÅܤƧa¡I
1¡BDBC ¤¤ªº¡§³s±µ¡¨ª«¥ó©M¡§³s±µ±±¨î½X¡¨
¥H«e§Ú¤¶²Ð Visual FoxPro ¸Ìªº¡§³s±µ¡¨®É¡A¸g±`±j½Õ³o¼Ë¨â­Ó·§©À¡GDBC ¤¤ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^©M¡§³s±µ±±¨î½X¡¨¡C
DBC ¤¤ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¥u¬O¤@ºØ©w¸q¡A´y­z«ç¼Ë³q¹L ODBC ³s±µ¨ì¸ê®Æ¨Ó·½¡F¡§³s±µ±±¨î½X¡¨¬O²£¥Í¹êÅ骺¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¡C§Ú­Ì¥i¥H³q¹LUSE»·ºÝµø¹Ï©ÎªÌ¨Ï¥Î SQLCONNECT() ¥´¶}¡§³s±µ¡¨ª«¥ó¡A±o¨ì¡§³s±µ±±¨î½X¡¨¡C
·íµM³o¸ÌÁÙ¦³¨â­Ó§ó¥[ª½±µªº¤è¦¡±o¨ì¡§³s±µ±±¨î½X¡¨¡A´N¬O¦bSQLSTRINGCONNECT()¤¤ª½±µ¨Ï¥Î³s±µ¦r¦ê¡FÁÙ¦³´N¬OSQLCONNECT()¤¤ª½±µ¤Þ¥Î§@·~¨t²Î¡]ODBC.INI¡^¤¤ªºDSN ©w¸q¡C³o¸Ì»Ý­nª`·Nªº¬O¡A³o¨âºØ¤è¦¡¸õ¹L¤F DBC ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¡A¨Ï±oVisual FoxPro ¤£®e©öºÞ²z¥¦­Ì¡C¤]³\³o­Ó°ÝÃD¦b Visual FoxPro 8 ¥H«eÁÙ¤£«Ü©úÅã¡A¦ý Visual FoxPro 8 ¥H«áÀ³¸Ó·V¥Î¥¦­Ì¤F¡C
Visual FoxPro 8 ¥H«e¡A¡§³s±µ±±¨î½X¡¨¨Ã¤£¿W¥ß¡A¥D­n¬O¡§»·ºÝµø¹Ï¡¨¦Û¤vºÞ²z¡§³s±µ±±¨î½X¡¨¡A¨ä¥¦¡§»·ºÝµø¹Ï¡¨©ÎªÌ SPT»Ý­n¦@¥Î¡§³s±µ±±¨î½X¡¨¬O«D±`³Â·Ðªº¡A¡§»·ºÝµø¹Ï¡¨¤§¶¡¦@¥Î¡§³s±µ±±¨î½X¡¨¡A»Ý­n©w¸q©Ò¦³°Ñ»P¦@¥Îªº¡§»·ºÝµø¹Ï¡¨ªºShareConnectionÄݩʬ°.T.¡FSPT ­n¨ú±o¡§»·ºÝµø¹Ï¡¨ªº¡§³s±µ±±¨î½X¡¨¥²¶·¦bUSE¡§»·ºÝµø¹Ï¡¨¥H«á¡A¨Ï¥Î CURSORGETPROP() ¨ç¼Æ¨ú±o¡§³s±µ±±¨î½X¡¨¡C°£¤F³Â·Ð¥H¥~¡AÁÙ¦³¤£¯à¹ê²{ªº¥\¯à¡A¦p¥ý´Á¤w¸g¦s¦bªº¡§³s±µ±±¨î½X¡¨¤£¯à³Q¡§»·ºÝµø¹Ï¡¨¦@¥Î¡C³o¤@¤Á³£¬O¦]¬°¡§»·ºÝµø¹Ï¡¨¤Ó¹L¡§¦Û¥D¡¨©Ò­P¡I
2¡BStatement Handle Vs. ¡§³s±µ±±¨î½X¡¨
¬°¤F¸Ñ¨M¡§»·ºÝµø¹Ï¡¨ªº¡§¿WÂ_±M¦æ¡¨¡AVisual FoxPro 8 ´£¥X¤F¡§»·ºÝµø¹Ï¡¨³]­p®É»P¹B¦æ®É¤ÀÂ÷ªº«ä¸ô¡A¤Þ¤J¤F¤@­Ó·sªºÃö©ó¡§³s±µ¡¨ªº·§©À¢w¢w Statement Handle¡A¦P®É Visual FoxPro 8 «O¯d¤F¡§³s±µ±±¨î½X¡¨·§©À¡C
±q Visual FoxPro 8 ¶}©l¶}µoªÌª½±µ³B²zªº¥ô¦óHandle ³£¬O Statement Handle¡A¦Ó¤£¬O¡§³s±µ±±¨î½X¡¨¤F¡I¶i¤@¨BÁ¿¡A¡§»·ºÝµø¹Ï¡¨¨Ï¥Îªº¬O Statement Handle¡BSPT¨Ï¥Îªº¤]¬O Statement Handle¡C¤]´N¬O»¡¡A§Ú­Ì¦b DBC ¸Ì«Ø¥ß¡B³]­p¡§»·ºÝµø¹Ï¡¨¨Ï¥Îªº³s±µ»P¡§»·ºÝµø¹Ï¡¨¹B¦æ®Éªº³s±µ¥i¥H¨S¦³¥ô¦óÃö«Y¡A§Ú­Ì¥i¥H¦b USE »y¥y¤¤§Y®É«ü©w¡§»·ºÝµø¹Ï¡¨±N­n¨Ï¥ÎªºStatement Handle¡C³o´N¬O Visual FoxPro 8 °w¹ï C/S µ{¦¡¤Æ¤¤¡§³s±µ¡¨ªº¤@­Ó§ï¶i¡C
Statement Handle »P¡§³s±µ±±¨î½X¡¨ªºÃö«Y¡C§Ú¥H¬°¡G
? ¡§³s±µ±±¨î½X¡¨¬O Statement Handle ªº°ò¦¡AStatement Handle ¬O¡§³s±µ±±¨î½X¡¨ªº­l¥Í¡F
? ¯u¥¿»P¸ê®Æ¨Ó·½³s±µªº¬O¡§³s±µ±±¨î½X¡¨¡A¦Ó¤£¬OStatement Handle¡F¶}µo¤H­ûª½±µ¾Þ§@ªº¬OStatement Handle¡A¦Ó¤£¬O¡§³s±µ±±¨î½X¡¨¡F
? ¬Y¤@±ø¡§³s±µ±±¨î½X¡¨¥i¥H­l¥Í¥X¤@±ø©ÎªÌ¦h±øStatement Handle¡A¦Ó¬Y¤@±ø Statement Handle¥u¥i¯à¹ïÀ³¨ì¤@±ø½T©wªº¡§³s±µ±±¨î½X¡¨¡F
? ·s«Ø¤@±ø³s±µªº¹ê¨Ò¡A±N¡]¥i¯à¡^²£¥Í¤@±ø·sªº¡§³s±µ±±¨î½X¡¨©M¤@±ø·sªºStatement Handle¡A³o±øStatement Handle¹ïÀ³¨ì³o±ø¡§³s±µ±±¨î½X¡¨¡F
? ·s«Ø¤@±ø³s±µªº¹ê¨Ò¡A¦pªG·í«eVisual FoxPro ¨t²Î¤¤¤w¸g¦s¦b¤@±ø²Å¦X¥H¤U¨â­Ó­n¨Dªº¡§³s±µ±±¨î½X¡¨¡A³o¨â­Ó­n¨D¤À§O¬O¤¹³\³Q¦@¥Î¡A¨Ã¥B¡§³s±µ¡¨»y¥yªº©w¸q¤@­P¡]¥i¥H»{¬°¨Ó·½©ó DBC ªº¦P¤@­Ó¡§³s±µ¡¨ª«¥ó¡^¡A³o®É¤£·|¥Í¦¨¤@±ø·sªº¡§³s±µ±±¨î½X¡¨¡]¤£·|¦A»P¸ê®Æ¨Ó·½«Ø¥ß¤@±ø·sªº ODBC ³q¹D¡^¡A¦Ó¬Oª½±µ¥Ñ¤w¸g¦s¦bªº¡§³s±µ±±¨î½X¡¨­l¥Í¥X¤@±ø·sªºStatement Handle¡A³o±øStatement Handle¦@¥Î­ì¥ý¨º±ø¡§³s±µ±±¨î½X¡¨¡C
? ·í¤@±ø¡§³s±µ±±¨î½X¡¨­l¥Íªº Statement Handle ¥þ³¡³QÄÀ©ñ¤F¥H«á¡A¡§³s±µ±±¨î½X¡¨¤~·|ÄÀ©ñ¡C
? ¯à°÷­l¥Í¥X¦h±øStatement Handleªº¡§³s±µ±±¨î½X¡¨¤@©w¬O®Ú¾Ú DBC¤¤¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^©Ò³Ð«Øªº¡C¨Ï¥Î³s±µ¦r¦ê¡]SQLSTRINGCONNECT()¡^©ÎªÌª½±µ¤Þ¥Î§@·~¨t²Î DSN ³Ð«Øªº¡§³s±µ±±¨î½X¡¨¥u¯à­l¥Í¥X±©¤@±øStatement Handle¡C³o¬O¦]¬°¡AVisual FoxPro §PÂ_¤£¦P Statement Handle¬O§_¡§¦P·½¡¨ªº¨Ì¾Ú¬O DBC ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¡A¦Ó¤£¬O ADO.NET¨º¼Ë®Ú¾Ú³s±µ¦r¦ê©w¸q°Ï¤À¡C
±q¤W­±ªºªí­z¤¤¡A§Ú­Ìµo²{¡G¦]¬°¡§³s±µ±±¨î½X¡¨»P Statement Handle ªºÃö«Y¬O¡§¤@¹ï¦h¡¨ªº¡A¦pªG®³ SQL Server §@¬°¸ê®Æ·½¡A§Ú­Ì¥i¥H«Ø¥ß¤@±ø¡§³s±µ±±¨î½X¡¨¡B®Ú¾Ú¥¦­l¥Í¦h±øStatement Handle¡A¹ê»Ú¤W³s±µ¨ì SQL Server ªº¥u¦³¤@±ø³s±µ¡A¦ÓÀ³¥Îµ{¦¡¤¤«o¥i¥H¦³¦h±øStatement Handle¡A³o´N¬O¤@ºØ·s·§©Àªº¡§³s±µ¦@¥Î¡¨¡I
3¡B¤@­Ó¹ê¨Ò
Åý§Ú­Ì³q¹L¤U­±ªº¨Ò¤l¨Ó¨ãÅéÁA¸Ñ¤@¤UStatement Handle»P¡§³s±µ±±¨î½X¡¨¡C³]DBC¸Ì¦³¤@­Ó¡§³s½uª«¥ó¡¨¡]¤¸¥ó¡^¡A¦W¬° ¡§CD1¡¨¡A³s±µ¨ìSQL Server ¸ê®Æ®w¡C
Con1=SQLCONNECT("CD1",.T.)
³s±µ¦¨¥\¡Aªð¦^ Con1=1¡CCon1 ªí¥Ü Statement Handle ¡A¥H«á´N¥i¥H³q¹L³o­ÓCon1 ¥´¶}¡§»·ºÝµø¹Ï¡¨©ÎªÌ°õ¦æ SPT ©R¥O¡F¥Ñ©ó¦¹®É¨t²Î¤¤¨Ã¨S¦³¦s¦b¡§³s±µ±±¨î½X¡¨¡A©Ò¥H¦P®É²£¥Í¤@±ø¡§³s±µ±±¨î½X¡¨¡A»Ý­nÀò¨ú¡§³s±µ±±¨î½X¡¨¥i¥H³q¹L¡G
ODBC1=SQLGETPROP(Con1,"ODBChdbc")
§Ú³o¸ÌODBC1=49551184¡C³o­ÓODBC1¨Ã¤£»Ý­n¶}µo¤H­ûÃö¤ß¡A¤]¤£»Ý­n³q¹Lµ{¦¡ºûÅ@¡C
±µµÛ¡A§Ú­Ì´N®Ú¾Ú ODBC1­l¥Í¨ä¥¦ªºStatement Handle¡G
Con2=SQLCONNECT("CD1",.T.)
ªð¦^ Con2=2¡CCon2 ªí¥Ü Statement Handle¡A¥H«á´N¥i¥H³q¹L³o­ÓCon2 ¥´¶}¡§»·ºÝµø¹Ï¡¨©ÎªÌ°õ¦æ SPT ©R¥O¡F§Ú­ÌÀò¨ú Con2 ªº¡§³s±µ±±¨î½X¡¨¬Ý¤@¬Ý¡G
ODBC2=SQLGETPROP(Con2,"ODBChdbc")
§Ú³o¸ÌODBC2=49551184¡C»¡©ú¡AODBC1©M ODBC2 ¬O¤@­ÓªF¦è¡A­l¥Í¤F¨â±øStatement Handle¡CÁöµM¡Aµ{¦¡¤Æ¤¤¡A§Ú­Ì¥i¥H¨Ï¥Î Con1©ÎªÌ Con2¡A¦ý¬O¯u¥¿»P SQL Server ªº³s±µ¥u¦³¤@±ø¡A´N¬O¡§³s±µ±±¨î½X¡¨¡C
±µµÛ¡A§Ú­Ì»Ý­nÃö³¬¡§³s±µ±±¨î½X¡¨­l¥Íªº©Ò¦³ªºStatement Handle¡A¤~¯à¯u¥¿Â_¶}Visual FoxPro »P SQL Server ¤§¶¡ªº³s±µ¡C
SQLDISCONNECT(Con1)
SQLDISCONNECT(Con2)
³q¹L³o­Ó²³æªº¨Ò¤l¡A¤]³\¦³§Q©ó§Ú­Ì¨Ó²z¸Ñ·sªº¡§³s±µ¡¨¡CÁöµM¡AVisual FoxPro 8¦b¡§³s±µ¡¨³o¤@¶ô°Ê¤F¤j¤â³N¡A¦ý¬O³o¹ï©óªº¨t²Î¼vÅT¨Ã¤£¬O«Ü¤j¡A¦]¬°µ{¦¡¤Æ¤¶­±¨Ã¨S¦³ÅܤơAVisual FoxPro ¥u¬O¦b§ó©³¼hªº¦a¤è¥[¤F¤@¼h·§©À¡C¸Ü­n»¡¦^¨Ó¡A¦pªG­n¯u¥¿¥Î¦n³o­Ó·s¯S©Ê¡AÁÙ¬OÀ³¸Ó§ïÅܤ@¤Uµ{¦¡¤Æ«ä¸ô¡C
4¡B ¡§³s±µ¡¨Åé¨t§ó§ïªº­ì¦]
¤]³\¡A§Ú­ÌÁÙ·|¦³³o¼ËªººÃ°Ý¡GVisual FoxPro 8¬°¤°»ò­n¥[¤J Statement Handle ³o¼Ëªº·§©À¡A«ö·Ó¥H«eªº°µªkª½±µ¨Ï¥Î¡§³s±µ±±¨î½X¡¨¦b¦U³B¶Ç»¼¡A¤£¬O¤]¯à°÷¹ê²{¡§³s±µ¦@¥Î¡¨¶Ü¡H
µ§ªÌ»{¬°³o¬Oª«¥ó¾É¦V¤Æµ{¦¡¤Æªº»Ý­n¡B¦h¼h¶}µoªº»Ý­n¡C¾ã­Óºc¬[¨t²Îªº«ä¸ô´N¬O§ó¦nªºª«¥ó¾É¦V¤Æµ{¦¡¤Æ¡B§ó¦nªº¦h¼h¶}µo¡A©Ò¥H¤~¦³¤Fµ²ºc¤Æ¿ù»~³B²z¡BCursorAdapter©M¦¹³Bªº Statement Handle¡C
¤W¤å¡A§Ú¨Ï¥Î¤F¡§­l¥Í¡¨¤@µü¡A±qµü¸q²z¸Ñ¤@©w¬O¥Î¡§³s±µ±±¨î½X¡¨Å㦡¥Í¦¨·sªºStatement Handle¡A¦ý¬O±q¹ê¨Ò¥N½X¤¤¤j®a¬Ý¨ì¤F¡A²£¥Í Con1©M Con2 ªº¥N½X¬O¤@¼Ëªº¡C±q²z½×¤WÁ¿¡A´N¬O¡GVisual FoxPro ¯à°÷¦Û¦æºÞ²z ¡§³s±µ±±¨î½X¡¨¡A¶}µo¤H­û¥u»Ý­n¤]¥uÀ³¸Ó³B²z¬ÛÀ³ªº Statement Handle¡A¦Ó¨Ã¤£»Ý­nÃö¤ß¥Ñ¦P¤@¡§³s±µ±±¨î½X¡¨­l¥Í¥Xªº¨ä¥¦Statement Handle¡C³o¼Ë¹ï©ó¼Ò²Õ¤Æ¶}µo¬O«Ü¦³¦n³Bªº¡A¦P®É¤]¸Ñ¨M¤F¡§¦@¥Î³s±µ¡¨°ÝÃD¡C
Ãö©ó¡§³s±µ¡¨ªº¸ÜÃD½Íªº®t¤£¦h¤F¡A¤£¹L¦³¤@­Ó°ÝÃD¬O»Ý­nª`·Nªº¡G¤@­Ó¡§³s±µ±±¨î½X¡¨¥i¥H­l¥Í¦h­ÓStatement Handle¡A¦b¶}µo¤¤¡A¦pªG¦³¤@­Ó Statement Handle¶i¤J¤F¥æ©ö³B²zª¬ºA¡A³o®É©Ò¦³¬ÛÃöªºStatement Handle¤]¶i¤J¤F¥æ©ö³B²zª¬ºA¡A³o¦]¬° SQL Server ªº¨Æ°È¬O®Ú¾Ú¯u¹êªº³s±µ°Ï¤Àªº¡X¡X¥Ñ©ó¬Y¤@±øStatement Handle ªº­n¨D¡A¨Ï±o¡§³s±µ±±¨î½X¡¨¶i¤J¤F¨Æ°Èª¬ºA¡A²z©Ò·íµMªº¸Ó±ø¡§³s±µ±±¨î½X¡¨­l¥Íªº©Ò¦³Statement Handle¤]¤@°_¶i¤J¤F¦P¤@­Ó¥æ©ö³B²z¡C¡]·íµM¡A¤£¬O¥Ñ¤w¸g¶i¤J¨Æ°Èª¬ºAªº¡§³s±µ±±¨î½X¡¨­l¥ÍªºStatement Handle¡A¤£·|¶i¤J¨Æ°Èª¬ºA¡C¡^
²×©ó§¹¦¨¤F§Ú¦b Visual FoxPro 8 ¤¤ªº¡§­º¯è¡¨¡A²Ó²Ó´¢¼¯¤@¨Ç Visual FoxPro 8ªº·s¯S¼x¡A§Ú²`²`Åé·|¨ì¤@­Ó«ü¾É«ä·Q³e¬ïµÛ¾ã­Ó Visual FoxPro 8ªººc¬[¡A³o­Ó«ä·Q´N¬O¡G¤ä´©§ó§¹¬üªº¹ï¶H«Ê¸Ë¡C¥Ñ¦¹±ÀÂ_¡G¥Î Visual FoxPro 8 ¶i¦æª«¥ó¤Æµ{¦¡¤Æ¡B¦h¼h¶}µo¤@©w¤ñ¥H«e§ó¥[®e©ö¡B§ó¥[ÆF¬¡¡I
¥»¤å¥u¯A¤Î¨ì Visual FoxPro 8 ªº¤T­Ó·s¯S©Ê¡A¨Æ¹ê¤WÁÙ¦³§ó¦h¥O¤H´r®®ªºªF¦è¨S¯àÁ¿¨ì¡A§Æ±æ¥H«á¯à¦³¾÷·|»P¤j®a¦@¦P±´°Q¡I¤j®a¥i¥H¨ì¡G

¤T«ä¦P§Ó µoªí¤_2005-04-23 7:56 AM IP: 218.15.22.*
±j¤jªº³øªí³]­p¾¹
Visual FoxPro 9.0 ªº³øªí³]­p¾¹(1)
¡@Micorsoft¤½¥q¹ï·s±À¥XªºVisual Foxpro 9³øªí³]­p¾¹§@¤FÅãµÛ¦a§ï¶i¡A¦P®É¤S»P¦Ñª©¥»ªºVisual Foxpro«O«ù¤F¦V«á¬Û®e©Ê¡A·sª©¥»ªº³øªí³]­p¾¹¬O¤@­Ó·sª©¥»ªº²V¦XÅé¡C
¡@¡@¦b¥»¤å¤¤¡A§A±NÁA¸Ñ³øªí³]­p¾¹¹ï·sªº¸ê®ÆÀô¹Ò¡B³øªí«OÅ@¡B¨Ï¥ÎªÌ¤¶­±¡Bª«¥ó§G§½»P¸ê®Æ¤À²Õ¥\¯àªº¼W±j¡C³Ì«á¡A§A±NÁA¸ÑVisual FoxPro 9³øªí³]­p¾¹ªº¤@­Ó³Ì¦³¥Îªº¼W±j¥\¯à¡G¦h±ø©ú²Ó°Ï±a¡]multiple detail bands¡^¡C
¡@³øªí³]­p³Q¤@­Ó·s¼Wªº¡§Xbase³øªí³]­p¾¹¡¨ªº¤u¨ã¥N´À¡C¥¦´£¨Ñ¤F¤@¨Ç·sªº¹ï¸Ü¤è¶ô¡A¨Ã¥B¤ñ¥H«eªºª©¥»§ó¤è«K¨Ï¥Î¡C¥¦ÁÙ´£¨Ñ¤F¤@¨Çª©¥»³øªí³]­p¤¤©Ò¨S¦³ªº·s¯S¦â¡C§A¥i¥H³q¹L§ïÅܤ@­Ó¦W¬°¡§_REPORTBUILDER¡¨ªº¨t²ÎÄݩʨӨM©w¨Ï¥Î­þºØ³øªí³]­p¾¹¡A¦p¤U©Ò¥Ü¡G
¡@¡@*--¦pªG­n¨Ï¥Î·sª©¥»ªº³øªí³]­p¾¹
_REPORTBUILDER = HOME() + 'ReportBuilder.app'
¡@¡@*--¦pªG­n¨Ï¥Îª©¥»ªº³øªí³]­p¾¹_REPORTBUILDER = ''
¡@¡@³øªí¿é¥X¤ÞÀº¡G»P³øªí³]­p¾¹¤@¼Ë¡A§A¥i¥H±±¨î¬O§_¿ï¥Î·sª©¥»ªº³øªí¿é¥X¤ÞÀº¡C¦ý»P³øªí³]­p¾¹¤£¦Pªº¬OVisual FoxPro 9¹w³]³øªí¿é¥X¤ÞÀº¬°Âª©¥»¤è¦¡¡C¥D­n¬O¦]¬°¦b·sª©¥»ªº¿é¥X¤ÞÀº¤¤¨Ï¥Î¤FGDI¡Ï®w¡A¦Ó¦Ñª©¥»ªº¿é¥X¤ÞÀº¨Ï¥Îªº¬OGDI®w¡A¨Ï¥Î¦Ñª©¥»ªº¿é¥X¤ÞÀº´N¥i¥HÅýÀ³¥Îµ{¦¡¥i¥H¦b¤£¥Îª©¥»ªºwindows¤WÅã¥Ü¥X¦P¼Ëªº¿é¥X®ÄªG¡C§A¥i¥H¥Î¦p¤U©R¥O¨Ó¤Á´«§Aªº¿é¥X¤ÞÀº¡G
¡@¡@*--¨Ï¥Î·sª©¥»ªº¿é¥X¤ÞÀº
SET REPORTBEHAVIOR 90
¡@¡@*--¨Ï¥Îª©¥»ªº¿é¥X¤ÞÀº
SET REPORTBEHAVIOR 80
¡@¡@¡@¡@¡@¦b¤U¤å¤¤§Ú­Ì°²©w¨Ï¥Îªº¬O·sª©¥»ªº³øªí³]­p¾¹©M¿é¥X¤ÞÀº¡C
¡@¡@¸ê®ÆÀô¹Ò¡]DE¡^
¡@¡@Visual FoxPro¡@9ªº³øªí³]­p¾¹¯à»PÅý¦h­Ó³øªí¦@¥Î¦P¤@­Ó¸ê®ÆÀô¹Ò¡C¸ê®ÆÀô¹Ò¯à°÷¥HÃþªº¤è¦¡«O¦s¡A¨Ã¦b»Ý­nªº®É­Ô³Q³øªí¸ü¤J¡C³o¬°¨º¨Ç»Ý­n¨î©w³q¥Î³øªí¸ê®ÆÀô¹ÒªºÀ³¥Îµ{¦¡´£¨Ñ¤F¤è«K¡C
¡@¡@­n±N¸ê®ÆÀô¹Ò«O¦s¬°¤@­ÓÃþ¡A­º¥ý§A­n¬°³øªí©w¸q¤@­Ó¸ê®ÆÀô¹Ò¡AµM«á±Ò°Ê¸ê®ÆÀô¹Òµøµ¡¡A¨Ã¦b¡§File¡¨¥D¥\¯àªí¤¤«ö¤@¤U¡§Save As Class...¡¨¿ï¶µ¡C
¡@¡@³o¼Ë¨t²Î·|¼u¥X¤@­Ó·sªº¹ï¸Ü¤è¶ô¡]°Ñ¨£¹Ï1¡^¡C¦b³oºØ±¡ªp¤U¡ASave¿ï¶µ«ö¶s²Õ¤¤¥u¦³¡§DataEnvironment¡¨³B©ó¤¹³\ª¬ºA¡C
¹Ï1.¡@¨Ï¥Î¡§Save As Class¡¨¹ï¸Ü¤è¶ô«ü©w­n«O¦sªºÃþ¦W¥H¤Î©Ò¦bªºÃþ®w¡A¨Ã±N«ü©w³øªíªº¸ê®ÆÀô¹Ò«O¦s¦b³o­ÓÃþ¤¤¡C
Visual FoxPro 9.0 ªº³øªí³]­p¾¹(2)
¡@¸ü¤J¸ê®ÆÀô¹Ò
¡@¡@°£¤F¯à¬°³øªí©w¸q¸ê®ÆÀô¹Ò¥H¥~¡AVisual FoxPro 9ÁÙ¯àÅý§A±N¬Y­Ó³øªíªº¸ê®ÆÀô¹ÒÃþ¸ü¤J¨ì³øªí¤¤¥h¡C¡§Report¡¨¥\¯àªí¤¤ªº¡§Load Data Environment...¡¨¿ï¶µ¥i¥HÅý§A¿ï¾Ü¨ì©³¸ü¤J­þ­Ó¸ê®ÆÀô¹Ò¡C
¡@¡@³q¹L³øªí³]­p¾¹¸ü¤J¸ê®ÆÀô¹Ò
¡@¡@¦pªG­n¬°¤@­Ó·s³øªí¸ü¤J¸ê®ÆÀô¹Ò¡A¨º¨Ó·½¸ê®ÆÀô¹Òªº©Ò¦³¥N½X©M¦¨­ûÅܼƳ£·|½Æ»s¨ì·s³øªí¤¤¡C³oªí©ú·í§A§ïÅÜ­ì¨Ó³øªíªº¸ê®ÆÀô¹Ò«á¡A¨Ã¤£·|¹ï·s³øªíªº¸ê®ÆÀô¹Ò²£¥Í¥ô¦ó¼vÅT¡C
¡@¡@¹Ï2Åã¥Ü¤F·í§A±q¡§Report¡¨¥D¥\¯àªí¤¤«ö¤@¤U¤F¡§Load Data Environment...¡¨¿ï¶µ«á¼u¥XªºÄݩʹï¸Ü¤è¶ô¡C§A¥i¥H¦b¸Ì­±¿ï¾Ü±q­þ­Ó³øªí¤¤½Æ»s¨Ó·½¸ê®ÆÀô¹Ò¡C
¹Ï2.¡@«ö¤@¤U¡¨Data Environment¡§¿ï¶µ¥d¡A±q¤¤¿ï¾Ü§A­n±q­þ­Ó³øªí¤¤½Æ»s¸ê®ÆÀô¹Ò
¦b¤W¹Ï¤¤¡A«ö¤@¤U¡§Copy from another report file¡¨¿ï¶µ«ö¶s¡AµM«á«ö¤@¤U¡§Select...¡¨«ö¶s¡A³o¼Ë·|¼u¥X¤@­Ó¥´¶}¹ï¸Ü¤è¶ô¡A§A¥i¥H±q¤¤¿ï¾Ü±q­þ­Ó³øªí¤¤½Æ»s¡C¦pªG§A¿ï¤¤¤F¤@­Ó³øªí¡A¨º¨t²Î¼u¥X¤@­Ó½T»{®Ø¡C
¡@¡@°²¦p§Ú­Ì­n±N¬Y­Ó³øªíªº¸ê®ÆÀô¹Ò½Æ»s¨ì·í«e³øªí¤¤¥h¡AVisual FoxPro 9·|ĵ§i§A±NÂл\·í«e³øªíªº¸ê®ÆÀô¹Ò¡A§A¥²¶·¿ï¾Ü¡§¬O¡¨¤~¯àÄ~Äò¶i¦æ½Æ»s¡C³o­Ó´£¥Ü¥\¯à¥i¥H¨¾¤î¥Ñ©ó§Aªº»~¾Þ§@¦Ó±N·í«e³øªíªº¸ê®ÆÀô¹ÒÂл\±¼¡C¦pªG§A¿ï¾Ü¡§§_¡¨ªº¸Ü¡A¨º½Æ»s´N·|¨ú®ø¡A¦pªG¿ï¾Üªº¬O¡§¬O¡¨¡A¨º´N·|¯u¥¿¶i¦æ½Æ»s¾Þ§@¡A¨Ã¥B·í¾Þ§@§¹¦¨«á¡A¨t²Î·|¥X²{¥t¤@­Ó¹ï¸Ü¤è¶ô¡A´£¥Ü§A¾Þ§@§¹¦¨¡C
¡@¡@²{¦b¸ê®ÆÀô¹Ò¤w¸g½Æ»s¦¨¥\¤F¡A§A¥i¥H¾Þ±±·sªº¸ê®ÆÀô¹Ò¡C¦ý§A­n©l²×°O±o­ì³øªí¸ê®ÆÀô¹Òªº§ïÅܨ䣷|¹ï·sªº¸ê®ÆÀô¹Ò¦³¥ô¦ó¼vÅT¡C
¡@¡@±q¤@­ÓÃþ¤¤¸ü¤J¸ê®ÆÀô¹Ò
¡@¡@·í­n±q¤@­ÓÃþ¤¤¸ü¤J¸ê®ÆÀô¹Ò®É¡A§A¥²¶·­n¬°·s³øªíªº¸ê®ÆÀô¹Ò¼g¤@¨ÇÃB¥~ªº¥N½X¡A¨Ï±o¥¦¯à°÷°ÊºA¦a¸j©w¨Ó·½¸ê®ÆÀô¹Ò¡A¨Ã¥Bªì©l¤Æ¥¦ªº¤@­Ó¹ê¨Ò¡C³o·N¨ýµÛ¦pªG±qÃþ¤¤¸ü¤J¸ê®ÆÀô¹Ò®É¡A¹ï¨Ó·½¸ê®ÆÀô¹Ò°µªº©Ò¦³§ï°Ê·|¼vÅT¨ì©Ò¦³¨Ï¥Î¥¦ªº³øªí¡C
¡@¡@§A¦P¼Ë¥i¥H¥Î¹Ï2©Ò¥Üªº³øªíÄݩʹï¸Ü¤è¶ô¨Ó§¹¦¨³o­Ó®ÄªG¡A¥ý«ö¤@¤U¡§Link to a visual DE class¡¨¿ï¶µ«ö¶s¡AµM«á±q¨t²Î¼u¥Xªº¥´¶}¹ï¸Ü¤è¶ô¤¤¿ï¾Ü§A­n¸ü¤JªºÃþ®w¥H¤ÎÃþ¦W¡A·í§AÂIÀ»½T©w«ö¶s«á¡A·í«e³øªíªº¸ê®ÆÀô¹Ò±N±o¨ì§ó·s¡A¨Ã¥B¨t²Î·|µ¹¥X¬ÛÀ³´£¥Ü¸ê°T¡C
¡@¡@¨ä¹êVisual FoxPro¦Û°Ê¬°¸ê®ÆÀô¹Òªº¦p¤U5­Ó¤èªk¤¤¥[¤J¤F¤@¨Ç¥N½X¡GInit()¡BBeforeOpentables()¡BAfterCloseTables()¡BDestroy()©MError()¡C¦³¨Ç¤èªk¤¤¥[¤Jªº¥N½X«D±`²³æ¡A¶È¶È¬O¤@­ÓDODEFAULT()©R¥O¡A³o­Ó©R¥O¤£°õ¦æ¥ô¦ó¾Þ§@¡C¨ä­ì¦]¬OBindEvents()¤èªk¥²¶·«OÃÒ¸ê®ÆÀô¹Òªº³o5­Ó¤èªk¤¤ªº¥N½X¦æ¼Æ¶W¹L¤@¦æ¤~¯à°õ¦æ¡C§A¥i¥H¤â°Ê¬d¬Ý³o¨Ç¦Û°Ê¥Í¦¨ªº¥N½X¡A¦ý§Ú±j¯P«Øij§A§O¥h°Ê³o¨Ç¥N½X¡C
Visual FoxPro 9.0 ªº³øªí³]­p¾¹(3)
¡@¡@«OÅ@
¡@¡@¦pªG­n¦bVisual FoxPro 9¨Ï¥Î³øªí³]­p¾¹©ÎªÌ¼ÐÅÒ³]­p¾¹¡A§A¥i¥H¬°¤@­Ó©Î¦h­Óªº§G§½ª«¥ó³]¸m«OÅ@¡C³oºØ¯S©Ê¥i¥HÅý§Aªº¨Ï¥ÎªÌ¥u¯à¹ï³øªí¶i¦æ¦³­­ªº­×§ï¡C
¡@¡@§A¥i¥H¬°§G§½ª«¥ó³]¸m5ºØ«OÅ@¼Ò¦¡¡A°ìª«¥ó¦³µÛ¥t¥~ªº«OÅ@¿ï¶µ¡C±a°Ï¡]Band¡^¦³¨âºØ«OÅ@¼Ò¦¡¥i¨Ñ§A¿ï¾Ü¡C¨Ã¥B§A¤]¥i¹ï³øªí¥»¨­³]¸m¤£¦Pªº«OÅ@¤è¦¡¡C
¡@¡@«OÅ@¤@­Óª«¥ó
¡@¡@­n¦b³øªí³]­p¾¹¤¤¬°¤@­Ó§G§½ª«¥ó³]¸m«OÅ@¡A³q¹L±Ò°Ê¦¹ª«¥óªºÄݩʹï¸Ü¤è¶ô§Y¥i¾Þ§@¡A§A¥i³q¹L¥Î¥kÁäÂIÀ»¦¹ª«¥ó¡A¨Ã¦b¼u¥Xªº§ÖÅã¥\¯àªí¤¤¿ï¾Ü¬ÛÀ³ªº¥\¯àªí¶µ¥Ø¡A©ÎªÌª½±µ«ö¨â¤U¦¹ª«¥ó¡C¹Ï3Åã¥Ü¤F¤@­Ó§G§½ª«¥óÄݩʹï¸Ü¤è¶ôªº«OÅ@­¶¡A§A¥i¥H¬°§G§½ª«¥ó³]¸m¦p¤U5ºØ«OÅ@¤è¦¡¡G¡@¡@? ª«¥ó¤£¯à³Q²¾°Ê©Î§ïÅܤj¤p¡C¥¦¨Ï±o¥Î¤á¤£¯à¦b³]­p¾¹¤¤²¾°Ê¦¹§G§½ª«¥ó¡A¨Ã¥B¨Ï¥ÎªÌ¤£¯à§ïÅܦ¹ª«¥óªº¤j¤p¡C
¡@¡@? ¹ï¶H¤£¯à³Q­×§ï¡C¥¦¨Ï±o¨Ï¥ÎªÌ¤£¯à­×§ï¦¹§G§½ª«¥óªºÄÝ©Ê¡C
¡@¡@? ª«¥ó¤£¯à³Q§R°£¡C¡@¥¦¨Ï±o¨Ï¥ÎªÌ¤£¯à§R°£¦¹ª«¥ó¡C
¡@¡@? ¹ï¶H¤£¯à³Q¿ï¤¤¡C¨Ï¥ÎªÌ¤£¥i¥H¿ï¾Ü¦¹ª«¥ó¡A·íª«¥ó³B©ó³oºØ«OÅ@¤è¦¡¤U®É¡A¨Ï¥ÎªÌ¤£¯à²¾°Ê¥¦©Î§ïÅÜ¥¦ªº¤j¤p¡A¦P¼Ë¤]¤£¯à­×§ï©Î§R°£¥¦¡C
¡@¡@? ª«¥ó¦b³]­p¾¹¤¤¤£¥i¨£¡C¥¦¨Ï±o¦¹ª«¥ó¦b³øªí³]­p¤¤¤£¥i¨£¡A·íª«¥ó³B©ó³oºØ«OÅ@¤è¦¡¤U®É¡A¨Ï¥ÎªÌ¤£¯à²¾°Ê¥¦©Î§ïÅÜ¥¦ªº¤j¤p¡A¦P¼Ë¤]¤£¯à­×§ï©Î§R°£¥¦¡C
¹Ï3.¡@§G§½ª«¥óÄݩʹï¸Ü¤è¶ô¤¤ªº«OÅ@­¶
¡@¡@³o­Ó¹ï¸Ü¤è¶ôÁÙ¦³¤@­Ó¦W¬°¡§Design-time caption¡¨ªº¿é¤J¶µ¡A¥¦¥u¹ï°ìª«¥ó¦³®Ä¡C§A¥i¥H¦b¨ä¤¤¿é¤J°ìª«¥óªº¦WºÙ¡A³o¼Ë¦b³øªí³]­p¾¹¤¤´N¤£·|Åã¥Ü°ìªºªí¹F¥Ü¦WºÙ¡A¦Ó¬OÅã¥Ü§A¿é¤Jªº¦WºÙ¡C·í°ìªº¹Bºâ¦¡«D±`¤¾ªø®É¡A³oºØÅã¥Ü¤è¦¡¥i¥H¨Ï±o³øªí³]­p¾¹ªº¨Ï¥ÎªÌ¤¶­±§ó¥[¤Í¦n¡C
¡@¡@«OÅ@¤@­Ó±a°Ï¡]Band¡^
¡@¡@¦b³øªí³]­p¾¹¤¤­n«OÅ@¤@­Ó±a°Ïªº¸Ü¡A½Ð¥ý±Ò°Ê¦¹±a°ÏªºÄݩʹï¸Ü¤è¶ô¡C§A¥i¥H³q¹L¿ï¾Ü¡§Report¡¨¥\¯àªí¤¤ªº¡§Edit Bands...¡¨¥\¯àªí¶µ¥Ø¨Ó¥´¶}³o­ÓÄݩʹï¸Ü¤è¶ô¡A¤]¥i¥Hª½±µ«ö¨â¤U±a°Ïªº¦Ç¦â±ø¡C¹Ï4Åã¥Ü¤F¤@­Ó±a°ÏÄݩʹï¸Ü¤è¶ôªº«OÅ@­¶¡A§A¥i¥H¿ï¾Ü¥H¤U¨âºØ«OÅ@¼Ò¦¡¡G
¡@¡@? ±a°Ï¤£¥i­×§ï¡C³o¥i¥H¨¾¤î¨Ï¥ÎªÌ­×§ï±a°ÏªºÄÝ©Ê¡C
¡@¡@? ±a°Ï¤£¥i§ïÅܤj¤p¡C³o¥i¥H¨¾¤î¥Î¤á§ïÅܱa°Ïªº¤j¤p¡C
¹Ï4. ±a°ÏÄݩʹï¸Ü¤è¶ô¤¤ªº«OÅ@­¶
¡@¡@«OÅ@³øªí¥»¨­
¡@¡@­n¬°¤@­Ó³øªí³]©w«OÅ@¤è¦¡¡A­n¥ý±Ò°Ê¦¹³øªíªºÄݩʹï¸Ü¤è¶ô¡C§A¥i¥H³q¹L¿ï¾Ü¡§Report¡¨¥\¯àªí¤¤ªº¡§Properties¡¨¥\¯àªí¶µ¥Ø¨Ó¥´¶}³o­ÓÄݩʮءA¤]¥i¥H«ö¥kÁ䦹³øªí¨Ó¼u¥X³o¼Ë¤@­Ó¥\¯àªí¡C¹Ï5Åã¥Ü¤F¤@­Ó³øªíÄݩʹï¸Ü¤è¶ôªº«OÅ@­¶
¹Ï5. ³øªíÄݩʹï¸Ü¤è¶ô¤¤ªº«OÅ@­¶
¡@¡@³o­Ó¹ï¸Ü¤è¶ôªº¤W¥b³¡¤À¥iÅý§A¸T¤î¨Ï¥ÎªÌ¨Ï¥ÎÄݩʹï¸Ü¤è¶ô¤¤ªº¬Y¨ÇÄÝ©Ê­¶¡C·í§A¿ï¾Ü¤F¬ÛÀ³ªºÀˬd®Ø«á¡A³øªíÄݩʹï¸Ü¤è¶ô¤¤ªº¬Y¨ÇÄÝ©Ê­¶·|Åܱo¤£¥i¥Î¡C¦ý¡§Protection¡¨Àˬd®ØÁ`¬O«O«ù¿ï¾Üª¬ºA¦Ó¥B¤£¤¹³\§A¹ï¥¦¶i¦æ§ï°Ê¡C¥t¥~¥Ñ©ó¡§Ruler/Grid¡¨ÄÝ©Ê­¶µLªk«OÅ@¡A¦]¦¹¡§Ruler/Grid¡¨Àˬd®Ø¤]Á`³B©ó¸T¤îª¬ºA¡A³o¨â­ÓÀˬd®Ø¤§©Ò¥HÅã¥Ü¬O¬°¤F«O«ùÄÝ©Ê­¶»PÀˬd®Øªº¤@­P©Ê¡C
¡@¡@Äݩʹï¸Ü¤è¶ôªº¤U¥b³¡¤À¥i¥H¸T¤î¨Ï¥ÎªÌ¨Ï¥Î¬Y¨Ç¥\¯àªí¶µ¥Ø¡C·í§A¿ï¾Ü¤F¬ÛÀ³ªºÀˬd®Ø«á¡A¬ÛÀ³ªº¥\¯àªí·|Åܱo¤£¥i¥Î¡C
¡@¡@¦b©R¥O¤¤³]¸m«OÅ@¼Ð»x
¡@¡@¦pªG­n³q¹L©R¥O¤è¦¡¨Ó½Õ¥Î³øªí³]­p¾¹©Î¼ÐÅÒ³]­p¾¹¤¤ªº«OÅ@¤è¦¡¡A«hÀ³¸Ó¨Ï¥ÎPROTECTEDÃöÁä¦r¡A¦p¤U©Ò¥Ü¡G
CREATE REPORT MyReport PROTECTED
MODIFY REPORT MyReport PROTECTED
CREATE LABEL MyLabel PROTECTED
MODIFY LABEL MyLabel PROTECTED
¡@¡@¦pªG¨S¦³«ü©wPROTECTEDÃöÁä¦r¡A³øªí³]­p¾¹¤£·|¬°¥ô¦ó§G§½ª«¥ó¥[¤W«OÅ@
Visual FoxPro 9.0 ªº³øªí³]­p¾¹(4)
¡@¼W±jªº¨Ï¥ÎªÌ¤¶­±¡]UI¡^
¡@¡@³øªí³]­pªº¨Ï¥ÎªÌ¤¶­±§@¤F«Ü¦h§ï¶i¡A¨Ï±o¥Î¤á¯à§ó¤è«K¡B§óª½Æ[¦a³]­p¥X³øªí¡C¥\¯àªí¶µ¥Ø¤]§@¤F«Ü¤jªº½Õ¾ã¡A¤W¤U¤å¥\¯àªí°µ¤F§ï¶i¡A³øªí³]­p¾¹ªº¤u¨ã¦C¤¤¼W¥[¤F¤@¨Ç·s¿ï¶µ¡C¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô¡]Expression Builder ¡^©M¹Bºâ¦¡ºc³y¿ï¶µ¹ï¸Ü¤è¶ô¡]Express Builder Options¡^³£¦³¤F·sªº¯S©Ê¡A¦¹¥~³øªí³]­p¾¹¹ï¨ä¥¦¤@¨Ç¨Ï¥ÎªÌ¤¶­±§@¤F²Ó·Lªº§ï¶i¡C
¡@¡@µæ³æ
¡@¡@¥\¯àªí¥[¤J¤F¤@¨Ç·s±M®×¡A¤@¨Ç­ì¦³ªº¥\¯àªí¶µ¥Ø³Q§ó¦W¨Ï±o¥¦­Ìªí¹Fªº·N«ä§ó²M´·¡A¦¹¥~¤@¨Ç±`¥Îªº¥\¯àªí¶µ¥Ø³Q­«½Æ¥H«K¥Î¤á§ó¤è«K¦a³X°Ý¨ì¥¦¡A¨ãÅé¦p¤U¡G
¡@¡@? ¡§File¡¨µæ³æ¤U¼W¥[¤F¡§Save As Class...¡¨¥\¯àªí¶µ¥Ø¡C
¡@¡@? ³øªí³]­p¾¹ªº¤u¨ã¦C¥[¤J¤F¤@­Ó¦W¬°¡§¤ô¥­½u¡]horizontal lines¡^¡¨ªº±±¨î¶µ¡A¥¦¥Î¨Ó§âGrid Lines©MShow Position³o¨â­Ó±±¨î¶µ»P¨ä¥¦ªº±±¨î¶µ¤À³Î¶}¨Ó¡C
¡@¡@? ¡§Report¡¨µæ³æ¼W¥[¤F¡§­«¶K¼ÐÅÒ(relabled)¡¨¡B¡§·s«Ø¡]new¡^¡¨¥H¤Î¡§¹wÄý¦C¦L¡]Print Preview¡^¡¨µ¥¥\¯àªí¶µ¥Ø¡C
¡@¡@§ÖÅã¥\¯àªí
¡@¡@¹ï²{¦³ªº§ÖÅã¥\¯àªí²K¥[¤F¤@¨Ç·s±ø¥Ø¡A¨Ï±o¥\¯àªí±ø¥Ø»P¬ÛÀ³ªº¹ï¸Ü¤è¶ô¯à«O«ù§ó¦n¤@­P©Ê¡C¡@¡@? ¡§¥þ°ì¡]Global¡^¡¨§ÖÅã¥\¯àªí¼W¥[¤F¤@­Ó¦W¬°¡§­«¶K¼ÐÅÒ(relabled)¡¨ªº¥\¯àªí¶µ¥Ø¡C
¡@¡@? ³q¹L«ö¥kÁä¥ô·N±a°Ï¡]band¡^ªº¦Ç¦âÄæ¥i¥H¼u¥X¦W¬°¡§±a°Ï¡]Band¡^¡¨ªº§ÖÅã¥\¯àªí¡C
¡@¡@? ³q¹L«ö¥kÁä¥ô·N§G§½ª«¥ó¥i¥H¼u¥X¦W¬°¡§§G§½ª«¥ó¡]Layout Object¡^¡¨ªº§ÖÅã¥\¯àªí¡C
¡@¡@¤u¨ã¦C
¡@¡@¦p¹Ï6©Ò¥Ü¡A³øªí³]­p¾¹ªº¤u¨ã¦C¼W¥[¤F¨â­Ó·sªº±±¨î¶µ¡G­¶­±³]¸m±±¨î¶µ©M¦rÅé±±¨î¶µ¡G
¹Ï6. ³øªí³]­p¾¹¼W¥[ªº¨â­Ó·s±±¨î¶µ
¡@¡@¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô
¡@¡@¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô¬°¡§¹Bºâ¦¡°ì(Expression for Field)¡¨¿é¤J®Ø´£¨Ñ¤F¤@­Ó§ó¤jªº¿é¤JªÅ¶¡¡A¤¹³\¨Ï¥ÎªÌ¿é¤J§ó¦hªº³øªí¹Bºâ¦¡¡C
¡@¡@¦pªG§A±N¡ÄREPORTBUILDER³o­Ó¨t²ÎÄݩʳ]¬°ªÅªº¸Ü¡A¨º¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô·|«ü©w¥»¦a¦æ¬°¡A¥u¦³¦b¸ê®ÆÀô¹Ò¤¤©w¸qªº¸ê®Æªí¤~¯à°÷Åã¥Ü¦b¹ï¸Ü¤è¶ô¤¤ªº²M³æ¤¤¡C¨º¨Ç¨S¦³¦b¸ê®ÆÀô¹Ò¤¤©w¸qªº¸ê®Æªí«h¤£·|¦b²M³æ¤¤Åã¥Ü¡C
¡@¡@¦pªG±N¡ÄREPORTBUILDER¨t²ÎÄݩʬ°ReportBuilder.appªº¸Ü¡A¨º¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô«h·|§e²{¥t¥~¤@ºØ¦æ¬°¡C­º¥ý¡A¡ÄGETEXPR¤¤©w¸qªº¹Bºâ¦¡ºc³y¾¹·|¨ú¥N¥»¦aªº¹Bºâ¦¡ºc³y¾¹¡C
¡@¡@¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ôÁÙ¦³¤@­Ó¤U©Ô²Õ¦X²M³æ¤è¶ô¡A§A¥i¥H±q¤¤¿ï¾Ü­n¾Þ§@ªº¸ê®Æªí¡C¥u¦³·í«e¤w¨Ï¥Îªº¸ê®Æªí¤~·|¥X²{¦b³o­Ó²M³æ¤è¶ô¤¤¡C»Ý­n±j½Õªº¬O³øªí³]­p¾¹¬O¤£·|¦Û°Ê¥´¶}¸ê®ÆÀô¹Ò¤¤©w¸qªº¸ê®Æªíªº¡A¦]¦¹¦pªG¸ê®Æªí¨S¦³³Q¥´¶}ªº¸Ü¡A¨º¥¦«K¤£·|¥X²{¦b³o­Ó²M³æ¤è¶ô¤¤¡C
¡@¡@±Ä¥Î³oºØ³]­p¤è¦¡¨Æ¡A·í¨Ï¥ÎªÌ¨Ï¥Î§A©w¸qªº³øªí®É¡A§A¥i¥H«Ü¦n¦a±±¨î¥Î¤á¯à³X°Ý­þ¨Ç¸ê®Æªí¡A¤£¯à³X°Ý­þ¨Ç¸ê®Æªí¡C§A¥i¯à¦b¸ê®ÆÀô¹Ò¤¤©w¸q¤F­Y¤z­Ó¸ê®Æªí¡A¦ý§A¤£§Æ±æ¥Î¤á¯à³X°Ý©Ò¦³ªº¸ê®Æªí¡A³o®É§A¥i¥H¥´¶}¤@¨Ç¤¹³\¥Î¤á³X°Ýªº¸ê®Æªí¡A¦Ó¨ä¥L¥¼¥´¶}ªº¸ê®Æªí«h¹ï¥Î¤á¤£¥i¨£¡C
¡@¡@·Æ¹««ü¼Ðªº§ï¶i
¡@¡@·í³øªí¤¤ª«¥ó³B©ó¤j¤p¥iÅܪ¬ºA®É¡A·Æ¹««ü¼Ð·|µo¥Í¬ÛÀ³ªº§ïÅÜ¡]°Ñ¨£¹Ï7¡^¡C
¹Ï7. ·í¤@­Óª«¥ó³B©ó¤j¤p¥iÅܪ¬ºA®É¡A·Æ¹««ü¼Ðµo¥Íªº§ïÅÜ¡C
¡@¡@¦h¶µ¿ï¾Ü¹ï¸Ü¤è¶ô
¡@¡@VIsual FoxPro 9´£¨Ñ¤F¤@­Ó¦h¶µ¿ï¾Ü¹ï¸Ü¤è¶ô¡A§A¥i¥H³q¹L¥¦¤@¦¸©Ê¦a³]¸m¦h­Ó§G§½ª«¥óªºPortection©MPrintÄÝ©Ê¡C¥¦¤]¤¹³\§A¹ï³æ­Ó§G§½ª«¥óªº¨ä¥¦Äݩʶi¦æ­×§ï¡C­n¨Ï¥Î³oºØ¥\¯à¡A¥ý­n¿ï©w¦h­Ó§G§½ª«¥ó¡AµM«á¦b¥ô·N¤@­Óª«¥ó¤W­±«ö¤@¤U¥kÁä¨Ó¼u¥X³o­Ó¹ï¸Ü¤è¶ô¡A¦p¹Ï8©Ò¥Ü¡G
¹Ï8. ¦h¶µ¿ï¾Ü¹ï¸Ü¤è¶ô
¡@¡@©Ò¦³³Q¿ï©wªºª«¥ó¥X²{¦b¹ï¸Ü¤è¶ôªº¡§Selection¡¨ÄÝ©Ê­¶ªº²M³æ¤¤¡C¦pªG§A­n¿ï¨ú³øªí¤¤©Ò¦³ªº§G§½ª«¥óªº¸Ü¡A¥ÎCTRL¡ÏA½Æ¦XÁä¥i¥H¹ï¥¦­Ì¶i¦æ¥þ¿ï¡AµM«á¦A«ö¤@¤U¥kÁä§Y¥i¡C
¡@¡@¹Ï8¤¤ªº¡§Sort by¡¨¿ï¶µ¸s²Õ¤¹³\§A±N§G§½ª«¥ó«öÃþ«¬©Î¥X²{¦b³øªí¤¤ªº¦ì¸m±Æ§Ç¡C¡§Remove from list¡¨«ö¶s¥i¥H§R°£²M³æ¤¤ªº§G§½ª«¥ó¡C¦pªG§A«ö¨â¤U²M³æ¤¤ªº¬Y­Óª«¥ó¡A¨º»ò¡§Properties¡¨ÄÝ©Ê­¶´N·|±Ò°Ê¡A¨Ã¥BÅã¥Ü¥X³o¨Ç§G§½ª«¥ó¦b³øªí¤¤ªº¬Y¨ÇÄÝ©Ê¡C¦p¹Ï9©Ò¥Ü¡A§A¥i¥H¤@¦¸©Ê§ó§ï©Ò¦³¥X²{¦b¡§Selection¡¨ÄÝ©Ê­¶¤¤ªº§G§½ª«¥óªº¬Y¨ÇÄÝ©Ê¡C
¹Ï9.¡@³q¹L¡§Properties¡¨ÄÝ©Ê­¶¨Ó­×§ï§G§½ª«¥óªº«OÅ@ÄÝ©Ê¥H¤Î¦C¦LÄÝ©Ê¡C
¡@¡@¦pªG§A¿ï¤¤¤F¡§Apply these protection settings to the selected objects¡¨Àˬd®Ø¡A¨º¥i¥H¹ï²M³æ¤¤ªº§G§½ª«¥ó³]¸m«OÅ@¤è¦¡¡C¦pªG§A¿ï¤¤¤F¡§Apply this condition to the selected objects upon saving¡¨Àˬd®Ø¡A¨º»ò¥i¥H¤¹³\¦C¦L¡C§A¥i¥H®Ú¾Ú¦Û¤wªº»Ý­n¹ï«OÅ@¤Î¦C¦L°µ§ó¶i¤@¨Bªº³]¸m¡A³]¸m§¹²¦«á¡A«ö¤@¤U¡§OK¡¨«ö¶s«K¥i¦P®É§ïÅܩҿ諸§G§½ª«¥óªº³o¨ÇÄÝ©Ê¡C
¡@¡@§ó¤jªºÁY©ñ¯Å§O
¡@¡@¹wÄýµøµ¡¦³¤F§ó¤jªºÁY©ñ¯Å§O¡A¥i¥H±q10%ÁY©ñ¨ì500%¡C
¡@¡@§G§½¹ï¶Hªº¼W±j
¡@¡@§G§½ª«¥ó¤]°µ¤F¤@¨Ç§ï¶i¡A¥]§t¤@­Ó¾Þ±±½d¥»¦r¤¸ªº¥i¿ï¶µ¡A¦r¤¸¹Bºâ¦¡ªºµô°Å¼Ò¦¡¡A¥H¤Î¯à«ü©w§G§½ª«¥óªº¬Û¹ï¦ì¸m©Mµ´¹ï¦ì¸m¡C
¡@¡@½d¥»¦r¤¸
¡@¡@°ìÄݩʹï¸Ü¤è¶ô¼W¥[¤F¹ï½d¥»¦r¤¸ªº¤@¨Ç·s¤ä´©¡A¥¦­Ì¤À§O¬OÂл\¡]Overlay¡^©M¥æ¿ù¡]Interleave¡^¡C¥Î¨Ó¤ä´©¦r¤¸ªº¤@¨Ç¯S®í®æ¦¡¡C
·í§A¨Ï¥ÎÂл\¤è¦¡®É¡A¯S®í¦r¤¸·|³Q·í°µ¸ê®Æªº¤@³¡¤À¡A¨Ã¥B·|Âл\¨ä¥¦ªº¦r¤¸¡CÁ|­Ó¨Ò¤l¨Ó»¡¡A·í§A¨Ï¥Î¤@­Ó®æ¦¡¤Æ¦r¦ê¡§999¡Ð999¡¨®É¡A¦Ó¨Ï¥ÎªÌ¹ê»Ú¿é¤Jªº¸ê®Æ¬O¡§123456¡¨¡A¨º³øªíªº³Ì²×µ²ªG±N·|Åã¥Ü¬°¡§123¡Ð56¡¨¡Aª`·N¼Æ¦r¡§4¡¨³Q®æ¦¡¤Æ¦r¤¸¤¤ªº¡§¡Ð¡¨Âл\¤F¡C
·í§A¨Ï¥Î¥æ¿ù¤è¦¡®É¡A¯S®í¦r¤¸·|´¡¤J¨ì·í«e¸ê®Æ¤¤¡CÁ|­Ó¨Ò¤l¨Ó»¡¡A·í§A¨Ï¥Î¤@­Ó®æ¦¡¤Æ¦r¦ê¡§999¡Ð999¡¨®É¡A¦Ó¨Ï¥ÎªÌ¹ê»Ú¿é¤Jªº¸ê®Æ¬O¡§123456¡¨¡A¨º³øªíªº³Ì²×µ²ªG±N·|Åã¥Ü¬°¡§123¡Ð456¡¨¡Aª`·N¡§¡Ð¡¨´¡¤J¨ì¤F¼Æ¦ì¡§3¡¨©M¼Æ¦ì¡§4¡¨ªº¤¤¶¡¡C
Visual FoxPro 9.0 ªº³øªí³]­p¾¹(5)
¡@¦r¤¸¹Bºâ¦¡ªºµô°Å¼Ò¦¡
¡@¡@¦bVisual FoxPro 9¥H«e¡A·í°ìª«¥ó¤¤ªº¤å¥»¹Lªø®É¤@¯ë³£·|³Q¦Û°Êµô°Å¡C¦bVisual FoxPro 9¤¤¡A§A¥i¥H«ü©w°ìª«¥óªº¦p¤U´XºØµô°Å¤è¦¡¡G
¡@¡@? ¯Ê¬Ùµô°Å¤è¦¡¡C³oºØ¤è¦¡Ãþ¦ü©ó¥H«eª©¥»ªºVisual FoxProªº³B²z¤è¦¡¡C
¡@¡@? µô°Å³Ìªñªº¦r¤¸¡C¥¦±N¦h¾lªº¦r¤¸¥þ³¡µô±¼¡Aª½¦Ü­è¦nº¡¨¬¿é¤J°ìªºªø«×¡C
¡@¡@? µô°Å³Ìªñªº³æµü¡C¥¦±N¦h¾lªº³æµü¥þ³¡µô±¼¡Aª½¦Ü­è¦nº¡¨¬¿é¤J°ìªºªø«×¡C
¡@¡@? Àɵô°Å¤è¦¡¡C¦pªG¿é¤J°ì¤¤ªº¤º®e¤¤¤@­Ó«D±`ªøªºÀɸô®|¡A¨º»ò¤¤¶¡ªº¸ô®|±N·|¥H¬Ù²¤¸¹¥N´À¡A¥u«O¯dÀY§À¸ô®|¡C
¡@¡@¤j¤p¤Î¦ì¸m
¡@¡@²{¦b¥i¥H§ó¤è«K¦a±±¨î§G§½ª«¥óªº¤j¤p¥H¤Î©Ò³Bªº¦ì¸m¡C»P­ìª©¥»¤£¦P¡A·í¦b·sª©¥»³øªí¤¤¥[¤J¤@­Óª«¥ó®É¡A¦¹ª«¥óªº¡§From page top¡¨¡B¡§From left¡¨¡B¡§Height¡¨©M¡§Width¡¨Äݩʳ£·|¦Û°Ê³]¸m¡C¦b³øªí³]­p¾¹¤¤¡A¡§From page top¡¨ÄݩʬO«üª«¥ó¬Û¹ï©ó­¶­±³»ºÝªº¬Û¹ï¦ì¸m¡C¦¹ª«¥ó¤Wªº©Ò¦³¦Ç¦âÄ檺°ª«×¤]³£³Q­pºâ¦b¤º¡C§ïÅܪ«¥óªº¡§From page top¡¨Äݩʦ³¥i¯à±Nª«¥ó²¾¨ì¨ì¥t¤@­Ó°Ï±a¤¤¥h¡C
¬Û¹ï¦ì¸m¡G¡§From page top¡¨ÄÝ©Ê©M¡§Height¡¨Äݩʦ@¦P½T©w¤F·í«eª«¥ó¬O³B©óµ´¹ï¦ì¸mÁÙ¬O¬Û¹ï¦ì¸m¡C·íª«¥óªº¡§From page top¡¨Äݩʪº¨ú­È½d³ò¦b³øªíªº°Ï°ì¤º¡A¨Ã¥B¡§Height¡¨Äݩʤp©ó©Îµ¥©ó©Ò¦b°Ï±aªº°ª«×®Éª«¥ó´N³B©ó¬Û¹ï¦ì¸m¡C¤@¯ë¨Ó»¡¡A¥u¦³°Ï±a¤ºªºª«¥ó¤~»Ý­n¨Ï¥Î¬Û¹ï¦ì¸m¡A¦Ó¹³Page Header©MPage Footer³o¼Ëªºª«¥ó«h¤£»Ý­n¨Ï¥Î¬Û¹ï¦ì¸m¡C
¡@¡@µ´¹ï¦ì¸m¡G·íª«¥óªº¡§From page top¡¨Äݩʪº¨ú­È½d³ò¦b³øªíªº°Ï°ì¥H¥~¡A¨Ã¥B¡§Height¡¨Äݩʤj©ó©Ò¦b°Ï±aªº°ª«×®Éª«¥ó´N³B©óµ´¹ï¦ì¸m¡Cµ´¹ï¦ì¸m·N¨ýµÛª«¥ó¦b¨C­¶³øªí¤¤³£¦³µÛ¤@­Óºë½Tªº¦ì¸m¡A¤£·|µo¥Í°¾²¾¡C
¡@¡@§Ú­Ì¥i¥H§Q¥Îµ´¹ï¦ì¸m¨Ó¬°³øªí¼W¥[¯B¤ô¦L®ÄªG¡C±N¤@´T¯B¤ô¦L¹Ï¹³©ñ¦bPage Header°Ï±a¤¤¡A¨Ã¥B±N¥¦³]¬°¡§ÁY©ñ¤º®e¡A«O«ù§Îª¬¡¨¼Ò¦¡¡C±N¯B¤ô¦L¹Ï¹³ªº¡§From page top¡¨ÄÝ©Ê©M¡§From left¡¨Äݩʳ]¬°¬Y²Õ­È¡A³o²Õ­È¬Û·í©ó§Aªº¯B¤ô¦L¹Ï¹³¦b³øªí¤¤ªº¥ª¤W¨¤®y¼Ð¡CµM«á³q¹L§ïÅÜ¡§Height¡¨©M¡§Width¡¨Äݩʨӫü¥X¯B¤ô¦Lªº¤j¤p¡A¦ýª`·Nªº¬O¤£­n±N¹Ï¹³ªº¤Ø¤o³]±o¹L¤j¡A¥H§K¶W¹L¤F¦C¦L½d³òªºÃä¬É¡C
¼W±jªº¸ê®Æ¤À²Õ¥\¯à
¡@¡@Visual FoxPro 9³øªí³]­p¾¹¹ï¸ê®Æ¤À²Õ¥\¯à°µ¤F¤@¨Ç§ï¶i¡A¼W¤j¤F¸ê®Æ¤À²Õªº³Ì¤j¼Æ¶q­­¨î¥H¤Î¹ï¤ô·ÇÄ檺§ï¶i¡C
¡@¡@³Ì¤j¸ê®Æ¤À²Õ¼Æ
¡@¡@³Ì¤j¸ê®Æ¤À²Õ¼Æ±q­ì¨Óªº20­Ó¼W¥[¨ì¤F²{¦bªº74­Ó¡C¹ê»Ú­ì¨Óªºª©¥»¤]¤ä´©³Ì¤j74­Ó¸ê®Æ¤À²Õ¼Æ¡A¦ý¥Ñ©ó­ì¨Óªº¤¶­±¥u¤ä´©20­Ó¸ê®Æ¤À²Õªº¿é¤J¡A±q¦Ó¾É­P¤F³oºØ­­¨î¡C
¡@¡@¤ô·Ç¤ÀÄæ
¡@¡@¦b¥H«eªºª©¥»¤¤¡A¦pªG­n¬°¤@­Ó¸ê®Æ²Õ©w¸q¦h­Ó¤ô·Ç¤ÀÄ檺¸Ü±N·|®ö¶O«Ü¦h³øªíªÅ¶¡¡C¨Ã¥B²Ä¤@¦æ²Ä¤@¦C»P³øªíªº³»ºÝ¤§¶¡¦³¤@¨ÇªÅ¥Õ¡A¸ê®ÆÁÙ·|±q¦æ1¦C2¶}©lÅã¥Ü¡C¨Ã¥B¦b¨C­Ó¸ê®Æ²Õ¤¤³£·|¦³¤@­Ó¦h¾lªº°Ï±a¡A¦p¹Ï10©Ò¥Ü¡C§Y¨Ï¸ê®Æ²Õªº­¶ÀY°Ï±aªº°ª«×¬°0¡AVisual FoxPro ¤´µM±N«O¯d³o¨ÇªÅ¥Õ¡A¦p¹Ï11©Ò¥Ü¡C
¹Ï10. ·í¬°¸ê®Æ²Õ©w¸q¦h­Ó¤ô·Ç¤ÀÄæ®É¡A­ì¨Óª©¥»ªºVisual¡@FoxPro®ö¶Oªº³øªíªÅ¶¡
¹Ï11. §Y¨Ï¸ê®Æ²Õªº­¶ÀY°Ï±a°ª«×¬°0¡A­ì¨Óª©¥»ªºVisual FoxPro¤´±N«O¯d³o¨ÇªÅ¥Õ
¡@¡@¦bVisual FoxPro 9¤¤¸ê®Æ²Õ¤ÀÄæ±o¨ì¤F§ï¶i¡C·í³øªí³]­p¾¹µo²{¤@­Ó·s¸ê®Æ²Õ®É¡A¥¦±N±q²Ä¤@¦C¶}©lÅã¥Ü¡Aª½¦Ü“Ò¦æ¡C¦pªG¤£º¡¤@¦æ¡A¨º³Ñ¤Uªº³¡¤À±N¥HªÅ®æ¶ñ¥R¡C¦pªGÁÙ¦³¥¼¦C¦L§¹ªº©ú²Ó°O¿ýªº¸Ü¡A¨º³o¨Ç°O¿ý·|±q¤U¤@¦æ¶}©l¿é¥X¡A¦p¹Ï12©Ò¥Ü¡C¦pªG¸ê®Æ²Õªº­¶ÀY°Ï±aªº°ª«×¬°0¡A«hVisual FoxPro ±N¤£·|«O¯d¥ô¦óªÅ¥Õ¡A¦p¹Ï13©Ò¥Ü¡C
¹Ï12. ±N¸ê®Æ²Õ¶i¦æ¤ô·Ç¤ÀÄæ®É¡AVisual Foxpro 9±N¸`¬Ù§ó¦hªºªÅ¶¡
¹Ï13.¡@¦pªG¸ê®Æ²Õªº­¶ÀY°Ï±a°ª«×¬°0®É¡AVisual Foxpro 9¤£·|«O¯d¥ô¦óªÅ¥Õ
Visual FoxPro 9.0 ªº³øªí³]­p¾¹(6)
¡@¦h±ø©ú²Ó°Ï±a
¡@¡@³o­Ó·s¼W¥\¯à¨ä¹ê¦­¦b¥H«e´N«Ü»Ý­n¡A¥¦¬O¹ï¦Ñª©¥»ªº¤@­Ó«Ü¤jªº§ï¶i¡C¥¦¯àÅý§A¦b¤@­Ó¤÷ªí¤¤¬°¨C¤@±ø°O¿ý³B²z¬Û¹ïÀ³ªº¤lªí¡A³oºØ³øªí®æ¦¡ªº¤@­Ó¨å«¬¹ê¨Ò¦p¹Ï14©Ò¥Ü¡C
¹Ï14. ³o­Ó³øªí¬°¨C­Ó«È¤á³ø§i¤F¨äÁʶR«OÀIªº¸Ô²Ó¸ê°T
¡@¡@¸ê®Æªí»PÃöÁp
¡@¡@­n·Q¼ô½m¦a¨Ï¥Î³o¤@·s¯S¦â¡A§A¥²¶·©ú¥Õ¤÷ªí¬O«ç¼Ë»P¤lªí¤@°_¨ó¦P¤u§@ªº¡C§Ú­Ì¥H¹Ï15©Ò®i¥Üªº³øªí¬°¨Ò¡A¥¦¨Ï¥Îªº¸ê®Æ®wÀô¹Ò¦p¤U¡G
¡@¡@? «È¤áªí¡]Customer¡^¬O¤÷ªí¡A¥¦¥]§t¤F©Ò¦³ÁʶR«OÀIªº«È¤á¡C
¡@¡@? ®a®x¦¨­ûªí¡]Members¡^¬O«È¤áªíªº¤lªí¡A¥¦¥]§t¤F«È¤áªº©Ò¦³®a®x¦¨­û¡C
¡@¡@? ¥æ³qÀIªí¡]Vehicles¡^¤]¬O«È¤áªíªº¤@­Ó¤lªí¡A¥¦¥]§t¤F«È¤á©ÒÁʶRªº¥æ³qÀI¡C
¡@¡@? ®a®xÀIªí¡]Homes¡^¤]¬O«È¤áªíªº¤@­Ó¤lªí¡A¥¦¥]§t¤F«È¤á©ÒÁʶRªº®a®xÀI¡C
¡@¡@¥Dªí
¡@¡@¥²¶·¦³¤@­Óªí¨Ó°µ¬°³øªíªº¥Dªí¡A¦b¥»¨Ò¤¤¡A«È¤áªí¥¿¬O³o¼Ëªº¤@­Ó¸ê®Æªí¡C¦pªG§A¥Î¸ê®ÆÀô¹Ò¨Ó©w¸q¸ê®Æªíªº¸Ü¡A¨º¥²¶·±N¥¦ªºInitialSelectedAliasÄÝ©Ê©w¸q¬°³o­Ó¸ê®Æªí¡C¡@¦pªG§A¥Î¥N½Xªº¤è¦¡¨Ó©w¸q¸ê®Æªíªº¸Ü¡A¨º­n«OÃÒ·í¦¹³øªí¹B¦æ®É¡A«È¤áªí¥²¶·³B©ó·í«e¥´¶}ªº¤u§@°Ï¡C
¡@¡@¥Ø¼Ð§O¦W¡]Target Alias¡^
¡@¡@©Ò¿×¥Ø¼Ð§O¦W¡A¬O«ü¦b³øªí¬Y­Ó¯S©wªº°Ï±a¤¤°µ¬°¥Dªíªº¨º­Ó¸ê®Æªí¡C¦b¥»¨Ò¤¤¡A®a®x¦¨­ûªí¬O©ú²Ó°Ï±a1ªº¥Dªí¡A¥æ³qÀIªí¬O©ú²Ó°Ï±a2ªº¥Dªí¡A¦Ó®a®xÀIªí«h¬O©ú²Ó°Ï±a3ªº¥Dªí¡C
¡@¡@¦pªG¨S¦³¬°¬Y­Ó©ú²Ó°Ï±a©w¸q¥Dªí¡A¨º¥¦´N·|§e²{¥X»P¦Ñª©¥»ªºVisual¡@FoxPro¤@¼Ëªº¦æ¬°¡]¨C­Ó¤÷ªí¥u·|³B²z¤@­Ó©ú²Ó°Ï±a¡^¡C¦ý¦pªG§A©w¸q¨C­Ó¤÷ªí³£¬°¥Dªíªº¸Ü¡A¨ºµ²ªG·|¥þµM¤£¦P¡CVisual FoxPro¡@±N¨Ì¦¸³B²z¤÷ªí¤¤©Ò¦³°O¿ý¡A¨Ã¦b¨C­Ó©ú²Ó°Ï±a¤¤¨Ì¦¸±N¥¦­Ì¿é¥X¡C¡@
¡@¡@ÃöÁp
¡@¡@ÃöÁp¦b¦p¦ó±±¨î¦h±ø©ú²Ó°Ï±aªº¿é¥X¤¤°_¨ìªº­«­nªº¨¤¦â¡CVisual FoxPro³q¹L¤÷ªí»P¤lªí¤§¶¡ªºÃöÁp¨Ó¶i¦æ°O¿ýªº¾É¦V¡C§A¥i¥H³q¹LSET¡@RELATION©ÎªÌSET¡@SKIP¨Ó©w¸q³o¨ÇÃöÁp¡C¦pªG§A¦b¸ê®ÆÀô¹Ò¤¤¥´¶}¤F³o¨Ç¸ê®Æªí¡A¨Ã¥B¸ê®Æ®w¤¤¤w¸g©w¸q¤F¥¦­Ì¤§¶¡ªºÃöÁpÃö«Yªº¸Ü¡A¨º¤÷ªí»P¤lªí¤§¶¡±N·|¦Û°Ê¥Í¦¨ÃöÁp¡C
¡@¡@¦pªG§A±Ä¥Î¥N½X¤è¦¡¥´¶}¸ê®Æªíªº¸Ü¡A¨º¦Cªí1±N§i¶D§A¦p¦ó±N¹Ï15©Ò¥Üªº¸ê®ÆÀô¹Ò«Ø¥ß°_¨Ó¡C
¡@¡@¦Cªí1.«Ø¥ß¹Ï15ªº¸ê®ÆÀô¹Ò
¡@¡@¦p¤U¥N½X®i¥Ü¤F¦p¦ó±N¤÷ªí»P¤lªí«Ø¥ß³øªíÃöÁpªº¨Ò¤l¡C
¡@¡@*--¥´¶}¤lªí
USE Members IN 0 ORDER CustomerFK
USE Vehicles IN 0 ORDER CustomerFK
USE Homes IN 0 ORDER CustomerFK
¡@¡@*--¥´¶}¤÷ªí
SELECT 0
USE customer ORDER CustomerPK
¡@¡@*--¬°¤÷ªí©M¤lªí«Ø¥ß³øªíÃöÁp
SET RELATION TO CustomerPK INTO Members
SET RELATION TO CustomerPK INTO Vehicles ADDITIVE
SET RELATION TO CustomerPK INTO Homes ADDITIVE
©w¸q¦h±ø©ú²Ó°Ï±a
¡@¡@¦pªG§A·s«Ø¤@­Ó³øªí¡A¨º¥¦¯Ê¬Ù¦a¬°³o­Ó³øªí¥u³]¸m¤@­Ó©ú²Ó°Ï±a¡C³q¹L¥i¿ï°Ï±a¹ï¸Ü¤è¶ô¥i¼W¥[ÃB¥~ªº©ú²Ó°Ï±a¡C±q¡§Report¡¨¥\¯àªí¤¤¿ï¾Ü¡§Optional Bands...¡¨¥\¯àªí¶µ¥Ø´N¥i¥H¥´¶}³o­Ó¹ï¸Ü¤è¶ô¡C¥¦¨ä¹ê´N¬O­ì¨Óª©¥»¤¤ªº¡§¼ÐÃD/¤pµ²¡]Title/Summary¡^¡¨¹ï¸Ü¤è¶ô¡C
¡@¡@«ö¤@¤U¡§Add¡¨«ö¶s«K¥i¥H¼W¥[¤@­Ó·sªº©ú²Ó°Ï±a¡A§A¥i¥H¬°¤@­Ó³øªí©w¸q³Ì¦h20­Ó©ú²Ó°Ï±a¡C
¡@¡@©w¸q¥Dªí
¡@¡@³q¹L©ú²Ó¹ï¸Ü¤è¶ô§A¥i¥H¬°¨C¤@­Ó©ú²Ó°Ï±a©w¸q¨ä¥Dªí¡C±q¡§Report¡¨¥\¯àªí¤¤¿ï¾Ü¡§Edit Bands...¡¨´N¥i¥H¥´¶}³o­Ó¹ï¸Ü¤è¶ô¡A©ÎªÌ«ö¨â¤U©ú²Ó°Ï±aªº¦Ç¦âÄæ¤]¥i¹F¨ì¦P¼Ë®ÄªG¡C
¡@¡@¥Dªí¹ê»Ú¤W¬O¤@­Ó¹Bºâ¦¡¡A§A¥²¶·±N¬ÛÀ³ªº¸ê®Æªí¦W¥Î¤Þ¸¹¤Þ°_¨Ó¡C¦pªG§A©w¸q¤F¬Y­Ó¥Dªí¡A«h¬ÛÀ³ªº©ú²Ó°Ï±aªº¦Ç¦âÄæ±NÅã¥Ü¥¦ªº¦W¦r¡C
¡@¡@¦pªG§A­n«Ø¥ß¤@­Ó¦h±ø©ú²Ó°Ï±a§Î¦¡ªº³øªí¡A½Ð§O§Ñ¤F¦bÄæ¦ì«e­±¥[¤J¸ê®Æªí¦Wªº­º½X¡A®æ¦¡¬°¡§¸ê®Æªí¦W.Äæ¦ì¦W¡¨¡A³o¼Ë¥i¥H¨¾¤î¤£¦Pªº¸ê®Æªí¤§¶¡ªº¦P¦WÄæ¦ì½Ä¬ð¡C
¡@¡@­¶ÀY©M­¶§À
¡@¡@¦h±ø©ú²Ó°Ï±aªº¥t¤@­Ó§ï¶i´N¬O¯à¬°¨C¤@­Ó©ú²Ó°Ï±a¼W¥[¿W¥ßªº­¶ÀY©M­¶§À¡C³o»P­¶ÀY©M­¶§À¤À²Õ¦³¨ÇÃþ¦ü¡A¦ý¤´µM¦³¤@¨Ç¤£¦P¡C·í¨C­Ó¤÷ªí°O¿ýªº³B²z¬yµ{¦p¤U¡G
¡@¡@? ©ú²Ó°Ï±a1ªº­¶ÀY³Q³B²z¡C
¡@¡@? ³B²z©ú²Ó°Ï±a1¤¤¥Dªí¬ÛÀ³ªº©Ò¦³¤lªí°O¿ý¡C
¡@¡@? ©ú²Ó°Ï±a1ªº­¶§À³Q³B²z¡C
¡@¡@? ©ú²Ó°Ï±a2ªº­¶ÀY³Q³B²z¡C
¡@¡@? ³B²z©ú²Ó°Ï±a2¤¤¥Dªí¬ÛÀ³ªº©Ò¦³¤lªí°O¿ý¡C
¡@¡@? ©ú²Ó°Ï±a2ªº­¶§À³Q³B²z¡C
¡@¡@? ©ú²Ó°Ï±a3ªº­¶ÀY³Q³B²z¡C
¡@¡@? ³B²z©ú²Ó°Ï±a3¤¤¥Dªí¬ÛÀ³ªº©Ò¦³¤lªí°O¿ý¡C
¡@¡@? ©ú²Ó°Ï±a3ªº­¶§À³Q³B²z¡C
¡@¡@? ¥H¦¹Ãþ±À......
¡@¡@­n¬°¨C¤@­Ó©ú²Ó°Ï±a¼W¥[¿W¥ßªº­¶ÀY©M­¶§À¡A§A¥²¶·¦b¸Ô²Ó¸ê°T¹ï¸Ü¤è¶ô¤¤ªº¡§Detail Header/Footer¡¨ªºÀˬd®Ø¤¤¿ï¤¤¬ÛÀ³ªº©ú²Ó°Ï±a¡C¤]¥i³q¹LÂIÀ»©ú²Ó°Ï±a¤W¤èªº¼ÐÃD¦C¨Ó¹ï©ú²Ó°Ï±a¶i¦æ±Æ§Ç¡C
¡@¡@¾Ç®üµL²P
¡@¡@Visual FoxPro 9³øªí³]­p¾¹¼W¥[¤F¦p¦¹¦hªº¯S¦â¨ÓÀ°§A«Ø¥ß§ó¦nªº³øªí¡A¥H¦Ü©ó§A¤£±o¤£ªá§ó¦hªººë¤O¨Ó¾Ç²ß¥¦ªº·s¥\¯à¡A¦ý§Ú»{¬°³o¨Ç¾Ç²ß¬O«D±`­È±oªº¡C·sªº¸ê®ÆÀô¹Ò¤¹³\§A¦b¤£¦Pªº³øªí¤¤¦@¥Î¥¦¡C¹ï³øªíªº¦U­Ó³¡¤À´£¨Ñ¤F±j¦³¤Oªº«OÅ@¤è¦¡¡A¨Ï¥ÎªÌ¤¶­±¤]°µ¤F¤@µf§ïÀY´«­±¡AÅý§A±o¨ì§óµÎ¾Aªº¶}µoÅéÅç¡C§G§½ª«¥ó»P¸ê®Æ¤À²Õªº¼W±jµ¹§A´£¨Ñ¤F§ó¦hªº³øªí¾Þ±±¯à¤O¡C³Ì«á¡A·s±À¥Xªº¦h±ø©ú²Ó°Ï±aªº¯S¦â¯à«õ±¸¥X³øªí³]­p¾¹ªº§ó¦h¥\¯à¡C©Ò¦³ªº³o¨Ç§ï¶i¥iÅý§A³Ð«Ø¥X«D±`½ÆÂø¡B¥\¯à«D±`±j¤jªº³øªí¡C

¤T«ä¦P§Ó µoªí¤_2005-04-23 7:57 AM IP: 218.15.22.*
¤¶²Ð CursorAdapter Ãþ
vfp8³Ì¿E°Ê¤H¤ßªºÅܤƬO CursorAdapter Ãþ¡A¥¦¬°¤£¦Pªº¸ê®Æ¨Ó·½´£¨Ñ³q¥Îªº¸ê®Æ¤¶­±¡C
¤U­±¤¶²Ð«ç¼Ë¥Î CursorAdapter §ïÅܦb VFP 8 ¤¤³s±µ¸ê®Æªº¤è¦¡,¥]¬A¡Anative tables, ODBC, OLE DB, XML. ¡C
CursorAdapter Ãþ¬O VFP 8 ¶}µo²Õªº³Ìµ¹¤H¦L¶H²`¨èªº¦¨´N¤§¤@¡C ¥¦±N·|§ïÅܳ\¦h¶}µoªÌ³s±µ¦UºØ¤£¦Pªº¸ê®Æ¨Ó·½ªº¤è¦¡¡C ¶}µo¤p²Õ¦b VFP ¦s¨ú¸ê®Æªº¤è¦¡¤è­±§@¤F­«­n§ïÅÜ,±N¥»¦a©M»·ºÝ¸ê®Æ³s±µ¤è¦¡¶i¦æ¤F²Î¤@¡C¥t¥~¡A³Ð«Ø CursorAdapter Ãþ¹ï¨º¨Ç¤w¸g¼ô½m¨Ï¥Îµø¹Ï©MSPT¤H¨Ó»¡¨Ã¤£¶O¤O¡C¹ï¨Ï¥ÎADO RecordSets ©ÎXML¥iÂX®i¼Ð¥Ü»y¨¥Àɪº¤H¤]¤£¶O¤O¡C
CursorAdapter Ãþªº¿W¯S¤§³B¦b©ó¡A¥¦¬O²Ä¤@­Ó´£¨Ñ¥»¦a´å¼Ð¡BODBC¡BADO¡BXML¸ê®Æ¨Ó·½³s±µªº°òÃþ¡A¦b¤@­ÓÃþ¸Ì­±¹ê²{¤F©Ò¦³³s±µ¥\¯à¡C´«¥y¸Ü»¡¡A­n±NODBC¸ê®Æ¨Ó·½¡AADO RecordSet ©ÎXML¥iÂX®i¼Ð¥Ü»y¨¥ÀɽĶ¦¨¤@­Ó VFP ´å¼Ð¡ACursorAdapter Ãþ§¹¥þ¥i¥H³Ó¥ô¡C
§A©Î³\·|»¡ CursorAdapter ¬O¸û¦­ª©¥»¤¤¥»¦aµø¹Ï©M»·ºÝµø¹Ï§Þ³Nªº´À¥N (ª`·N: VFP 8¤¤¤´µM«O¯d³o¨Ç¥\¯à). ¦ý¬O¦b¤@¨Ç±¡§Î¤¤¡A¥¦¤]¥N´À¤FSPT, ¥H¤Î´î¤Ö¤F¨Ï¥ÎADO©MXML®Éªº¥N½X¶q¡A¥i¥Hª½±µ¨Ï¥ÎADO©MXML¡C
CursorAdapter ªº³Ì¤j¦n³B¬O¡A»Ý­n¦b¦P¤@­Óµ{¦¡¤º³s±µ¨ì¦h­Ó¸ê®Æ¨Ó·½ªº®É­Ô¡A¥¦¬°§A´£¨Ñ¤è«K¡CÁ|¨Ò»¡¡A¦pªG§Aªºµ{¦¡¤j³¡¤À¼Æ¾Ú¨Ó¦Û SQL server¡A¦ý¬O¦P®É»Ý­n»PXML¥iÂX®i¼Ð¥Ü»y¨¥³s±µ,CursorAdapter ¥i¥H¾ã¦X³o¨âºØ±¡ªp¡A¨Ïµ{¦¡¨ú¦^ªº¸ê®Æ§@¬°VFPªº´å¼Ð¡C
¥t¥~ªº¤@­Ó¨Ò¤l¬O¸ê®Æ²{¦b³QÀx¦s¦b VFP ªí¤¤ , ¦ý¬O­pµe­n²¾¨ì¤@­Ó¸ê®Æ®w¦øªA¾¹ , ¤ñ¦p SQL server©ÎOracle¡C §A»Ý­n¥ý«Ø¥ß¤@²Õ VFP CursorAdapter Ãþ¡A¥²­nªº®É­Ô¥H SQL server¥H¥~ªº¸ê®Æ®w¥N´À³o¨ÇÃþ¡C
¦ý¬O,´N¶H§Ú­Ì¯à¶]¤§«e¥²¶·¾Ç·|¨«¤@¼Ë,¥ý·§Äý¤@¤U CursorAdapter Ãþ©M¥¦ªº¯S©Ê¡C µM«á¡A¨Ï¥Î CursorAdapter Ãþ¨Ó³]­p¸ê®ÆÃþ¬O¤ñ¸û®e©öªº¡C
«Ø¥ß²Ä¤@­Ó CursorAdapter Ãþ¡A¶H¨ä¥LÃþ¤@¼Ë¡A¾Ç²ß«ç¼Ë¨Ï¥Î¥¦ªº³Ì¦n¿ìªk¬OÁA¸Ñ«Ø¥ß¹Lµ{¡C²Ä¤@¦¸«Ø¥ß³o¨ÇÃþªº®É­Ô½ÆÂøµ{«×§C¤@¨Ç,§Ú­Ì¶}©l¥Î CursorAdapter Ãþ¦s¨ú VFP ¥»¦aªº¸ê®Æ¡C ³o«Ü¶H¨Ï¥Î¥»¦aµø¹Ï¨ú¦^ VFP ¥»¦aªíªº¸ê®Æ¡C µy«á¦b³o¤@½g¤å³¹¤¤¡A§Ú­Ì±N·|¨Ï¥Î¥t¤@­Ó CursorAdapter Ãþ³s±µ¨ì SQL server¸ê®Æ®w¡AODBC©MXML¡C
­º¥ý¡A§A¦³¤G­Ó¤èªk«Ø¥ß CursorAdapter ¡C §A¯à¨Ï¥Î¸ê®ÆÀô¹Ò«Ø¥ß¡A¤]¥i¥H¤â°Ê³q¹Lµ{¦¡©ÎÃþ³]­p¾¹¨Ó³Ð«Ø¤@­Ó¸g¹L¤@­ÓCursorAdapterÃþ ¡C ³o¤@­Ó¨Ò¤l±N·|¨Ï¥Î¸ê®ÆÀô¹Ò«Ø¥ß¡F¸û¿ðªº¨Ò¤l±N·|¤â°Ê«Ø¥ß.
¦pªG§A¤£¼ô±x VFP 8 Åܤƫ᪺¸ê®ÆÀô¹Ò, §A¥i¯à»{¬°¦b³]­pÀô¹Ò¤U³Ð«Øªº CursorAdapter ¥u¯à¦bªí³æ¤¤¨Ï¥Î,¤£¯à¥Î©óÃþ¡C µM¦Ó¡A VFP 8 ¤¤¤w¸g§ïµ½¤F³]­pÀô¹Ò¡A¦]¦¹¤£»Ý­n¦bªí³æ¤¤´N¥i¥H³Ð«Ø¡C
¥Îcreat class©R¥O³Ð«Ø¤@­Ó·sªº¸ê®ÆÀô¹ÒÃþ¡C
½T©w±q¤U©Ô²M³æ¤¤¿ï¾Übased on¸ê®ÆÀô¹ÒÃþ(dataenvironment) ¡CÃþ¦W¬°Tests,©ÒÄÝÃþ®w¦W¬°tests.vcx.
³Ð«ØªºÃþ¦bÃþ³]­p¾¹¤¤¥X²{«á¡A«ö¥kÁäData Environment ¡A¿ï¾Übuilder,°_°Ê¸ê®ÆÀô¹Ò«Ø¥ßÂQ¾É¡C
¦b¸ê®Æ¨Ó·½Ãþ«¬¶µ¤U¡Aª`·N¥i¿ïªº¿ï¶µ¡C ¦]¬°²Ä¤@­Ó¨Ò¤l±N·|³s±µ¨ì¥»¦aªº VFP ªí,¿ï¾Ünative¡C ¿ï¾Ü§¹¥H«á, ¨Ï¥Î¡¥¬Ù²¤¸¹¡¦«ö¶s¿ï¾Ü Northwind ¸ê®Æ®w¡]§Ú³o¸Ì¬Ogzdata¸ê®Æ®w¡^¡C (Àq»{¦ì¸m¬O c:\ program files\microsoft visual foxpro 8\ sample\northwind\ northwind.dbc)
¤U¤@¨B,ÂIcursors ­¶, ¥¦ªì©l­È¬OªÅªº¡C ¦b²M³æ¤è¶ô¤¤,¿ï¾Ünew«ö¶s¥Î CursorAdapter ³]­p¾¹³Ð«Ø¤@­Ó·sªº CursorAdapter Ãþ¡C
­º¥ý¡A§AÀ³¸Ó¬Ý¬ÝProperties­¶¡A³o¸Ì´£¨Ñ¿ï¶µ¨Ó¿ï¾ÜÃþªº¦W¦r©M¥ÑÃþ²£¥Íªº´å¼Ðªº§O¦W¡C
½T©w´£¨Ñ¤@­Ó¤£¦P©óªí¦W¦rªº§O¦W¡AÁקK²£¥Í²V¶Ã¡C ¦b³o¸Ì,¨Ï¥Î caCustomer °µÃþ¦W¡A cCustomer §@¬°§O¦W¡C ¦pªG·QÅý³o­ÓÃþ¥Î©M¸ê®ÆÀô¹Ò¤@¼Ëªº¸ê®Æ¨Ó·½¡AÀ³¸Ó¿ï¾Ü "Use DataEnvironment data source" ¡C ª`·N§A¥i¥H¬° CursorAdapter ³]¸m¤£¦Pªº¸ê®Æ¨Ó·½, ¤¹³\§A¦b¤£¦PªºÃþ¤§¶¡¾ã¦X¸ê®Æ¨Ó·½.( ¨Ò¦p¤@­ÓÃþ¨Ï¥ÎODBC¸ê®Æ¨Ó·½¡A¥t¤@­ÓÃþ¨Ï¥ÎXML¸ê®Æ¨Ó·½)
­n©w¸qCursorAdapter ¦p¦óªð¦^¨Ó¦Û¸ê®Æ¨Ó·½ªº¸ê®Æ,¨Ï¥Î³]­p¾¹¤¤ªºData Access ­¶¡C «öbuild«ö¶s±Ò°Ê¤@­Ó¹ï¸Ü¤è¶ô¡A¥i¥H¿ï¾Ü´å¼Ð¥]§tªºÄæ¦ì¡C
¦b³o­Ó¨Ò¤l¤¤,¿ï¾ÜCustomersªí, µM«á¿ï¾ÜCustomers.*¡C ÂIÀ»¦V¥kªº½bÀY²¾°Ê¿ï¾Ü¶µ, µM«áÂIok¡C
³o¬°§A«Ø¥ß¤U¦CSQL»y¥y:
select CUSTOMERS.* from CUSTOMERS
¦pªG§A·Q²K¥[¿zÀ˵{¦¡,³s±µ, ©Î¨ä¥L±ø¥ó¨ì¬d¸ß,§A¥i¥H¦b²M³æ¤è¶ô¤¤ª½±µÁä¤J¡C ¦pªG§A·Q«Ø¥ß±a°Ñ¼Æªº¬d¸ß,¦³¤@¨Ç¿ï¶µ,¦b¥»¤å«á­±¤¶²Ð¡C ²{¦b, Åý§Ú­Ì²K¥[WHERE¤l¥y:
select CUSTOMERS.* from CUSTOMERS where
companyname like 'C%'
³o¸Ì¥i¥H¬Ý¥X·½ªí©M´å¼Ðªº¤£¦P¡A¦]¬°¥u¦³¤Ö¼Æ°O¿ý²Å¦XWHERE¤l¥y¡C
¦b²Ä¤G­Ó½s¿è¤è¶ô(schema)¤¤¤w¸g¬°¬°§A³Ð«Ø¤FÄæ¦ì²M³æ¡C³q±`¦bÄ~Äò¥H«eªá´X¤ÀÄÁ¬Ý¬ÝÄæ¦ì¶¶§Ç¬O§_²Å¦X§Aªº²ßºD¬O¦³¦n³Bªº
¦b³o¤@­¶ªº¤U¥b³¡¤À¦³¸ê®Æ¥]³]¸m¹ï¸Ü¤è¶ô¡]data fetching¡^¡A¥Î¨Ó³]¸m«ç¼Ë³B²z»·ºÝ¸ê®Æ¥]¡A·í¥Îvfp§@¬°¸ê®Æ¨Ó·½ªº®É­Ô¡A³o¸Ìªº³]¸m¤£µo´§§@¥Î¡C¡]¦p¤W¹Ï¡^³o¸Ì§Ú­Ì«O¯dÀq»{³]¸m¡Aµy«á¦AÁ¿­z¨ãÅé²Ó¸`¡C¦b¥»­¶ªº©³³¡ªþªñ¬O½w½Ä¼Ò¦¡³]©w, ¤¹³\§A³]¸m¥ô¦ó³QÃöÁpªºªí³æªº½w½Ä¼Ò¦¡¡C¦³¨â­Ó¿ï¶µ¡G¶}©ñ¦¡¦æ½w½Ä©M¶}©ñ¦¡ªí½w½Ä¡C
³q±`¡A§A¨Ï¥Î¶}©ñªºªí½w½Ä¼Ò¦¡¡A°£«D§A¦³¯S®í­n¨D¨Ï¥Î¦æ½w½Ä¼Ò¦¡¡C¦b³o­Ó¨Ò¤l¤¤³]¸m¬°¶}©ñ¦¡ªºªí½w½Ä¡C³Ì«á¡A¡§break on error¡¨±±¨îCursorAdapterÃþ«ç¼Ë¨Ó³B²z¿ù»~¡C¹w³]³]¸m¬OÃþ¡]class¡^¦Û¦æ®·Àò¿ù»~¡A¨Ã¥B¤¹³\§A¥Îaerror()¨ç¼Æ®·Àò³o¨Ç¿ù»~¡C¿ï©w³o­Ó³]¸m¡ACursorAdapterÃþ¤º³¡¤£ºÞµo¥Í¤°»ò¿ù»~¡Avfp³£·|¥X²{¿ù»~¸ê°T¡C¤]´N¬O»¡¡A§A»Ý­n¨Ï¥ÎON ERROR©R¥O©ÎªÌ¡¥Ãþ¡¦ªºERROR¨Æ¥ó¨Ó±Æ°£¤£»Ý­n³ø¿ùªº±¡ªp¡C³q±`±¡ªp¤U¤£¿ï³o¶µ³]¸m¡A¥H«Kµ{¦¡¯à³B²z¥ô¦óµo¥Íªº¨Ò¥~±¡ªp¡C
³Ì«á¤@­¶ (auto update) °t¸m¦p¦ó§ó·s·½ªí¡C¦b³q±`±¡ªp¤U¡A¿ï¾Ü¡§¦Û°Ê§ó·s¡]auto-update)¡¨©M¡§§ó·s©Ò¦³Äæ¦ì(update all fields)¡¨¡C
³o±N¨ÏcursoradaperÃþ¹ï´å¼Ð¡]cursor¡^¤¤¸ê®Æªº¥ô¦ó§ïÅܦ۰ʫإ߾A·íªº§ó·s¡B´¡¤J¡B§R°£¾÷¨î¡CµM¦Ó¡A§A¥²¶·¿ï¾Ü´å¼Ð¤¤ªº¥DÃöÁä¦r¬q¡A¥H«K³o¨Ç¾÷¨î¡]§ó·s¡B§R°£¡B´¡¤J¡^°ß¤@ªºÃѧO·½ªí¤¤ªº°O¿ý¡C¦b¥»¨Ò¤¤¡ACustomerID¬OÃöÁä¦r¬q¡C¦]¦¹¡A»Ý­n¦b¨ä«e­±¤j¤W¡¥¹ï¸¹¡¦¡C¨ä¥Lªº³]¸m¼È®É«O¯d¹w³]­È¡C¨ãÅé³]¸m¿ìªk¦b¥»¤å«á­±Á¿­z¡C³]¸m§¹cursoradaper«á¡AÂIÀ»¡§ok¡¨«ö¶s¡A¦^¨ì¸ê®ÆÀô¹Ò³]¸m¡C¦¹®É¡A§AÀ³¸Ó¦b¥ªÃä²M³æ¤è¶ô¤¤¯à¬Ý¨ìcaCustomerÃþ, ¦b¥kÃä¬Ý¨ì²Ó¸`¡C¦pªG§A·Q§ó§ï³o­ÓÃþ¡A§A¥i¥HÀH®É¥Î¸ê®ÆÀô¹Ò¡¥builder¡¦§ó§ï¡A¿ï¾Ü»Ý­n§ó§ïªºCursorAdapter Ãþ¡AµM«áÂIÀ»builder«ö¶s¡C
¦s¨ú VFP ¸ê®Æ
¦¹®É¡A§A¥i¥H´ú¸Õ¸ê®ÆÀô¹Ò¡A¬Ý¬Ý¬O§_¯à¨ú¦^¦b CursorAdapter ªº«ü¥O¤¤¿z¿ïªº¸ê®Æ¡C ¨Ï¥Î©R¥Oµ¡¤á,¨Ò¥Ü DE Ãþ¦Ó¥B³ê°_ OpenTables ¤èªk:
lo = NewObject("deTest","Tests.vcx")
? lo.OpenTables()
BROWSE
¤@­Ó¯S®í±¡ªp¬O¡ACursorAdapterªº´å¼Ð³s±µ¨ì¨ä¥¦ª«¥ó¡A¦pªG§A·´Ãa¤F«ü¦VCursorAdapterÃþªºª«¥ó¡A·|¥á¥¢´å¼Ð©M¨ä¤¤ªº°O¿ý¡C³o´N¬O»¡¡A§A¥²¶·½T«OCursorAdapterª«¥ó°Ñ¼Æ¦b§A¥´ºâ¦s¨úªºÃöÁp´å¼Ðªº½d³ò¤º
½s¿è VFP ¸ê®Æ
²{¦b, Åý§Ú­Ì¬Ý¬Ý¬O§_¯à°÷§ó·s´å¼Ð¡A¨Ã¥B§â§ó·s·Ç½T¦aµo°e¨ì·½ªí¡C¦b©R¥Oµ¡¤f´ú¸Õ¥H¤U©R¥O:
REPLACE contactname WITH 'My Name Here'
?TABLEUPDATE()
SELECT customers
BROWSE
¬yÄýcustomers§O¦W,§A·|µo²{­×§ï¹Lªº°O¿ý¤w¸g§ó·s¨ì·½ªí¤¤¡C ¦pªG§A¦bµo°ereplace©R¥O¤§«e¨S¦³²¾°Ê°O¿ý«ü¼Ð,«È¤áID¤¤ 'CACTU' ©Ò¦bªº°O¿ý³Q­×§ï¡C ¤£ºÞ§A­×§ï­þ±ø°O¿ý, ³oÃÒ©ú CursorAdapter ¬O¯à°÷³Q§ó·s¡A¦Ó¥B§ó·s¯à°÷·Ç½T¦a³Qµo°e¨ì·½ªí¡C
Åý§Ú­Ì¥´¶}§A­è­è´ú¸Õªº¸ê®ÆÀô¹ÒÃþ¡A³o¤£¥u¬O¤@­Ó½m²ß¡X¥¦¬O¤@­Ó«Ü´Îªº¤èªk¾Ç²ß·í§A¨M©w¦b¸ê®ÆÀô¹Ò¥H¥~«Ø¥ß¦Û¤vªºÃþªº®É­Ô¡A¸Ó¦p¦ó¥¿½T¦a°t¸m¤@­Ó CursorAdapter Ãþ¡C
ÁöµM¸ê®ÆÀô¹Ò¦³¤@¨ÇÄݩʧïÅÜ©M¤@­Ó¤èªk, §Ú­Ì¹ê»Ú¤W¹ï¨º¨Ç§ïÅܤ£·P¿³½ì¡C¬Ý¤@¤U¤U©Ô¦¡²M³æ¤è¶ô¤¤ªºÄݩʲM³æ¡A¿ï¾Ü caCustomer Ãþ¡A¬Ý¬Ý«Ø¥ß CursorAdapter Ãþªº®É­Ô»Ý­n¶i¦æªº³]¸m¡C ªí 1 ·§­z³Qbuilder©M¨C­Ó PEM ©Ò°µ§ïÅÜ¡C
©Ò¦³ªºÄÝ©Ê¥]§t¦b "see Init" ,³q¹LINIT¤èªk¤¤ªº¥N½X¨Ó³]¸m³o¨ÇÄÝ©Ê¡C ¨º¤@¬q¥N½XÅã¥Ü¦blist 1¤¤¡C
¦bbuilder³]¸m§¹¥H«á¡A¬Ý¬Ý¤@¨ÇÄݩʬO«ç¼Ë³]¸mªº¡A³o¬O³Ì¦nªº¾Ç²ß¤èªk¡C§A¥i¥H¦b³o¸Ì©ÎªÌ³q¹Lbuilder§ïÅܳ]¸m­È¡CµM¦Ó¡A¦pªG¦b³o¸Ì§ïÅܳ]¸m­È¡A§A»Ý­n«_¯}Ãa¤@¨Ç¥\¯àªº­·ÀI¡A¦]¬°§A¦b³o¸Ì§ïÅܪºÄݩʦ³¥i¯à¦bbuilder¸Ì¤£·|µo¥Í§ïÅÜ¡C
¤£ºÞ«ç¼Ë,§A¯à¦b Init() ¥N½X¤¤¬Ý¨ì SelectCmd ÄݩʬO¦p¦ó±Ô­zªº, ¦P¼Ë¦b KeyFieldList ¡A UpdatableFieldList ©M UpdateNameList¤¤¤]¥i¥H¬Ý¨ì¡C ¯S§Oª`·N UpdateNameList ÄÝ©Ê¡X³o­ÓÄݩʦC¥X´å¼Ðªº¨C¤@­ÓÄæ¦ì¥H¤Î·½ªí¤¤¹ïÀ³ªºÄæ¦ì(±aªí¦WºÙ)¡C
·í±qÀY³Ð«Ø§A¦Û¤vªº CursorAdapter Ãþªº®É­Ô¡A§A¥i¯à·Q¦b³o­Ó¦Cªí¤¤¬Ù²¤ªí¦W¦r¡C µM¦Ó¡A¦pªG¤£¨Ï¥Îºë½Tªº®æ¦¡¡A§Aªº§ó·s±N·|¥¢±Ñ, ¦ý¬O¨S¦³¿ù»~´£¥Ü¡C ¦b«á­±Á¿¤£³q¹Lbuilder«Ø¥ß¤@­ÓÃþªº®É­Ô§Ú±N¦A»¡³o¤@ÂI¡C
«e­±§Ú»¡¹L CursorAdapter¨Ï¥Î¥»¦aªº¸ê®Æ¨Ó·½ªº®É­Ô , ¥»½è¤W¬O¤@­Ó´À¥N¤F¥»¦aµø¹Ï¡C¦pªG§A´¿¸g¥Î¹L¥»¦aµø¹Ï¡A§A¥i¥Hµo²{Ãþ¦üªº¦a¤è: ¥Í¦¨¤@­ÓSQL select»y¥y¡A©w¸q­þ¨ÇÄæ¦ì±N³Q§ó·s¡A³]¸mÃöÁä¦r¬q¡A³Ñ¤Uªº¨Æ±¡Åý VFP ¨Ó°µ¡C ¤@¥¹´å¼Ð¤¤¨ú¦^¸ê®Æ¡A¥i¥H¨Ï¥Î TableUpdate() µo°e§ó·s¨ì·½ªí¡A¦Ó¥B VFP ¦Û°Ê¦a«Ø¥ß¥²­nªºupdate,insert,delete»y¥y¡C
ÁÙ¬O¥H¤W­±ªº¨Ò¤l, ¨ú®øcCustomer §O¦W¤¤contactÄæ¦ì³Q´À´«ªº¸ê®Æ¡C³q¹LTableUpdate ¡A VFP ¦Û°Ê¦a²£¥Í (¨Ã´£¥æ)¤U¦C§ó·s©R¥O¹Á¸Õ§ó·s:
UPDATE customers ;
SET CONTACTNAME=ccustomer.contactname ;
WHERE ;
CUSTOMERID=OLDVAL('customerid','ccustomer');
AND ;
CONTACTNAME=OLDVAL('contactname','ccustomer')
VFP ¯à°÷®Ú¾ÚCursorAdapterªºKeyFieldListÄÝ©Ê©M³¡¤ÀUpdateNameListÄݩʤ¤ªº­È²£¥Íwhere¤l¥y¡C¥¦³q¹L¤l¥y°O¿ý¨º¨Ç¤w¸g³Q§ïÅܩβK¥[ªº°O¿ý¡A«OÃÒ§A¤£·|§ó·s¨º¨Ç§O¤H¤w¸g§ó·s¹Lªº°O¿ý¡Cª`·N¡A³o¬O¦]¬°§Ú­Ì¦b¥¦ªºWhereType Äݩʤ¤«O¯d¹w³]­È "key fields and any modified fields."
¿ù»~³B²z
©úÅ㪺¡A·í¥Î CursorAdapter §ó·s¸ê®Æ®É­Ô ,¨Ã¤£¯à§¹¥þ¦p§A©ÒÄ@¡C§Aª¾¹D,¦hºØ­ì¦]¥i¥H¾É­PTableUpdate §ó·s¥¢±Ñ, ¨Ò¦p§ó·s½Ä¬ð©Î°O¿ý¥[Âꥢ±Ñ¡C§A¥²¶·¹ï CursorAdapter Ãþ°µ¯S§O³B²z¨Óµo²{³o¨Ç°ÝÃD¶Ü? µª®×¬O,"µø±¡ªp¦Ó©w ."
§Ú­Ì¨Ó«Ø¥ß¤@­Ó²³æªº§ó·s°ÝÃD¡Gµ¹CursorAdapter¹Á¸Õ§ó·sªº¤@±ø°O¿ý¥[Âê¡C¦pªGÃþ³]­p¾¹¤´µM¬O¶}µÛªº,Ãö±¼¥¦¡CµM«á, ¹³«e­±°µ¹Lªº¤@¼Ë¡A¥Î NewObject ¨ç¼Æ±Ò°ÊdetestÃþ,¦Ó¥B±Ò°Ê OpenTables ¤èªk¡C¬yÄý´å¼Ð¥H«K§A¯à¬Ý¨ì¸ê®Æ,¦ý¬O¥ý¤£­n§ïÅÜ¥ô¦óªF¦è¡C
²{¦b¥´¶} VFP 8 ªº²Ä¤G­Ó¹ê¨Ò¡A³o¼Ë´N¯à°÷¥[Âê°O¿ý¡C ¦b©R¥Oµøµ¡¤¤¹B¦æ¤U¦C»y¥y¥[Âê§A±N¹Á¸Õ§ó·sªº°O¿ý:
OPEN DATABASE (HOME(2)+"Northwind\northwind.dbc")
USE customers
LOCATE FOR customerid = 'CACTU'
?RLOCK()
§AÀ³¸Ó¯àªð¦^.T.¡Aªí©ú°O¿ý½T¹ê³Q VFP ªº³o¤@­Ó¹ê¨Ò¥[Âê¡C
¦^¨ì VFP ªº²Ä¤@­Ó¹ê¨Ò¡A¦b©R¥Oµøµ¡¤¤¹B¦æ¤U­±ªº¥N½X:
REPLACE contactname WITH 'updated'
SET REPROCESS TO 2 SECONDS
?TABLEUPDATE()
¦b³oºØ±¡ªp, TableUpdate ªð¦^.F.,ªí²{°O¿ýÂêªý¤î§ó·s¦¨¥\¡C ¦pªG§A¥Î AERROR() ®·Àò¿ù»~¦Ó¥BÅã¥Ü¿ù»~µ²ªG, §A·|¬Ý¨ì¿ù»~¸ê°T "°O¿ý¨S¥[Âê"¡C ³o·N¨ýµÛ¦pªG§A¹ï³]¸m½w½Äªºªíª½±µ¾Þ§@¦Ó¤£¬O¤@­Ó´å¼Ð¡A§A¯à¥Î¦P¼Ëªº¿ìªk³B²z¿ù»~¡C
¤£©¯¦a¡A¤£¬O©Ò¦³ªº¹w´Á¿ù»~³£·|³o¼Ëªí²{¥X¨Ó¡C»Ý­n¯S§Oª`·Nªº¬O§ó·s½Ä¬ð,¤ñ¦p¤@­Ó¨Ï¥ÎªÌ¥ø¹ÏÂл\¨ä¥L¤H©Ò§@ªº­×§ï¡C·Q¬Ý¬Ý³oºØ¦æ¬°ªºµ²ªG,¦b·í«eªº VFP ¹ê¨Ò¤¤(CursorAdapter ¥¿¦b¨Ï¥Î)¹B¦æ¤U­±ªº¥N½X¡G
?TABLEREVERT(.T.)
REPLACE contactname WITH 'client 1'
²{¦bÂàÅܦb¨ì²Ä¤G­Ó¨ÒÃҨåBµo¦æ¤U¦C«ü¥O:
CLOSE DATABASES all
OPEN DATABASE (HOME(2) + "Northwind\northwind.dbc")
USE customers
LOCATE FOR customerid = 'CACTU'
REPLACE contactname WITH 'client 2'
BROWSE
ªð¦^²Ä¤@­Ó¹ê¨Ò, ¹Á¸Õ¥Î TableUpdate µo°e§ó·s:
?TABLEUPDATE()
¦b³oºØ±¡ªp¡A TableUpdate ¿ù»~¦aªð¦^.T.,¨Ï§A¬Û«H§ó·s¦¨¥\¤F! µM¦Ó, ¨Æ¹ê¤W¨Ã¨S¦³¦¨¥\¡A¦Ó¥B³o¥i¥H³QCursorAdapterªºCursorRefresh() ¤èªkÃÒ©ú, ¥Î¤U¦C¥N½X:
?TABLEREVERT(.T.)
?lo.caCustomer.CursorRefresh()
CursorRefresh ¤èªk§i¶D CursorAdapter ¦A¹B¦æ SelectCmd ¸Ìªº»y¥y¡A¨Ã¥B¨ú¦^¨Ó¦Û·½ªíªº³Ì·s¸ê®Æ¡C ¹ïContactName Äæ¦ìªº´ú¸Õ»¡©ú CursorAdapter ®Ú¥»¨S§ó·sÄæ¦ì­È!
¸Ñ¨M³o¤@­Ó°ÝÃDªº³Ì²³æªº¤èªk­n§Q¥Î CursorAdapter ªº AfterUpdate ¤èªk¡C³o¤@­Ó¤èªk¦b TableUpdate µo°e«O¦s¨C±ø°O¿ýªº½Ð¨D«á³Q°õ¦æ¡Cª`·N³o­Ó¡¥¤èªk¡¦¥u¹ï¥Ø«e°O¿ý¦³®Ä¡C ¦pªG°O¿ý¬O·sªº¡A©ÎªÌ°O¿ý¤w¸g³Q§R°£,·|±Ò°ÊAfterInsert ©Î AfterDelete ¤èªk¡C
AfterUpdate ¤èªk®·Àò¤@¨Ç°Ñ¼Æ, ¥]¬A³ÌªìªºÄæ¦ìª¬ºA,¬O§_³Q±j¨î§ó§ï, ©M§@¬°§ó·sªº©R¥O¡C ³Ì«á¤@­Ó°Ñ¼Æ , lResult,¬O§Ú­Ì³o³¡¤À¥DÃD³Ì­«­nªº,¦]¬°¥¦§i¶D§Ú­Ì§ó·s¹Lµ{¬O§_¦¨¥\¡C
¨Ï¥Îªº¥t¤@­Ó­«­n¨¤¦â¸Ñ¨M§ó·s½Ä¬ð°ÝÃDªº¬O¨t²ÎÅÜ¼Æ _tally, ¥¦§i¶D§Ú­Ì³Ì«á¤@¦¸¾Þ§@¼vÅT¤F¦h¤Ö°O¿ý¡C ¦]¦¹¡A¦pªG lResult ©ñ¦^¦¨¥\ªº, ¦ý¬O _tally¬O¹s,¨º»ò»¡©ú¨S¦³°O¿ý³Q§ó·s¡A¨º»ò§A¥i¥H§P©w³oºØ±¡ªp¬O¤@­Ó§ó·s½Ä¬ð¡C
²³æ»¡¡A¸Ñ¨M³o¤@­Ó°ÝÃDªºÂ²³æ¤èªk¬O§â¤U¦C¥N½X¥[¤J CursorAdapter Ãþªº AfterUpdate ¤èªk:
LPARAMETERS cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd, lResult
IF lResult AND _TALLY = 0 THEN
ERROR 1585 && update conflict
ENDIF
¦³½ìªº¬O§A¦b¿Ã¹õ¤W¬Ý¤£¨ì¿ù»~¸ê°T;¿ù»~¸ê°T³Q TableUpdate ¡§­­¨î¦í¤F¡¨,³o´N­¢¨Ï§A¨Ï¥Î AError ¨ç¼Æ¤ÀªR§ó·s¥¢±Ñªº­ì¦]¡C¥X²{³o¼Ëªº²{¶H¬O¦]¬° BreakOnError ÄÝ©Ê«O¯d¤F¹w³]­È ,¤]´N¬O¿ù»~¤£¤Þ°_µ{¦¡¤¤Â_¡C¦pªG§A§â³o­ÓÄݩʳ]¬°¡§ture",¨º»ò"§ó·s½Ä¬ð" ¿ù»~¸ê°T´N·|¥X²{,¦pªG§@¤F©w¸q,§AªºON ERROR±±¨î½X·|³Q¹B¦æ¡C
³o¤@­Ó§ó·s½Ä¬ð°ÝÃD¬O¬° CursorAdapter³]­pªº¡A¦]¬° VFP 8 ¨S¦³¦Û°Êµo²{³o­Ó°ÝÃD¤èªk¡C¦]¦¹¡A·í¤£¥Î¥»¦a¸ê®Æ¨Ó·½ªº®É­Ô¡A³o­Ó¥N½X( ©Î¬Û¦üªº¥N½X)·|¥Î¦b§AªºCursorAdapterÃþ³]­p¤¤¡C
CursorAdapter with ODBC
²{¦b§A¤w¸g¦³¤F¤@©wªº°ò¦, Åý§Ú­ÌÄ~Äò¬Ý¬Ý·í«á»O¸ê®Æ®w¥Î SQL serverªº®É­Ô«ç¼Ë¶i¦æ³]¸m¡C§Ú­Ì±N±q¨Ï¥Î VFP ³q¹LODBC³s±µ SQL server¤Wªº Northwind ¸ê®Æ®w¶}©l¡C¦P¼Ë, Åý§Ú­Ì±qÀY«Ø¥ß CursorAdapter ¥H«K¥i¥H¬Ý¨£Ãþ»Ý­n³]¸mªº¦U­Ó¤è­±¡C
­º¥ý,¥Î¤U¦C«ü¥O¦bÃþ³]­p¾¹¤¤«Ø¥ß¤@­Ó·sÃþ:
CREATE CLASS caODBC OF tests as CursorAdapter
³o¸Ì»Ý­n³]¸mªº³Ì­«­nªºÄݩʬO DataSourceType ÄÝ©Ê¡C ¦]¬°§Ú­Ì·Q³q¹LODBC³s±µ SQL server,±N³o¤@Äݩʳ]¸m¬°ODBC¡C·í¨Ï¥Î³oºØ³s±µ¤è¦¡ªº®É­Ô , DataSource Äݩʻݭn¦³¤@­Ó½T¤Áªº³s±µ±±¨î½X,¥i¥H¥Î SQLConnect ©Î SQLConnectString ¨ç¼Æ«Ø¥ß¡C ¦b¥ô¤@±¡ªp¡A³o¨Ç¥\¯àÀ³¸Ó¦b CursorAdapter Ãþªº Init ¤èªk¤¤¨Ï¥Î¤U¦C¥N½X:
LOCAL lcConnStr, lnConn
** string assumes trusted connection (integrated security)
lcConnStr = "Driver=SQL Server;Server=(local);DATABASE=Northwind"
lnConn = SQLSTRINGCONNECT(lcConnStr)
IF lnConn > 0 THEN
THIS.DATASOURCE = lnConn
ELSE
** unable to connect
ENDIF
³s±µ¦r¦ê°²©w§A¨Ï¥Î¥i«H¿àªºÃöÁp¨ì SQL server¡F¦pªG§A¨Ï¥Î¦w¥þªº³s±µ¨ì SQL server,§â "uid"= ©M "pwd"= ¦ê¥[¤J³s±µ±±¨î½X«ü©w¨Ï¥ÎªÌ¦WºÙ©M±K½X¡C ¥ô¦ó¤@ºØ±¡ªp¤U¡Aªð¦^ªº¬O³s±µ¬` , ©Î¿ù»~µo¥Í®Éªº§_©w­È¡C ³o¤@­Ó³s±µ¬`³Q«ü©w¬° DataSource ÄÝ©Ê¥H«K CursorAdapter ª¾¹D¸Ó¨ì­þ¸ÌÁn©ú¡C
¤U¤@­Ó¨BÆJ¬O«Ø¥ß SelectCmd ¥H«K CursorAdapter ª¾¹D»Ý­n±q¸ê®Æ¨Ó·½¨ú¦^¤°»ò¸ê®Æ¡CÁÙ¦³¤@­Ó³Ì¦nªº©ñ¸m¦a¤è¬O Init ¤èªk, ¦]¬°Äݩʤu§@ªí­­¨î¦r¦êªºªø«×¡C §â¤U¦C¥N½X¥[¤J Init ¤èªk¤¤,³]©w DataSource ÄÝ©Ê¥N½X¤§«á, ¨ú¦^¤½¥q¦W¦r¤¤¥H "C" ¶}ÀYªº«È¤á²M³æ:
This.SelectCmd = "SELECT " + ;
"CustomerID, CompanyName, ContactName, " + ;
"Address, City, Region, Country " + ;
"FROM Customers WHERE CompanyName LIKE 'C%'"
µM«á¡A§AÀ³¸Ó§i¶D CursorAdapter ³q¹L½Õ¥ÎCursorFill ¤èªk¶ñ¥R³QÃöÁpªº´å¼Ð¡C §A¥i¥H¬Ù²¤³o¤@­Ó½Õ¥Î¡A¨Ã¥B¤â°Ê±qÃþ¤§¥~½Õ¥Î, ©Î©ñ¦b Init ¤èªk¤¤¡A¥H«K¥¦¯à°÷¦Û°Ê¶ñ¥R´å¼Ð¡C¦bInit ¤èªk¤¤³]¸m SelectCmd ¤§«á¡A¥i¥H¥Î This.CursorFill()½Õ¥Î¡C
³Ì«á¡A§AÀ³¸Ó¦bÃþªºDestroy¤èªk¤¤¥[¤W¤@¨Ç¥N½X¡A¥H«K¦bª«¥ó±q°O¾ÐÅ餤ÄÀ©ñ¥H«á´î¤Ö¨ì¦øªA¾¹ªº³s±µ¡C ¨S¦³³o¨Ç¥N½Xªº¸Ü¡A¨C¤@­Ó·sªº¹ê¨Ò±N·|²£¥Í¤@­Ó¨ì¦øªA¾¹ªº·s³s±µ, ¨Ã¥B¤£·|ÄÀ©ñ¥¦:
IF this.DataSource > 0 THEN
SQLDISCONNECT(this.DataSource)
ENDIF
Âǥѳo¨ÇÅܤơA§A¾Ö¦³¤@­Ó¹ê¥Îªº CursorAdapter Ãþ¡A¥¦¯à°÷¥Í¦¨¤@­Ó°ßŪªº´å¼Ð¡C¦b¤¹³\§ó·s¤§«e¡A´ú¸Õ¤@¤UÃþ¡A½T«O¥i¥Î¡A¨Ã¯à·Ç½T¨ú¦^¸ê®Æ¡C¥Î¤U¦C¥N½X´ú¸Õ:
lo = NEWOBJECT("caODBC","tests")
BROWSE
ª`·N¡A§A¤£»Ý­n¹³¸ê®ÆÀô¹Ò¨º¼Ë½Õ¥Î OpenTables ¤èªk¡C³o¬O¦]¬°§A§â CursorFill ¤èªkª½±µ¥[¤J¤F Init ¤èªk,¨ÏÃþ¦b²£¥Í¹êÅ餧«á¦Û°Ê¦a¶ñ¥R´å¼Ð¡C
Updating ODBC Data¡]§ó·sODBC¸ê®Æ¡^
¬°¤F¨Ï³o­ÓÃþ¥i§ó·s,§A¥²¶·¥¿½T¦aµ¹Tables, KeyFieldList ¡A UpdatableFieldList ©M UpdateNameList Äݩʽá­È¡C ¨Ã¥B³]©w AllowInsert ¡A AllowUpdate ©M AllowDelete Äݩʬ°true, ½T©w¦Û°Ê§ó·s¯S¼x³Q±Ò°Ê¡C ¦A¤@¦¸±j½Õ¡A³Ì¦nªº¿ìªk¬O¦bInit ¤èªk¤¤¥Î¥N½X³]¸m³o¨ÇÄÝ©Ê¡C Init ¤èªk¤@¨Ç¥N½X¦blist2 ¤¤¡C
¦bÃö³¬Ãþ³]­p¾¹¤§«e,§A¥i¯à·Q±N BufferModeOverride ÄÝ©Ê´«¦¨ "5",¡§¶}©ñªºªí½w½Ä¡¨¥H«K²¾°Ê°O¿ý«ü¼Ðªº®É­Ô , ¦Û°Ê§ó·s¤£µo¥Í¡C
´ú¸Õ CursorAdapter ªº§ó·s¯à¤O,§â¥¦§@¬°¤@­Ó¹ê¨Ò,¬yÄý´å¼Ð,§@¤@­Ó§ó§ï, µM«á´£¥æ TableUpdate¡C ½T©w©Ò§@ªº§ó§ï³Q¦^À³,½Õ¥Î CursorAdapter ªº CursorRefresh ¤èªk¡A¦A¬yÄý¤@¦¸¡C
³B²zODBC¿ù»~¡]Handling ODBC Errors¡^
¶H¨Ï¥Î¥»¦a CursorAdapter¤@¼Ë ¡A¤j¦h¼Æªº¿ù»~³B²z¬O«ö·Ó "¶Ç²Îªº"¤èªk¡X´ú¸Õ TableUpdate ªð¦^ªº­È¡A¦pªG¥¢±Ñ¡A¨Ï¥Î AError ¨Ó§PÂ_­ì¦]¡C ¤£©¯ªº¬O¡A§ó·s½Ä¬ðªºÀË´ú¤]

_________________
§Q¥Î>>·j´M<<ªº¥\¯à·|¤ñ°ÝªºÁÙ­n§Ö±o¨ìµª®×.
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@