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

ºc«Ø¸ê®Æ®wªº¦w¥þ©Ê(Âà¶K)

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



µù¥U®É¶¡: 2003-03-12
¤å³¹: 1698
¨Ó¦Û: tunglo

²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤C¤ë 30, 2003 3:27 pm    ¤å³¹¥DÃD: ºc«Ø¸ê®Æ®wªº¦w¥þ©Ê(Âà¶K) ¤Þ¨¥¦^ÂÐ

myf1 §@ªÌ:«e«×¼B­¦

¥ÎÀ³¥Îµ{¦¡¨¤¦â¨Ó«OÃÒ¸ê®Æ®wªº¦w¥þ©Ê
«OÅ@µn¿ý¨ìSQL Serverªº±K½X¤@ª½¬O­ÓÀY¯kªº°ÝÃD¡C
¤£ºÞ«ç¼Ë¡A§A³£¥²¶·­n«Ø¥ß¤@­ÓODBC³s±µ©M¤@­ÓVFP¤¤ªº¸ê®Æ®w³s±µ¡A¸ê®Æ®w¤¤³s±µªº±K½X«h«D±`®e©ö¬ªº|¡A¨ì¥Ø«e¬°¤î¡A¦ü¥G³Ì¦w¥þªº°µªk¥u¦³¥ÎODBC API ¨Ó¦b¹B¦æ®É«Ø¥ß³s±µ¡X¡X¦ý°ÝÃD¬O¡A¦pªG¥Î¤á¬O­Ó¦³¸gÅ窺µ{¦¡®v¡A¨º»ò¥L·|¦bµ{¦¡¹B¦æ®É¡B©ÎªÌ°®¯Ü±þ¦ºµ{¦¡ªº¶iµ{¡A¤£Åý§Aªºµ{¦¡¤¤¦Û°Ê¦b°h¥X®É§R°£³s±µªº³¡¤À¥N½X¹B¦æ¡A³o¼Ë¥L´N¤S¦³¥i¯à±o¨ì§AªºODBC³s±µ±K½X¤F¡C
UTÂø»x¤W´£¨Ñ¤F¤@­Ó§ó¦w¥þªº¤èªk¡C¥Î³o­Ó¤èªk¡A¹ï¤è¥u¦³¤Ï½sĶ¤F§Aªºµ{¦¡¤~¥i¯à±o¨ì¯u¥¿ªº±K½X¡C³o­Ó°µªk´N¬O¨Ï¥ÎSQL ServerªºÀ³¥Îµ{¦¡¨¤¦â¡C
1¡Bµ¦²¤
­º¥ý¡A§Aªºµ{¦¡ÁÙ¬O­n«Ø¥ß¤@­Ó´¶³qªºODBC³s±µ©M¤@­Ó¸ê®Æ®w³s±µ¡C¯µ³Z¦b©ó¡G§A¦b SQL Server ¤W¬°¥Î¤á«Ø¥ßªº¬O¤@­Ó¥u¯à³s±µ¨ì¸ê®Æ®w¡B¦ý¬O¨S¦³¥ô¦ó¹ï¥ô¦óªíª«¥óªº Select ¡BUpdate¡BDelete³\¥iÅvªº Public ¨¤¦â¡C
§AªºÀ³¥Îµ{¦¡¦b±Ò°Ê®É¥Î³o­ÓODBC³s±µ¨Ó³s±µ¨ì¸ê®Æ®w¡AµM«á¡A¦A¨Ï¥ÎÀ³¥Îµ{¦¡¨¤¦â¨ÓÀò±o¹ï¸ê®Æªíª«¥óªº³X°Ý³\¥iÅv¡CÀ³¥Îµ{¦¡¨¤¦âªº±K½X«hÁôÂæbµ{¦¡¤¤¡A¦]¬°¥¦¤£¥Î«Ø¥ßODBC³s±µ¡A©Ò¥H¥¦ªº±K½X¤]´N¤£®e©ö¬ªº|¡C
2¡B°µªk
A¡B¦øªA¾¹ºÝ³]¸m
¥´¶} SQL Server ¥ø·~ºÞ²z¾¹¡A¦b§Aªº¸ê®Æ®w¥Ø¿ý¤Uªº¨¤¦â¸`ÂI¤W³æÀ»¥kÁä¡A¿ï¾Ü¡i·s«Ø¸ê®Æ®w¨¤¦â¡j¡AµM«á¦b¥´¶}ªº¸ê®Æ®w¨¤¦â¹ï¸Ü¤è¶ô¤¤¿ï¾Ü¡iÀ³¥Îµ{¦¡¨¤¦â¡j¡A¨Ã³]¸m¦n±K½X¡C
Ãö³¬¹ï¸Ü¤è¶ô«á¡A¿ï¾Ü³o­Ó·s«ØªºÀ³¥Îµ{¦¡¨¤¦â,³æÀ»¥kÁä¿ï¾Ü¡iÄÝ©Ê¡j¡A¦b¥´¶}ªºÄݩʹï¸Ü¤è¶ô¤¤³æÀ»¡i³\¥iÅv¡j¡A¬°³o­Ó¨¤¦â³]¸m³X°Ý¨C­Ó¸ê®Æªíªº³\¥iÅv¡C
B¡BÀ³¥Îµ{¦¡³]¸m
¥Î¥u¯à³s±µ¨ì¸ê®Æ®w¡B¨S¦³³X°Ý¥ô¦óªíªº³\¥iÅvªºODBC³s±µ¨Ó³s±µ¨ì SQL Server ¥H«á¡A¦A¨Ï¥Î SPT ¨Ó¦b·í«e³s±µ¤W±Ò°ÊÀ³¥Îµ{¦¡¨¤¦â¡C
OK¡A³o¼Ë´N¦³¤@­Ó°ÝÃD¡A§A³o­Ó³s±µ±Ò°Ê¥H«á¡A·o³Jªº¤H¬O¤£¬O¤S¥i¥H¥Î³o­ÓODBC³s±µ¨Óª±¤õ¤F¡H¤£¦æ¡AÀ³¥Îµ{¦¡¨¤¦âªº±Ò°Ê¥u¦b·í«e³s±µ¤W¦³®Ä¡A¦pªG­n·s«Ø¤@­Ó³s±µ¡A¨º»ò¥²¶·¦A¦¸±Ò°ÊÀ³¥Îµ{¦¡¨¤¦â¡C³o¼Ë¤@¨Ó¡A°£¤F§AªºÀ³¥Îµ{¦¡¥H¥~¡A¨S¦³¥ô¦ó¤H¯à°÷§Q¥Î¤W¤w¸g³Q±Ò°Êªº³s±µ¤F¡C¡G¡^
±Ò°ÊÀ³¥Îµ{¦¡¨¤¦âªº¿ìªk¡G¨Ï¥Î¨t²Î¦sÀx¹Lµ{ Sp_Setapprole¡CT-SQL ªº»yªk¬O¡G
sp_setapprole 'rolename', 'password' [, 'encrypt style']
«e­±¨â­Ó°Ñ¼Æ´N¬OÀ³¥Îµ{¦¡¨¤¦â¦WºÙ©M±K½X¡C²Ä¤T­Ó°Ñ¼Æ¥i¥Î¥i¤£¥Î¡A¥¦ªí¥Ü¹ï±K½Xªº¥[±K¤è¦¡¡ANONE ªí¥Ü¤£¥[±K¡AODBC ªí¥Ü¥ÎODBC ªº¥[±KAPI¨Ó±N±K½X¥[±K«á¦Aµo°e¨ì¦øªA¾¹¤W¡C
¦n¤F¡A²{¦b§Ú­Ì¥i¥H¨É¨üÀ³¥Îµ{¦¡¨¤¦â¥u¦b·í«e³s±µ¤W¦³®Äªº¦n³B¤F¡C¦ý¬OÁÙ¦³¤@ÂI¤p°ÝÃD¡A§A¥²¶·ª¾¹D·í«e³s±µ¤W¬O§_¤w¸g±Ò°Ê¤FÀ³¥Îµ{¦¡¨¤¦â¡A¦pªG¦b¤w±Ò°Êªº³s±µ¤W¸Õ¹Ï¦A¦¸±Ò°Ê¡A·|µo¥Í¤@­Ó¿ù»~¡C
§PÂ_·í«e³s±µ¬O§_¤w¸g±Ò°Ê­n¥Î¤@ÂI¨±¦^ªº¿ìªk¡G¸ÕµÛÀˬd·í«e³s±µ¬O§_¾Ö¦³¹ï¬Y­Óªíªº³X°Ý³\¥iÅv¡C³o­n¥Î¨ìT-SQL ªº PERMISSIONS ¨ç¼Æ¡C
PERMISSIONS ¨ç¼Æ±µ¨ü2­Ó°Ñ¼Æ¡C²Ä¤@­Ó°Ñ¼Æ¡A¬O¥Ø¼Ðªºª«¥ó¼Ð»x²Å¡C²Ä¤G­Ó°Ñ¼Æ¥i¥Î¥i¤£¥Î¡A¥¦¬O¤@­ÓÄæ¦ìªº¦WºÙ¡C¦pªGPERMISSIONSªð¦^0¡A«h·í«e³s±µ¹ï¥Ø¼Ð¨S¦³³X°Ý³\¥iÅv¡F¦pªGªð¦^ªº¬O¨ä¥L­È¡A«h¾Ö¦³¹ï¥Ø¼Ðªº³X°Ý³\¥iÅv¡C
³oùØ»¡ªº¥Ø¼Ð¡A«üªº¬OSQL Server¤¤ªº¬Y­Óª«¥ó¡A¤ñ¦p¤@­Óªíª«¥ó¡B©ÎªÌ¤@­Ó¨¤¦âª«¥ó¡C¥Ø¼Ðªºª«¥ó¼Ð»x²Å«h¬O SQL Server ¬°¨C­Óª«¥ó«Ø¥ßªº¤@­ÓÃѧO½X¡A³o­ÓÃѧO½X¥i¥H¥Î T-SQL ªº OBJECT_ID ¨ç¼Æ¨Ó¨ú±o¡C
OK¡A²{¦b§Ú­Ìª¾¹D¤F¡AÀˬd·í«e³s±µ¬O§_¹ï¬Y­Óªí¦³³\¥iÅvªºT-SQL¥N½X´N¬O¡G
select PERMISSIONS(OBJECT_ID(¡¥your_table_name¡¦))
¤U­±¬O¤@¬q SQL Passthrough ªº¥Ü¨Ò¥N½X¡G
LOCAL liHandle as Integer, liResult as Integer
** Àò±o¤@­Ó³s±µ±±¨î½X
liHandle = SQLCONNECT('Northwind')
** Àˬd³\¥iÅv
liResult = SQLEXEC(liHandle, ;
"select permissions(object_id('customers')) as iPermissions", "PermissionCheck")
IF liResult > 0
IF PermissionCheck.iPermissions = 0
** »Ý­n±Ò°ÊÀ³¥Îµ{¦¡¨¤¦â
liResult = SQLEXEC(liHandle, "exec sp_setapprole 'MyAppRole', 'MyAppRolePassword'")
IF liResult < 0
** ¦b±Ò°ÊÀ³¥Îµ{¦¡¨¤¦âªº®É­Ôµo¥Í¤F¿ù»~
ENDIF
ENDIF
ELSE
** ¦bÀˬd³\¥iÅvªº®É­Ôµo¥Í¤F¿ù»~
ENDIF
** ²{¦b´N¥i¥H¥¿±`¾Þ§@¤F
SQLEXEC(liHandle, 'select top 10 * from customers')
BROWSE
SQLDISCONNECT(liHandle)
C¡BÀ³¥Î¨ì CursorAdapter ¤W
¥H¤U¥N½X¬°«Ø¥ß¤@­Ó¦Û©w¸qªº CursorAdapter Ãþ¡G
DEFINE CLASS MyCursorAdapter as CursorAdapter
FUNCTION BeforeCursorFill( ;
tlUseCursorSchema as Logical, tlNoDataOnLoad as Logical, tcSelectCmd) as Logical
** Âл\ BeforeCursorFill ¤èªk¨Ó±Ò°ÊÀ³¥Îµ{¦¡¨¤¦â
LOCAL llRetVal as Logical

llRetVal = DODEFAULT(tlUseCursorSchema, tlNoDataOnLoad, tcSelectCmd)
IF llRetVal
** ±Ò°ÊÀ³¥Îµ{¦¡¨¤¦â
llRetVal = This.LogOnToAppRole()
ENDIF

RETURN llRetVal
ENDFUNC

PROTECTED FUNCTION LogOnToAppRole() as Logical
** ±Ò°ÊÀ³¥Îµ{¦¡¨¤¦â¡A¨Ãªð¦^¤@­ÓÅÞ¿è­È»¡©ú¬O§_±Ò°Ê¦¨¥\
LOCAL liHandle as Integer, llRetVal as Logical

** Àò±o³s±µ±±¨î½X
liHandle = This.DataSource

IF liHandle > 0
** ÀˬdÀ³¥Îµ{¦¡¨¤¦â¬O§_¤w¸g³]¸m¦n¤F
IF !This.AppRoleSet()

** ¦pªG¨S¦³¡A¨º»ò²{¦b³]¸m¥¦
IF SQLEXEC(liHandle, "exec sp_setapprole 'MyAppRole', 'MyAppRolePassword'") > 0
llRetVal = .t.
ELSE
llRetVal = .f.
ENDIF
ELSE
** À³¥Îµ{¦¡¨¤¦â¤w¸g³]¸m¦n¤F
llRetVal = .t.
ENDIF
ELSE
** ·í«e¨S¦³¤@­Ó¦³®Äªº³s±µ±±¨î½X
llRetVal = .f.
ENDIF

RETURN llRetVal
ENDFUNC

PROTECTED FUNCTION AppRoleSet() as Logical
** ÀˬdÀ³¥Îµ{¦¡¨¤¦â¬O§_¤w¸g³]¸m¦n
LOCAL llRetVal as Logical, lcAlias as Character

** «O¦s·í«e§O¦W
lcAlias = ALIAS()
** Àˬd¦bªí¤Wªº³\¥iÅv
IF SQLEXEC(This.DataSource, ;
"select permissions(OBJECT_ID('" + This.Alias + "')) as iPermissions", ;
'approlepermission') > 0
** ¦pªG permissions ªð¦^ 0, ¨º»ò´N¬OÀ³¥Îµ{¦¡¨¤¦â¨S¦³±Ò°Ê
llRetVal = (AppRolePermission.iPermissions <> 0)
ELSE
llRetVal = .f.
ENDIF

** ²M²z
IF USED('AppRolePermission')
USE IN AppRolePermission
ENDIF

IF !EMPTY(lcAlias)
SELECT (lcAlias)
ENDIF
RETURN llRetVal
ENDFUNC

ENDDEFINE
¨Ï¥Î³o­ÓÃþªº¥N½X¡G
LOCAL loCustomers as CursorAdapter
LOCAL liHandle as Integer
** «Ø¥ß¤@­Ó³s±µ
liHandle = SQLCONNECT('Northwind')
IF liHandle > 0
** ²{¦b¤w¸g³s±µ¤W¤F
** «Ø¥ß¤@­Ó¹ï cursor adapter Ãþªº¤Þ¥Î
loCustomers = NEWOBJECT('MyCursorAdapter', 'MyCursorAdapter.prg')
** ³]¸m¤@¨ÇÄÝ©Ê¡A¥]¬A³s±µ±±¨î½X
WITH loCustomers
.DataSource = liHandle
.DataSourceType = 'ODBC'
.SelectCmd = 'Select * from customers'
.Alias = 'Customers'
ENDWITH
** ¤U¸ü¼Æ¾Ú
IF loCustomers.CursorFill()
BROWSE
ELSE
MESSAGEBOX(MESSAGE())
ENDIF
ENDIF
** Â_¶}³s±µ
SQLDISCONNECT(liHandle)
³o½T¹ê¬O¤@­Ó«OÅ@¦w¥þ©Êªº¦n¿ìªk¡C¬Û¤ñ¤£¤[¤§«á¡A³oºØ¿ìªk´N±N¦¨¬°§Ú­Ì foxer ªº¼Ð·Ç¿ìªk¤F§a¡I¡G¡^

_________________
#############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~­ì¨Ó©¯ºÖ¨º»ò²³æ!!

¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
#############################
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±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§@