pb使用odbc呼叫mysql存盤程序的例子
給了一個小的mysql 存盤程序的例子。同時給出了一個在pb9中呼叫的例子.本例子是給出的mysql8.0的存盤程序。對于5.7一下的現在odbc很難有支持
string ls_errtext
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=test;UID=root;PWD=123456;SERVER=192.168.10.111;DATABASE=MY_TEST;Option=8'"
connect using SQLCA ;
IF sqlca.sqlcode <> 0 then
ls_errtext = SQLCA.SQLErrtext
messagebox("提示資訊","無法連接上mysql服務器的資料庫~r~n" + ls_errtext)
RETURN
END IF
string ls_sql
ls_sql = "SET SQL_MODE='CLIENT_IGNORE_SPACE'"
EXECUTE IMMEDIATE :ls_sql ;
open(w_main_test)
CREATE DEFINER=`root`@`%` PROCEDURE `SP_PRO_TEST`( IN V_IDENTITY_TABLE VARCHAR(40) ,
IN V_TABLENAME VARCHAR(40),IN V_COUNT int,OUT VS_DQZ VARCHAR(40))
begin
DECLARE V_SQL VARCHAR(500);
DECLARE V_SQLU VARCHAR(500);
DECLARE V_UPPER_V_TABLENAME VARCHAR(40) ;
DECLARE V_ERROMSG VARCHAR(1024);
DECLARE V_DQZ INT ;
DECLARE no_row_found INT ;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- GET DIAGNOSTICS CONDITION 1 ;
--通過GET DIAGNOSTICS這樣的方式獲取sqlstate message_text(當然錯誤資訊錯誤編號可以自己定義)
SET V_ERROMSG = message_text ;
ROLLBACK ;
SET V_DQZ = -1 ;
SELECT '-1';
-- MYSQL_ERRNO 錯誤代碼
END ;
-- 處理 類似 oracle的 no_data_find例外
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_row_found = 1;
DECLARE CONTINUE HANDLER FOR 1062
begin
Select '錯誤:重復鍵值';
end ;
IF V_COUNT IS NULL OR V_COUNT <= 0 OR V_IDENTITY_TABLE IS NULL OR V_TABLENAME IS NULL THEN
set V_DQZ = 0;
END IF;
SET V_UPPER_V_TABLENAME = UPPER(V_TABLENAME) ;
START TRANSACTION;
V_DQZ = V_COUNT * 5
SET VS_DQZ =CONCAT( '',V_DQZ);
SELECT VS_DQZ;
commit ;
END
--PB的按鈕里面的代碼:
string ls_identi_name ,ls_table_name ,ls_sqlerrtext ,ls_v_dqz
int li_V_COUNT = 2
long ll_V_DQZ
ll_V_DQZ = 33
ls_identi_name = "GY_IDENTI_SEED"
ls_table_name = 'T_STUDENT'
string ls_sql
ls_sql = "SET SQL_MODE='CLIENT_IGNORE_SPACE'"
EXECUTE IMMEDIATE :ls_sql ;
messagebox("", string(ls_identi_name) )
Is_identi_name =ls_identi_name
DECLARE SP_PRO_TEST PROCEDURE FOR BSOFT_PRO_TEST
:ls_identi_name, :ls_table_name,:li_V_COUNT ,:ls_v_dqz ;
EXECUTE SP_MYSQL_TEST ;
ls_sqlerrtext = SQLCA.SQLerrtext
messagebox("", ls_sqlerrtext )
FETCH SP_MYSQL_TEST INTO :ls_v_dqz ;
CLOSE SP_MYSQL_TEST ;
messagebox("", string(ls_v_dqz) )
uj5u.com熱心網友回復:
感謝分享。頭疼pb的32位啊,無法在webservice里連接mysql轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/6932.html
標籤:數據庫相關
