|
Accueil → WEBDEV 2024 → Example to Run an MS SQL Stored Procedure with Windev, Webdev using HExecuteSQLQuery (Exemplo para Executar uma MS SQL Stored Procedure com o Windev, Webdev usando o HExecuteSQLQuery) |
Example to Run an MS SQL Stored Procedure with Windev, Webdev using HExecuteSQLQuery (Exemplo para Executar uma MS SQL Stored Procedure com o Windev, Webdev usando o HExecuteSQLQuery) |
Débuté par adrianoboller, 08 jan. 2015 17:28 - 8 réponses |
| |
| | | |
|
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 08 janvier 2015 - 17:28 |
Example to Run an MS SQL Stored Procedure with Windev, Webdev using HExecuteSQLQuery (Exemplo para Executar uma MS SQL Stored Procedure com o Windev, Webdev usando o HExecuteSQLQuery)
CODIGO MSSQL:
USE [producao] GO
CREATE PROCEDURE NG0002_Procedure_UltimaCorrida AS
DECLARE @num_corrida int;
SELECT @num_corrida = num_ultima_numera FROM numeracao WHERE ide_numera = 'ACT263_CORRIDA' AND num_ano_refere = year(getdate());
SELECT @num_corrida AS num_corrida;
return @num_corrida;
GO
CODIGO NO WINDEV, WEBDEV - USO EM WEBSERVICE:
//Executar procedure
numero_corrida is int = 0
MyProcedureUltimaCorrida is Data Source
IF HExecuteSQLQuery(MyProcedureUltimaCorrida, ConnNativa, hQueryWithoutCorrection,"NG0002_Procedure_UltimaCorrida") THEN
HReadFirst(MyProcedureUltimaCorrida, num_corrida)
WHILE HOut() = False ok = HReadNext(MyProcedureUltimaCorrida, num_corrida) numero_corrida = MyProcedureUltimaCorrida.num_corrida END
ELSE Error(HErrorInfo()) END
Trace(numero_corrida)
Veio valor sem dar erro no Trace() |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 08 janvier 2015 - 17:29 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 08 janvier 2015 - 17:34 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 09 janvier 2015 - 15:06 |
Danilo Valim:
Ficou lindo o programa rosinha e rodando certinho..hahahaha!!!
HClose(dsIntegraIn_Destino_Criar)
sCodeSqlStoredProcedure is string = [ Insert_IntegraIn X_Id_IntegraOut, X_Data, X_Hora, 'X_Sql', 'X_IP', X_Flag_Atualiza, X_Id_Filial, 'X_Usuario', 'X_Programa', 'X_Nome_PC', 'X_Nome_Procedure', XFlag_Erro ]
sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Id_IntegraOut",dsIntegraOut.Id_IntegraOut) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Data",dsIntegraOut.Data) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Hora",dsIntegraOut.Hora) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Sql",dsIntegraOut.Sql) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_IP",dsIntegraOut.IP) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Flag_Atualiza","0") sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Id_Filial",dsIntegraOut.Id_Filial) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Usuario",dsIntegraOut.Usuario) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Programa",dsIntegraOut.Programa) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Nome_PC",dsIntegraOut.Nome_PC) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"X_Nome_Procedure",dsIntegraOut.Nome_Procedure) sCodeSqlStoredProcedure = Replace(sCodeSqlStoredProcedure,"XFlag_Erro","0")
IF NOT HExecuteSQLQuery(dsIntegraIn_Destino_Criar,gctConectar_Destino, hQueryWithoutCorrection, sCodeSqlStoredProcedure) THEN Error("HFSQL error: " + HErrorInfo()) ELSE Info("OK!") END
Danilo Valim: fiz dessa forma...funcionou legal!! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 09 janvier 2015 - 15:08 |
Minha Stored Procedure ficou assim:
[12:07:07] Danilo Valim:
CREATE PROCEDURE Insert_IntegraIn ( @Id_IntregraIN Int, @Data FLOAT, @Hora FLOAT, @Sql VARCHAR(4999), @IP VARCHAR(49), @Flag_atualiza TINYINT, @Id_Filial Int, @Usuario VARCHAR(49), @Programa VARCHAR(49), @Nome_PC VARCHAR(49), @Nome_procedure VARCHAR(49), @Flag_Erro TINYINT) AS Begin INSERT INTO IntegraIn (ID_INTEGRAIn, Data, Hora, Sql, IP, Flag_atualiza, Id_Filial, Usuario, Programa, Nome_PC, Nome_procedure, Flag_Erro) VALUES (@Id_IntregraIN, @Data, @Hora, @Sql, @IP, @Flag_atualiza, @Id_Filial, @Usuario, @Programa, @Nome_PC, @Nome_procedure, @Flag_Erro) |
| |
| |
| | | |
|
| | |
| |
Posté le 09 janvier 2015 - 15:19 |
--CODIGO MSSQL:
CREATE PROCEDURE Insert_IntegraIn ( @Id_IntregraIN Int, @Data Float, @Hora Float, @Sql VARCHAR(4999), @IP VARCHAR(49), @Flag_atualiza Tinyint, @Id_Filial Int, @Usuario VARCHAR(49), @Programa VARCHAR(49), @Nome_PC VARCHAR(49), @Nome_procedure VARCHAR(49), @Flag_Erro Tinyint) as Begin Insert into IntegraIn (ID_INTEGRAIn, Data, Hora, Sql, IP, Flag_atualiza, Id_Filial, Usuario, Programa, Nome_PC, Nome_procedure, Flag_Erro) Values (@Id_IntregraIN, @Data, @Hora, @Sql, @IP, @Flag_atualiza, @Id_Filial, @Usuario, @Programa, @Nome_PC, @Nome_procedure, @Flag_Erro) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 16 janvier 2015 - 12:34 |
USE [producao] GO
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
ALTER PROCEDURE [dbo].[NG0001_Procedure_IncluirChamadaTaxi] @TIPO VARCHAR(3), @cod_client_celulaint, @nom_lograd_localVARCHAR(70), @num_localint, @des_comple_localVARCHAR(15), @nom_cidade_origemVARCHAR(50), @cod_lograd_entreg_encomeint, @nom_lograd_entreg_encomeVARCHAR(50), @num_local_entreg_encomeint, @des_comple_local_entreg_encomeVARCHAR(15), @seq_telefoint, @cod_lograd_pesquiint, @cod_tipo_carroint, @qtd_carro_soliciint, @cod_comuniint, @nom_usuariVARCHAR(30), @ide_ar_condicVARCHAR(1), @ide_cartaoVARCHAR(1), @cod_usuari_operadVARCHAR(10), @num_ponto_refere_endereint, @num_ponto_atendiint, @num_unidad_atendiint, @cod_centrl_telefoint, @num_ramalint, @ide_situac_client_call_centerint, @cod_clientint, @seq_autorzint, @num_unidad_preferint, @dat_hora_soliciDATETIME, @qtd_minuto_anteciint, @ide_priori_cadastint, @cod_forma_pagameint, @ide_encomeVARCHAR(1), @ide_forma_seleca_corridVARCHAR(1), @ide_porta_malas_grandeVARCHAR(1), @XXX int, @des_lograd_destinVARCHAR(120), @num_lograd_destinint, @des_comple_destinVARCHAR(40), @des_prefer_corridVARCHAR(254), @cod_client_convenint, @cod_matric_convenVARCHAR(10), @ide_forma_pagameVARCHAR(1), @cod_forma_pagame_cartaoint, @val_distan_destinint, @val_tarifa_bandei_1int, @val_tarifa_bandei_2int, @finalidadeVARCHAR(50), @observacaoVARCHAR(255), @des_observ_intern VARCHAR(100)
WITH RECOMPILE
AS
SET NOCOUNT ON
BEGIN TRANSACTION
SAVE TRANSACTION NovaChamada
DECLARE @Error int; DECLARE @cod_orgao VARCHAR(12); SELECT @cod_orgao = '0';
UPDATE numeracao SET num_ultima_numera = ( SELECT num_ultima_numera FROM NUMERACAO WHERE ide_numera = 'ACT263_CORRIDA' AND cod_orgao = @cod_orgao AND num_ano_refere = year(getdate()) ) + 1 WHERE ide_numera = 'ACT263_CORRIDA' AND cod_orgao = '0' AND num_ano_refere = year(getdate());
SET @Error = @@ERROR IF @@ERROR <> 0 BEGIN ROLLBACK
RAISERROR ('Error ao criar novo numero de corrida.', 16, 1) RETURN @Error END
DECLARE @num_corrid int; SELECT @num_corrid = num_ultima_numera FROM numeracao WHERE ide_numera = 'ACT263_CORRIDA' AND num_ano_refere = year(getdate()); SELECT @num_corrid;
DECLARE @ide_nao_fumant VARCHAR(1); DECLARE @ide_carro_novo VARCHAR(1); DECLARE @ide_exectv VARCHAR(1); DECLARE @ide_fumant VARCHAR(1); DECLARE @ide_insufi VARCHAR(1); DECLARE @ide_cd VARCHAR(1); DECLARE @ide_dvd VARCHAR(1); DECLARE @ide_navegd_gps VARCHAR(1); DECLARE @ide_intrnt VARCHAR(1); DECLARE @ide_viagem VARCHAR(1); DECLARE @ide_conexa_bateri VARCHAR(1); DECLARE @ide_trocar_pneu VARCHAR(1); DECLARE @ide_engate VARCHAR(1); DECLARE @ide_jovem VARCHAR(1); DECLARE @ide_nao_gas VARCHAR(1); DECLARE @ide_situac_corrid VARCHAR(1); DECLARE @ide_carro_alto VARCHAR(1); DECLARE @ide_carro_baixo VARCHAR(1); DECLARE @cod_usuari_cadast VARCHAR(10); DECLARE @cod_usuari_cancel VARCHAR(10); DECLARE @des_motivo_cancel VARCHAR(50); DECLARE @cod_marca_veicul int; DECLARE @cod_modelo_veicul int; DECLARE @cod_motivo_cancel int; DECLARE @num_call_center int; DECLARE @seq_usuari_web_cadastint; DECLARE @dat_hora_final_bloque DATETIME; DECLARE @dat_hora_atendi DATETIME; DECLARE @dat_hora_inicio_nagyroDATETIME; DECLARE @dat_hora_cancel DATETIME; DECLARE @dat_hora_ultima_alteraDATETIME; DECLARE @dat_hora_arquiv DATETIME; DECLARE @dat_hora_corrid DATETIME; DECLARE @dat_hora_cadast DATETIME;
DECLARE @des_lograd_origem VARCHAR(70); DECLARE @num_lograd_origem int; DECLARE@des_comple_origem VARCHAR(50);
DECLARE@des_observ_comple VARCHAR(254); DECLARE @des_observ VARCHAR(254); DECLARE @des_observ_local_refere VARCHAR(254);
SELECT @cod_orgao = '1';
SELECT @des_lograd_origem = @nom_lograd_local; SELECT @num_lograd_origem = @num_local; SELECT @des_comple_origem = @des_comple_local;
SELECT @des_observ_comple = @observacao; SELECT @des_observ = @observacao; SELECT @des_observ_local_refere = @observacao;
SELECT @ide_situac_corrid = 'A'; SELECT @ide_nao_fumant = 'N'; SELECT @ide_carro_novo = 'N'; SELECT @ide_exectv = 'N'; SELECT @ide_fumant = 'N'; SELECT @ide_insufi = 'N'; SELECT @ide_cd = 'N'; SELECT @ide_dvd = 'N'; SELECT @ide_navegd_gps = 'N'; SELECT @ide_intrnt = 'N'; SELECT @ide_viagem = 'N'; SELECT @ide_conexa_bateri = 'N'; SELECT @ide_trocar_pneu = 'N'; SELECT @ide_engate = 'N'; SELECT @ide_nao_gas = 'N'; SELECT @cod_usuari_cadast = 'actumWS'; SELECT @ide_carro_alto = NULL; SELECT @ide_carro_baixo = NULL; SELECT @ide_jovem = NULL; SELECT @cod_marca_veicul = NULL; SELECT @cod_modelo_veicul = NULL; SELECT @dat_hora_final_bloque = NULL; SELECT @dat_hora_atendi = NULL; SELECT @dat_hora_inicio_nagyro = NULL; SELECT @cod_motivo_cancel = NULL; SELECT @cod_usuari_cancel = NULL; SELECT @dat_hora_cancel = NULL; SELECT @des_motivo_cancel = NULL; SELECT @num_call_center = NULL; SELECT @seq_usuari_web_cadast = NULL; SELECT @dat_hora_ultima_altera = year(getdate()); SELECT @dat_hora_arquiv = year(getdate()); SELECT @dat_hora_corrid = year(getdate()); SELECT @dat_hora_cadast = year(getdate()); SELECT @dat_hora_atendi = year(getdate()); SELECT @dat_hora_inicio_nagyro = year(getdate());
SELECT @cod_client_conven = cod_client_conven, @cod_matric_conven = cod_matric FROM dbo.ACT297_CLIENTE_CELULAR SELECT @cod_client_conven; SELECT @cod_matric_conven;
IF @qtd_carro_solici = 0 BEGIN SELECT @qtd_carro_solici = 1; END
IF LEN(@nom_cidade_origem) = 0 BEGIN SELECT @nom_cidade_origem = 'Curitiba' END
INSERT INTO act263_corrida ( num_ano_corrid, num_corrid, ide_situac_corrid, dat_hora_corrid, seq_telefo, dat_hora_cadast, cod_usuari_cadast, cod_lograd_pesqui, nom_lograd_local, num_local, des_comple_local, cod_tipo_carro, qtd_carro_solici, cod_comuni, nom_usuari, ide_nao_fumant, ide_nao_gas, ide_ar_condic, ide_cartao, ide_carro_novo, ide_exectv, des_observ, des_observ_local_refere, cod_usuari_operad, dat_hora_atendi, num_ponto_refere_endere, num_ponto_atendi, num_unidad_atendi, cod_orgao, cod_centrl_telefo, num_ramal, ide_situac_client_call_center, cod_client, seq_autorz, cod_usuari_cancel, dat_hora_cancel, des_motivo_cancel, ide_fumant, dat_hora_final_bloque, num_unidad_prefer, dat_hora_solici, qtd_minuto_anteci, ide_insufi, des_observ_comple, ide_priori_cadast, cod_forma_pagame, ide_encome, cod_marca_veicul, cod_modelo_veicul, des_observ_intern, cod_lograd_entreg_encome, nom_lograd_entreg_encome, num_local_entreg_encome, des_comple_local_entreg_encome, ide_cd, ide_dvd, ide_navegd_gps, ide_intrnt, ide_viagem, ide_conexa_bateri, dat_hora_inicio_nagyro, ide_jovem, ide_trocar_pneu, ide_engate, seq_usuari_web_cadast, ide_forma_seleca_corrid, ide_carro_alto, ide_carro_baixo, ide_porta_malas_grande, num_call_center, cod_client_celula ) VALUES ( year(getdate()), @num_corrid, @ide_situac_corrid, @dat_hora_corrid, @seq_telefo, @dat_hora_cadast, @cod_usuari_cadast, @cod_lograd_pesqui, @nom_lograd_local, @num_local, @des_comple_local, @cod_tipo_carro, @qtd_carro_solici, @cod_comuni, @nom_usuari, @ide_nao_fumant, @ide_nao_gas, @ide_ar_condic, @ide_cartao, @ide_carro_novo, @ide_exectv, @des_observ, @des_observ_local_refere, @cod_usuari_operad, @dat_hora_atendi, @num_ponto_refere_endere, @num_ponto_atendi, @num_unidad_atendi, @cod_orgao, @cod_centrl_telefo, @num_ramal, @ide_situac_client_call_center, @cod_client, @seq_autorz, @cod_usuari_cancel, @dat_hora_cancel, @des_motivo_cancel, @ide_fumant, @dat_hora_final_bloque, @num_unidad_prefer, @dat_hora_solici, @qtd_minuto_anteci, @ide_insufi, @des_observ_comple, @ide_priori_cadast, @cod_forma_pagame, @ide_encome, @cod_marca_veicul, @cod_modelo_veicul, @des_observ_intern, @cod_lograd_entreg_encome, @nom_lograd_entreg_encome, @num_local_entreg_encome, @des_comple_local_entreg_encome, @ide_cd, @ide_dvd, @ide_navegd_gps, @ide_intrnt, @ide_viagem, @ide_conexa_bateri, @dat_hora_inicio_nagyro, @ide_jovem, @ide_trocar_pneu, @ide_engate, @seq_usuari_web_cadast, @ide_forma_seleca_corrid, @ide_carro_alto, @ide_carro_baixo, @ide_porta_malas_grande, @num_call_center, @cod_client_celula );
SET @Error = @@ERROR IF @@ERROR <> 0 BEGIN ROLLBACK
RAISERROR ('Error ao incluir registro em act263_corrida.', 16, 1) RETURN @Error END
IF @TIPO = 'MOB' BEGIN
INSERT INTO ACT297_CHAMADA_TAXI ( num_ano_corrid, num_corrid, cod_client_celula, des_lograd_origem, num_lograd_origem, des_comple_origem, nom_cidade_origem, des_lograd_destin, num_lograd_destin, des_comple_destin, des_prefer_corrid, cod_client_conven, cod_matric_conven, ide_forma_pagame, cod_forma_pagame_cartao, dat_hora_ultima_altera, dat_hora_arquiv, cod_motivo_cancel, val_distan_destin, val_tarifa_bandei_1, val_tarifa_bandei_2, finalidade, observacao ) VALUES ( year(getdate()), @num_corrid, @cod_client_celula, @des_lograd_origem, @num_lograd_origem, @des_comple_origem, @nom_cidade_origem, @des_lograd_destin, @num_lograd_destin, @des_comple_destin, @des_prefer_corrid, @cod_client_conven, @cod_matric_conven, @ide_forma_pagame, @cod_forma_pagame_cartao, @dat_hora_ultima_altera, @dat_hora_arquiv, @cod_motivo_cancel, @val_distan_destin, @val_tarifa_bandei_1, @val_tarifa_bandei_2, @finalidade, @observacao); END
SET @Error = @@ERROR IF @@ERROR <> 0 BEGIN ROLLBACK
RAISERROR ('Error ao incluir registro em ACT297_CHAMADA_TAXI.', 16, 1) RETURN @Error END
COMMIT
RETURN @num_corrid |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 68 messages |
|
Posté le 29 janvier 2015 - 17:16 |
Adriano - Are you asking a question or giving a tip? I apologize - I only read English and I can not tell from your code.
Here are a couple of things we have found in working with MSSQL and hExecuteSQLQuery. We use this format hExecuteSQLQuery(datasource,connection,hQueryWithoutCorrection ,QryString) When calling a stored procedure that may not return a value, issuing the hReadFirst may cause an error so we surround that in a When Exception - When Exception in hReadFirst(datasource) DO //nothing - the procedure returned no error ELSE // Process the returned data, check for SQL Error messages END ---------------------- We have also found that including GO commands in the QryString can cause the remainder of the commands in the string to be ignored. So we parse the entire script using the GOs as the string separators; sending each segment of the script or query separately and testing for return values on each segment. --------------------- Here is a skeleton of our process - //sFileString holds the entire Script //We use a free form table to manage results during testing
FOR EACH STRING sScript OF sFileString SEPARATED BY CR + "GO"
IF HExecuteSQLQuery(dsQRYResults,ms1.ctActiveconn,hQueryWithoutCorrection,sScript) THEN TABLE_FieldInfo..BrowsedFile = dsQRYResults WHEN EXCEPTION IN nTestnbr is int = dsQRYResults..NbItem // hReadFirst(dsQueryResults) DO Trace("Exception - the script completed") //EDT_Results += "Part "+PROGBAR_Script+ CR + "Command(s) completed successfully."+CR ELSE //The script returned values! - These couild be expected or an error msg - Show whatever returned. BuildBrowsingTable(TABLE_FieldInfo,dsQRYResults,taFillTable) // TableDisplay(TABLE_FieldInfo,taInit) ColName = TableEnumColumn(TABLE_FieldInfo,1) FOR EACH ROW OF TABLE_FieldInfo EDT_Results += {"TABLE_FieldInfo."+ColName} END TABLE_FieldInfo..Visible = True END ELSE Trace("HSQ Error") WriteErrLog(SysDateTime()+"Critical Error in script:"+p_Title+CR+"Desc:"+p_Description+CR+"Auto="+gPAuto) bFail = True BREAK END
END
Cheers, Chris C
-- Sometimes waiting is the best way forward... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 29 janvier 2015 - 18:15 |
I usually post tips, rarely doubt, but as I am human can make mistakes, surely have a better way of doing I thank sending your comments because it helps everyone who has difficulties. Congratulations and thanks for the help!
|
| |
| |
| | | |
|
| | | | |
| | |
|