您的位置:首页技术文章
文章详情页

从Oracle Developer/2000 调 用VB

【字号: 日期:2023-11-26 19:16:03浏览:12作者:猪猪
Oracle;数;据;库;管;理;系;统;是;优;秀;的;数;据;库;管;理;系;统, ;其;开;发;工;具Developer/2000;也;是;一;个;功;能;强;大,;方;便;灵;活;的;工;具;软;件,;许;多Oracle;数;据;库;开;发;人;员;都;选;择Developer/2000;作;为;系;统;开;发;的;工;具。;但;当;今;的;数;据;库;用;户;再;也;不;会;仅;仅;局;限;于;枯;燥;无;味;的;数;据,;他;们;希;望;以;图;文;并;茂;的;方;式;显;示;查;询;结;果。;因;此;在;设;计;项;目;时,;一;般;是;选;择Developer/2000;来;开;发;有;关;数;据;库;的;维;护;功;能,;而;选;择;其;它;如VB、VC;等;优;秀;的;程;序;语;言;来;开;发;有;关;图;形;等;方;面;的;工;作。;这;就;带;来;一;个;问;题:;如;何;实;现Oracle;与;它;们;的;连;接。;本;文;就Oracle;与VB5.0;的;连;接;来;谈;一;点;自;己;的;体;会。; ----;一;.;VB5.0;与Oracle;数;据;库;的;连;接; ----;VB5.0;可;以;与;多;种;外;部;数;据;库;的;连;接。VB5.0;可;以;从Microsoft;Access、dBASE、Microsoft;Excel、FoXPro、Lotus、Paradox;等;数;据;库;中;读;取;数;据;;通;过ODBC,VB5.0;可;以;与SQL;SERVER;和ORACLE;相;连。;通;过ODBC;连;接;数;据;库;时,;首;先;要;正;确;配;置ODBC;的DSN(Data;Name;Source,;即;数;据;源),;然;后;在VB5.0;中;可;以;通;过Data;控;件;或RDO;对;象;连;接;数;据;库。; ----;1.;配;置ODBC; ----;在WINDOWS;95;的;控;制;面;板;中;用;属;标;双;击32bit;ODBC;就;启;动;了ODBC;数;据;源;管;理;器(ODBC;Data;Source;Administrator),;在'UserDSN';方;式;下;按'Add';按;钮,;出;现'Create;New;Data;Source';对;话;框,;从;中;选;择'Microsoft;ODBC;Driver;for;Oracle'(;安;装VB;时;自;动;安;装;该;驱;动;;或;安;装VB;时;选;择'Custom';方;式,;在Data;Access;选;项;中;选;择'Oracle;ODBC;Driver');并;按;下'Finish';按;钮,;出;现'Microsoft;ODBC;Driver;for;Oracle;Setup';对;话;框,;在'Data;Source;Name';中;给;定;一;名;称(;如my_dsn),;在'User;Name';中;写;上;你;在ORACLE;数;据;库;中;的;用;户;名(;如scott),;在'Connect;String';中;写;上;想;要;连;接;的Oracle;数;据;库;别;名(;该;别;名;登;记;在tnsnames.ora;文;件;中,;可;以;通;过;手;工;编;辑;该;文;件;或;通;过Developer/2000;中;的;工;具'SQL;Net;Easy;Configuration';来;配;置)。; ----;2.;设;置Data;控;件; ----;Data;控;件;非;常;简;单;易;用,;可;以;用;来;执;行;大;部;分;数;据;访;问;操;作,;而;根;本;不;用;编;写;代;码。;一;个Data;控;件;可;以;对;应;一;个;基;表;或;视;图(;可;以;是;数;据;库;中;所;固;有;的;视;图;对;象,;也;可;以;是;在RecordSource;属;性;中;的SQL;SELECT;语;句;所;选;出;的;数;据;集;合)。; ----;启;动VB,;在Form;上;添;加Data;控;件(;如Data1),;并;设;置;其Connect;属;性。Connect;属;性;中;记;载;着;连;接;字;符;串,;它;可;以;由;多;个;参;数;组;成:; DSN:用名称注册;ODBC数据源 UID:数据库的一个可识别的用户名。 PWD:与用户名相关的密码 ----;例;如;将Connect;属;性;置;为'ODBC;DSN=my_dsn;UID=scott;PWD=tiger',;然;后;从RecordSource;属;性;的;列;表;框;中;选;择;某;一;基;表;或;视;图。; ----;Data;控;件;可;以;与DBList、DBCombo、DBGrid;和;MSFlexGrid;字;段;结;合;使;用,;只;要;将;它;们;的DataSource;属;性;设;置;为;某;一;控;件(;如Data1),;详;见VB;的;有;关;手;册。; ----;关;于VB;与;远;程;数;据;库;的;连;接,;请;参;阅《;计;算;机;世;界》1998;年4;月20;日;的'VB5.0;中;远;程;数;据;库;的;访;问';及1998;年5;月25;日;的';用VB;和RDO;访;问SQL;Server',;此;处;不;在;赘;说。; ----;二;.;从Developer/2000;向VB;应;用;程;序;传;递;参;数; ----;Developer/2000;调;用VB;应;用;程;序;可;以;有;两;种;方;式,;一;是;通;过HOST;过;程;调;用;外;部;命;令(VB;应;用;程;序),;如:HOST('notepad.exe');;二;是;通;过DDE;包;来;调;用VB;应;用;程;序,;如:; DECLARE AppID;;PLS_INTEGER; BEGIN AppID;:=;DDE.APP_BEGIN('notepad.exe'); END; ----;下;面;主;要;介;绍;一;下Developer/2000;中;向VB;应;用;程;序;的;参;数;传;递:; ----;1.;命;令;行;参;数; ----;我;们;知;道,C;语;言;中;是;通;过int;main(;int;argc[;,;char;*argv[;];[,;char;*envp[;];];];);来;接;收;命;令;行;参;数;的,;但;在VB;中;没;有;对;应;的;语;法。;好;在VB;提;供;了COMMAND();函;数;来;返;回;命;令;行;参;数,;以;下;函;数;可;以;分;解;命;令;行;参;数;并;返;回;参;数;数;组:; Function;GetCommandLine(Optional;MaxArgs) Dim;C,;CmdLine,;CmdLnLen,;InArg,;I,;NumArgs '检查是否提供了;MaxArgs参数。 If;IsMissing(MaxArgs);Then;MaxArgs;=;10 ReDim;ArgArray(MaxArgs);As;String NumArgs;=;0:;InArg;=;False CmdLine;=;Command() CmdLnLen;=;Len(CmdLine) '以一次一个字符的方式取出命令行参数。 For;I;=;1;To;CmdLnLen C;=;Mid(CmdLine,;I,;1) If;(C;<;>;';';And;C;<;>;vBTab);Then If;Not;InArg;Then If;NumArgs;=;MaxArgs;Then;Exit;For NumArgs;=;NumArgs;+;1 InArg;=;True End;If '将字符加到当前参数中。 ArgArray(NumArgs);=;ArgArray(NumArgs);+;C Else InArg;=;False End;If Next;I ReDim;Preserve;ArgArray(NumArgs) GetCommandLine;=;ArgArray() End;Function 调用方式如下: Dim;cmdarray;As;Variant Rem;cmdarray;=;GetCommandLine() ----;这;样,;从Developer/2000;中;调;用;用VB;编;写;的;应;用;程;序;时;就;可;以;向;它;传;递;参;数,;如:; AppID;:=;DDE.APP_BEGIN('notepad.exe;myfile'); 注;意:;别;忘;了;在;退;出Developer/2000;之;前;先;终;止;所;调;用;的;程;序,;如DDE.APP_END(AppID); ----;2.;用;基;表;或;视;图;来;传;递;参;数; ----;当;要;传;递;大;量;的;数;据;时,;上;述;方;法;就;行;不;通;了。;例;如,;将;在Developer/2000;中;从;数;据;库;某;个;基;表;中;查;询;出;的;记;录;集;合;传;给VB;以;进;行;图;形;显;示。;解;决;这;一;问;题;的;通;常;方;法;是;将;数;据;全;部;写;入;文;件(Oracle;Developer/2000;提;供;了;内;建;软;件;包TEXT_IO;来;进;行;文;件;操;作),;然;后;以;文;件;名;为;参;数;调;用VB;应;用;程;序,;但;采;用;这;种;方;法;时VB;应;用;程;序;对;数;据;进;行;检;索;和;排;序;比;较;困;难,;而;且;文;件;操;作;本;身;也;比;较;烦;琐,;数;据;量;大;时,;速;度;问;题;比;较;突;出。; ----;一;种;好;的;解;决;方;法;是;用;数;据;库;作;为;传;递;参;数;的;中;介,;利;用;基;表;或;视;图;来;保;存;检;索;出;的;数;据,;然;后;只;要;向VB;应;用;程;序;传;递;基;表;或;视;图;名;即;可,;而VB;的;强;大;的;数;据;库;功;能;能;够;使;你;得;心;应;手;地;操;纵;数;据。;但;是Oracle;的PL;/SQL;只;支;持DML(Data;Manipulation;Language,;即;数;据;操;作;语;言);而;不;支;持DDL(Data;Definition;Language,;即;数;据;描;述;语;言),;因;此;在PL;/SQL;中;不;能;动;态;产;生;基;表;或;视;图,;好;在Oracle;数;据;库;中;提;供;了DBMS_SQL;包,;该;包;可;以;让;你;执;行;任;何DDL;或DML,;包;括;创;建;或;删;除;基;表;及;视;图。; ----;下;例;是;在Developer/2000;FORMS;中;根;据;当;前;块;的;默;认;选;择;条;件;创;建;一;视;图:; DECLARE cursor_name;INTEGER; rows_processed;;INTEGER; table_name;VARCHAR2(20):=;get_block_property (;:system.cursor_block,;base_table); wh_string;VARCHAR2(500);:=;Rtrim(get_block_property; (:system.cursor_block,default_where)); sql_string;VARCHAR2(400); BEGIN :globe.view_name;:=;'v_';table_name; sql_string;:=;'create;view;';:globe.view_name;' as;select;*;from;';table_name; If;wh_string;Is;Not;Null;Then sql_string;:=;sql_string;;';;where;';wh_string; End;If; cursor_name;:=;dbms_sql.open_cursor; dbms_sql.parse(cursor_name,;sql_string,;dbms_sql.v7); rows_processed;:=;dbms_sql.execute(cursor_name); dbms_sql.close_cursor(cursor_name); END; ----;上;例;中,open_cursor;获;得;一;个;新;的;光;标(cursor);号,;parse;对;所;要;执;行;的;语;句;进;行;语;法;分;析,;execute;执;行;给;定;的;光;标,close_cursor;关;闭;光;标、;释;放;内;存。;DBMS_SQL;包;还;有;其;它;许;多;功;能(;如;将;值;绑;定;给SQL;语;句;中;的;变;量、;读;取;查;询;结;果;等),;有;兴;趣;的;读;者;可;以;查;阅ORACLE;手;册Oracle;Server;Application;Developer's;Guide。; ----;三;.;Developer/2000;与VB;应;用;程;序;的;统;一; ----;用Developer/2000;开;发;的;应;用;程;序;在;执;行;时;会;出;现;一;个MDI;窗;口,;应;用;程;序;中;的;所;有;窗;口;都;在;此MDI;窗;口;之;内,;而;用VB;开;发;的;应;用;程;序;拥;有;自;己;独;立;的;窗;口,;这;样;开;发;出;的;应;用;软;件;会;给;用;户;以;两;个;平;台、;两;套;系;统;之;嫌。;如;果;能;够;解;决;这;个;问;题,;就;会;使;应;用;软;件;系;统;增;色;不;少。;我;们;很;自;然;地;想;到;将VB;的Form(;窗;口);的;父;窗;口;设;成Develop;2000;的MDI;窗;口。; ----;1.;获;得Developer/2000;的MDI;窗;口;句;柄; ----;Developer/2000;FORMS;用FORMS_MDI_WINDOW;标;记FORMS;的MDI;窗;口,;用get_window_property;获;得;其;窗;口;句;柄;后;就;可;以;将;它;作;为;参;数;传;给VB;应;用;程;序。; DECLARE w_hdl;BINARY_INTEGER; BEGIN w_hdl;:=;TO_NUMBER(get_window_property (FORMS_MDI_WINDOW,;WINDOW_HANDLE)); AppID;:=;DDE.APP_BEGIN('My_app.exe;';:globe.view_name; ';';;TO_CHAR(w_hdl)); END; ----;2.;将VB;的;窗;口(Form);放;入Developer/2000;的MDI;窗;口; ----;Visual;Basic;调;用WINDOWS;API;非;常;简;单,;只;要;在;调;用;之;前;对;所;调;函;数;进;行;说;明;即;可。;格;式;说;明;可;以;使;用Visual;Basic;的;工;具API;Text;Viewer。;运;行API;Text;Viewer,;装;载Win32api.MDB,;从;中;选;出;所;需;的API;函;数,;增;加;到'Selected;Items';框;内,;再;拷;贝;到;剪;贴;板,;然;后;粘;贴;到VB;的;说;明;部;分;即;可。;示;例;如;下:; Private;Declare;Function;SetParent;Lib;'user32' (ByVal;hWndChild;As;Long,;ByVal;hWndNewParent;As;Long);As;Long Private;Sub;Form_Load() Dim;cmdarray;As;Variant cmdarray;=;GetCommandLine(); rc;=;SetParent(Me.hWnd,;cmdarray(2)) Data1.Connect;=;'ODBC;DSN=my_dsn;UID=scott;PWD=tiger' Data1.RecordSource;=;';scott.';+;cmdarray(1) End;Sub ----;将;该VB;应;用;程;序;编;译;成;可;执;行;程;序(EXE),;以;便Developer/2000;调;用。;至;此,VB;的;窗;口;已;经;纳;入Developer/2000;的MDI;窗;口;内.;你;可;以;将VB;Form;的ShowInTaskbar;属;性;设;置;成False;使VB;应;用;程;序;不;出;现;在;任;务;栏;内,;同;时;给;该Form;的Icon;属;性;赋;一;个;与Developer/2000;窗;口;图;标;的;相;似;的;图;标,;这;样;谁;还;能;分;得;出;你;的;软;件;哪;一;部;分;是;用Developer/2000;开;发;的,;哪;一;部;分;是;用Visual;Basic;开;发;的;呢;?
标签: Oracle 数据库