Fórum Dúvida urgente! Importação de Script para banco de dados Firebird #431036

14/12/2012

0

Olá amigos!

Precico importar o seguinte script de um Stored Procedure através do delphi para atualizar um banco de dados:

SET TERM ^ ;

create or alter procedure PRODUTO_IU (
    ID type of column PRODUTO.ID,
    ID_UNIDADE_PRODUTO type of column PRODUTO.ID_UNIDADE_PRODUTO,
    GTIN type of column PRODUTO.GTIN,
    CODIGO_INTERNO type of column PRODUTO.CODIGO_INTERNO,
    NOME type of column PRODUTO.NOME,
    DESCRICAO type of column PRODUTO.DESCRICAO,
    DESCRICAO_PDV type of column PRODUTO.DESCRICAO_PDV,
    VALOR_VENDA type of column PRODUTO.VALOR_VENDA,
    QTD_ESTOQUE type of column PRODUTO.QTD_ESTOQUE,
    QTD_ESTOQUE_ANTERIOR type of column PRODUTO.QTD_ESTOQUE_ANTERIOR,
    ESTOQUE_MIN type of column PRODUTO.ESTOQUE_MIN,
    ESTOQUE_MAX type of column PRODUTO.ESTOQUE_MAX,
    IAT type of column PRODUTO.IAT,
    IPPT type of column PRODUTO.IPPT,
    NCM type of column PRODUTO.NCM,
    TIPO_ITEM_SPED type of column PRODUTO.TIPO_ITEM_SPED,
    DATA_ESTOQUE type of column PRODUTO.DATA_ESTOQUE,
    CST type of column PRODUTO.CST,
    CSOSN type of column PRODUTO.CSOSN,
    ECF_ICMS_ST type of column PRODUTO.ECF_ICMS_ST,
    CODIGO_BALANCA type of column PRODUTO.CODIGO_BALANCA,
    PAF_P_ST type of column PRODUTO.PAF_P_ST,
    PROMOCAO type of column PRODUTO.PROMOCAO)
as
begin
  if (exists(select id from produto where (id = :id))) then
    update produto
    set id_unidade_produto = :id_unidade_produto,
        gtin = :gtin,
        codigo_interno = :codigo_interno,
        nome = :nome,
        descricao = :descricao,
        descricao_pdv = :descricao_pdv,
        valor_venda = :valor_venda,
        qtd_estoque = :qtd_estoque,
        qtd_estoque_anterior = :qtd_estoque_anterior,
        estoque_min = :estoque_min,
        estoque_max = :estoque_max,
        iat = :iat,
        ippt = :ippt,
        ncm = :ncm,
        tipo_item_sped = :tipo_item_sped,
        data_estoque = :data_estoque,
        cst = :cst,
        csosn = :csosn,
        ecf_icms_st = :ecf_icms_st,
        codigo_balanca = :codigo_balanca,
        paf_p_st = :paf_p_st,
        promocao=:promocao
    where (id = :id);
  else
    insert into produto (
        id,
        id_unidade_produto,
        gtin,
        codigo_interno,
        nome,
        descricao,
        descricao_pdv,
        valor_venda,
        qtd_estoque,
        qtd_estoque_anterior,
        estoque_min,
        estoque_max,
        iat,
        ippt,
        ncm,
        tipo_item_sped,
        data_estoque,
        cst,
        csosn,
        ecf_icms_st,
        codigo_balanca,
        paf_p_st,promocao)
    values (
        :id,
        :id_unidade_produto,
        :gtin,
        :codigo_interno,
        :nome,
        :descricao,
        :descricao_pdv,
        :valor_venda,
        :qtd_estoque,
        :qtd_estoque_anterior,
        :estoque_min,
        :estoque_max,
        :iat,
        :ippt,
        :ncm,
        :tipo_item_sped,
        :data_estoque,
        :cst,
        :csosn,
        :ecf_icms_st,
        :codigo_balanca,
        :paf_p_st,
        :promocao);
end^

SET TERM ; ^

GRANT SELECT,INSERT,UPDATE ON PRODUTO TO PROCEDURE PRODUTO_IU;

GRANT EXECUTE ON PROCEDURE PRODUTO_IU TO SYSDBA;


Estou tentando fazer isso através do IBScript, outro script sem os SET TERM funcionou, porem este não funciona, ele importa o scrpit mas não completo e sem os SET TERM, por favor me ajudem.

Grato
Wellington Menezes

Wellington Menezes

Responder

Posts

14/12/2012

Luiz Menin

Tente utilizar o TQuery.
Responder

Gostei + 0

14/12/2012

Wellington Menezes

Já tentei, mas pela TSqlQuery o scrpit não chega a ser executado...
Responder

Gostei + 0

14/12/2012

William

Colega senão me falha a memória componentes da paleta DBExpress não executam esse tipo de script.

O colega Marco Salles moderador do fórum, tem um blog onde ensina a criar tabelas usando TDBXConnection e outras classes, acho q deve ajudar vc.

Segue o link:
[url]http://marcosalles.wordpress.com/2011/06/15/manipulando-metadados-criando-tabelas-campos-chaves-estrangeiras-utilizando-o-framework-dbxexpress-sem-dataset-delphi-2010-parte-iii/[/url]
Responder

Gostei + 0

14/12/2012

Claudia Nogueira

Você não precisa colocar o SET TERM no script, pois o SET TERM serve apenas para mudar o caractere que termina um comando, pra separar um do outro. Então você tem que mudar a propriedade Terminator do IbScript para ^ e seu script tem que ficar assim:

create or alter procedure PRODUTO_IU (
ID type of column PRODUTO.ID,
ID_UNIDADE_PRODUTO type of column PRODUTO.ID_UNIDADE_PRODUTO,
GTIN type of column PRODUTO.GTIN,
CODIGO_INTERNO type of column PRODUTO.CODIGO_INTERNO,
NOME type of column PRODUTO.NOME,
DESCRICAO type of column PRODUTO.DESCRICAO,
DESCRICAO_PDV type of column PRODUTO.DESCRICAO_PDV,
VALOR_VENDA type of column PRODUTO.VALOR_VENDA,
QTD_ESTOQUE type of column PRODUTO.QTD_ESTOQUE,
QTD_ESTOQUE_ANTERIOR type of column PRODUTO.QTD_ESTOQUE_ANTERIOR,
ESTOQUE_MIN type of column PRODUTO.ESTOQUE_MIN,
ESTOQUE_MAX type of column PRODUTO.ESTOQUE_MAX,
IAT type of column PRODUTO.IAT,
IPPT type of column PRODUTO.IPPT,
NCM type of column PRODUTO.NCM,
TIPO_ITEM_SPED type of column PRODUTO.TIPO_ITEM_SPED,
DATA_ESTOQUE type of column PRODUTO.DATA_ESTOQUE,
CST type of column PRODUTO.CST,
CSOSN type of column PRODUTO.CSOSN,
ECF_ICMS_ST type of column PRODUTO.ECF_ICMS_ST,
CODIGO_BALANCA type of column PRODUTO.CODIGO_BALANCA,
PAF_P_ST type of column PRODUTO.PAF_P_ST,
PROMOCAO type of column PRODUTO.PROMOCAO)
as
begin
if (exists(select id from produto where (id = :id))) then
update produto
set id_unidade_produto = :id_unidade_produto,
gtin = :gtin,
codigo_interno = :codigo_interno,
nome = :nome,
descricao = :descricao,
descricao_pdv = :descricao_pdv,
valor_venda = :valor_venda,
qtd_estoque = :qtd_estoque,
qtd_estoque_anterior = :qtd_estoque_anterior,
estoque_min = :estoque_min,
estoque_max = :estoque_max,
iat = :iat,
ippt = :ippt,
ncm = :ncm,
tipo_item_sped = :tipo_item_sped,
data_estoque = :data_estoque,
cst = :cst,
csosn = :csosn,
ecf_icms_st = :ecf_icms_st,
codigo_balanca = :codigo_balanca,
paf_p_st = :paf_p_st,
promocao=:promocao
where (id = :id);
else
insert into produto (
id,
id_unidade_produto,
gtin,
codigo_interno,
nome,
descricao,
descricao_pdv,
valor_venda,
qtd_estoque,
qtd_estoque_anterior,
estoque_min,
estoque_max,
iat,
ippt,
ncm,
tipo_item_sped,
data_estoque,
cst,
csosn,
ecf_icms_st,
codigo_balanca,
paf_p_st,promocao)
values (
:id,
:id_unidade_produto,
:gtin,
:codigo_interno,
:nome,
:descricao,
:descricao_pdv,
:valor_venda,
:qtd_estoque,
:qtd_estoque_anterior,
:estoque_min,
:estoque_max,
:iat,
:ippt,
:ncm,
:tipo_item_sped,
:data_estoque,
:cst,
:csosn,
:ecf_icms_st,
:codigo_balanca,
:paf_p_st,
:promocao);
end^

GRANT SELECT,INSERT,UPDATE ON PRODUTO TO PROCEDURE PRODUTO_IU^

GRANT EXECUTE ON PROCEDURE PRODUTO_IU TO SYSDBA^



Agora sempre que você for usar esse IbScript e tiver mais de um comando, você vai finalizar cada comando com ^ em vez do ;

Responder

Gostei + 0

14/12/2012

Rafael Cunha

Boa Tarde!

Qual a versão do Delphi você está utilizando? E qual componente você utiliza para realizar a conexão com o banco de dados?
Responder

Gostei + 0

14/12/2012

Wellington Menezes

Boa Tarde!

Qual a versão do Delphi você está utilizando? E qual componente você utiliza para realizar a conexão com o banco de dados?


Neste caso estou usando Delphi 2010 e o componente para conexão IBDatabase
Responder

Gostei + 0

14/12/2012

Wellington Menezes

Olá Claudia, funcionou do jeito que vc sugeriu, obrigado!
Responder

Gostei + 0

14/12/2012

Rafael Cunha

Então você poderá resolver o seu problema como foi citado pela Claudiadnh.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar