ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Erro no script simples trigger? *** Resolvido ***

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Dom Nov 22, 2009 11:09 pm    Assunto: Erro no script simples trigger? *** Resolvido *** Responder com Citação

Estou tendo um erro e não quer gerar um simples script desta trigger
Código:
create or alter trigger trg_associados for associados   
active before insert or update position 0             
as
begin
     if (new.idassoc is null) then
         new.idassoc = gen_id(gen_associados_id,1);
end


Erro:
SLQ error code = - 104 unexpected end of command -line 6 column 50
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Qua Nov 25, 2009 3:36 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Nov 23, 2009 8:57 am    Assunto: Responder com Citação

Acho que é pq estou criando dentro do componente ZSQLProcessor do Zeos.

E chamando ele como o comando execute, que executa o script.

Engraçado que as tabelas, index e generators ele cria normalmente, mais a trigger esse já é problema...

Alguém pode me ajudar?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Nov 23, 2009 9:51 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
Acho que é pq estou criando dentro do componente ZSQLProcessor do Zeos.

E chamando ele como o comando execute, que executa o script.

Engraçado que as tabelas, index e generators ele cria normalmente, mais a trigger esse já é problema...

Alguém pode me ajudar?
Up
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
afarias
Aprendiz
Aprendiz


Registrado: Domingo, 25 de Outubro de 2009
Mensagens: 197
Localização: Recife, PE

MensagemEnviada: Seg Nov 23, 2009 10:04 pm    Assunto: Responder com Citação

o 'terminador' deve ser mudado. para Triggers e Procedures vc não pode usar ';' -- mude para qualquer outra coisa, ex: '^' usando SER TERM:


SET TERM ^;


Note que apenas componentes de script vão conseguir executar isto. Componentes simples de Query provavelmente não suportam.


T+
_________________
Acompanhe: SUPORTE, A SÉRIE:
http://andre.openintelligence.com.br/

Orkut: http://www.orkut.com.br/Main#Community?rl=cpn&cmm=96459906
Twitter: http://twitter.com/Andre_Suporte
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Nov 23, 2009 11:06 pm    Assunto: Responder com Citação

afarias escreveu:
o 'terminador' deve ser mudado. para Triggers e Procedures vc não pode usar ';' -- mude para qualquer outra coisa, ex: '^' usando SER TERM:


SET TERM ^;


Note que apenas componentes de script vão conseguir executar isto. Componentes simples de Query provavelmente não suportam.


T+
Poderia me dar um exemplo?
Assim não funciona também
Código:
SET TERM ^ ;
CREATE OR ALTER TRIGGER TRG_ASSOCIADOS FOR ASSOCIADOS
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as begin                                           
           if (new.idassoc is null) then                 
               new.idassoc = gen_id(gen_associados,1)   
       end
^
SET TERM ; ^

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
afarias
Aprendiz
Aprendiz


Registrado: Domingo, 25 de Outubro de 2009
Mensagens: 197
Localização: Recife, PE

MensagemEnviada: Ter Nov 24, 2009 8:04 am    Assunto: Responder com Citação

vc tem q por um ';' ao fim desta linha:

new.idassoc = gen_id(gen_associados,1) ;


se ainda der erro, informe o erro.


T+
_________________
Acompanhe: SUPORTE, A SÉRIE:
http://andre.openintelligence.com.br/

Orkut: http://www.orkut.com.br/Main#Community?rl=cpn&cmm=96459906
Twitter: http://twitter.com/Andre_Suporte
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Nov 25, 2009 2:00 pm    Assunto: Responder com Citação

afarias escreveu:
vc tem q por um ';' ao fim desta linha:

new.idassoc = gen_id(gen_associados,1) ;


se ainda der erro, informe o erro.


T+
Nada ainda, fiz um teste assim
Código:
SET TERM ^ ;
CREATE OR ALTER TRIGGER TR_CMUX FOR CMU
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
as
begin
  if (new.cmuseq is null) then
     new.cmuseq = gen_id (gen_cmuseq_id, 1);
end
^
SET TERM ; ^

E acusa o erro: SQL: Set Term ^;
-104 token unknow -line 1 char 5 TERM

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
aeciovc
Colaborador
Colaborador


Registrado: Terça-Feira, 18 de Dezembro de 2007
Mensagens: 1042
Localização: Recife

MensagemEnviada: Qua Nov 25, 2009 2:03 pm    Assunto: Responder com Citação

qual banco vc tá usando?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Nov 25, 2009 2:14 pm    Assunto: Responder com Citação

aeciovc escreveu:
qual banco vc tá usando?
Olá amigo, Banco de dados firebird, componentes zeos...

O zconnection para acesso ao db e o zprocessor para gerar o script...
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
thomazs
Moderador
Moderador


Registrado: Segunda-Feira, 1 de Março de 2004
Mensagens: 2835

MensagemEnviada: Qua Nov 25, 2009 3:17 pm    Assunto: Responder com Citação

O problema pode ser o componente. Muitas vezes esses componentes não reconhecem comandos como o SET TERM. Quando precisei fazer algo do tipo, usava IBX e o componente IBScript serviu. Tem similares a esse componenteno IBO e MDO. Ao usar um ZSQLProcessor, acho que você tem que alterar a propriedade "delimiter" dele, ao invés de usar o comando SET TERM.

Se não funcionar, tente usar um ZConnection.ExecuteDirect, com o comando SET TERM.
_________________
Suporte e Consultoria em Desenvolvimento de Sistemas
Bacharel em Sistemas de Informação
Especialista em Bancos de Dados
Desenvolvimento: Clipper, Delphi, PHP, Python/Django
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Nov 25, 2009 3:34 pm    Assunto: Responder com Citação

thomazs escreveu:
O problema pode ser o componente. Muitas vezes esses componentes não reconhecem comandos como o SET TERM. Quando precisei fazer algo do tipo, usava IBX e o componente IBScript serviu. Tem similares a esse componenteno IBO e MDO. Ao usar um ZSQLProcessor, acho que você tem que alterar a propriedade "delimiter" dele, ao invés de usar o comando SET TERM.

Se não funcionar, tente usar um ZConnection.ExecuteDirect, com o comando SET TERM.
Matou Thomaz
A propriedade é DelimiterType dtSetTerm

Ai sim roda o SET TERM Very Happy
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
hjmarcon
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 16 de Julho de 2007
Mensagens: 112

MensagemEnviada: Ter Set 19, 2017 10:56 am    Assunto: Responder com Citação

Adriano, me baseei no seu exemplo de programa para criação de triggers, ficando a rotina dessa forma:
Código:

try
      _GeraScript.DelimiterType     := dtSetTerm; // ZScriptParser
      _GeraScript.CleanupStatements := true; // Remove todos os comentários
      _GeraScript.Delimiter         := '^';
      _GeraScript.ParamCheck        := false;
      _GeraScript.Script            := Comando;
      _GeraScript.Execute; //Executa o script
      ZConnection1.Commit;
      //ShowMessage('Script gerado com sucesso.');
    except
      on e:exception do
      begin
        ZConnection1.Rollback;
        result := 'Não foi possivel gerar o script: '+e.Message;
      end;
    end;


porém, ainda me retorna o erro:
Código:

'SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 5 TERM. Error Code: -104.

Estou usando DelphiXe2, baixei a última versão do Zeos, banco Firebird 3.0 (Consegui com o IBScript no Firebird 2.5).
Já tentei diversas configurações, mas nenhuma está resolvendo.
Poderia me ajudar nessa situação?
Já tentei diversas configurações
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Set 19, 2017 11:10 am    Assunto: Responder com Citação

hjmarcon escreveu:
Adriano, me baseei no seu exemplo de programa para criação de triggers, ficando a rotina dessa forma:
Código:

try
      _GeraScript.DelimiterType     := dtSetTerm; // ZScriptParser
      _GeraScript.CleanupStatements := true; // Remove todos os comentários
      _GeraScript.Delimiter         := '^';
      _GeraScript.ParamCheck        := false;
      _GeraScript.Script            := Comando;
      _GeraScript.Execute; //Executa o script
      ZConnection1.Commit;
      //ShowMessage('Script gerado com sucesso.');
    except
      on e:exception do
      begin
        ZConnection1.Rollback;
        result := 'Não foi possivel gerar o script: '+e.Message;
      end;
    end;


porém, ainda me retorna o erro:
Código:

'SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 5 TERM. Error Code: -104.

Estou usando DelphiXe2, baixei a última versão do Zeos, banco Firebird 3.0 (Consegui com o IBScript no Firebird 2.5).
Já tentei diversas configurações, mas nenhuma está resolvendo.
Poderia me ajudar nessa situação?
Já tentei diversas configurações


Olá eu não uso zeos a muito tempo, parei na versão 6.6.6 com firebird 2.0

Nem lembro mais como fiz isso, tenho aqui uma classe que montei na época para esta finalidade, vou postar ela toda, se te ajudar, tem aqui toda estrutura de tabelas, triggers e sp que usei neste projeto quando fiz.

Veja se te serve amigo.

[code:1:6a7f91de6f]//****************************************************************************//
// Unit criada para manter e fazer a manutenção das tabelas, trigger SP, etc //
// Serve tambpem para fazer a conexão do banco de dados com o zeos 6.6.5 //
// Nesta unit são criada as tabelas em tempo de projeto //
//****************************************************************************//
{$A+,B-,C-,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y-,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}

unit utabelas;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ToolWin, Grids, DBGrids, Provider, DB, DBClient, ComCtrls,
StdCtrls, Mask, Buttons, ExtCtrls, ZDataset, ZConnection, DBCtrls,
StdActns, ActnList, ImgList, Ufuncoes, ZSqlProcessor;

{Declaro as procedures e funções aqui}
procedure CreateDatabase(DBName, User, Pswd, CharSet: String; Dialect: Word);
procedure zconn(pzConn: TZConnection);
procedure CreateTable(pCon: TZConnection; pQuery: TZQuery);
//procedure mostracampos(pQuery: TZQuery; ListarCampos: String);
function TemTabela(Query: TZQuery; Tabela, Campo: String): Boolean;
function TemIndice(Query: TZQuery; Indice: String): Boolean;
function TemGenerator(Query: TZQuery; Generator: String): Boolean;
function TemTrigger(Query: TZQuery; Trigger: String): Boolean;
function TemProcedure(Query: TZQuery; sProcedure: String): Boolean;
//Autor: Adriano
//Data: 04/03/2011
//Novas funcoes e procedures para o controle de campos novos
//que são incluido nas tabelas
function ControleVersaoDB(Query: TZQuery): Integer;
function ComparaVersoesDB(iControleAplication: Integer): Boolean;
procedure AlterTable(pCon: TZConnection; pQuery: TZQuery);
//var
// resultcampos : string;


implementation

uses udm, usplash, ZAbstractRODataset, DateUtils;


//************criar o database, tabelas, triggers, generators, index, stored procedure ******
// CRIAÇÃO DO BANCO DE DADOS
function isc_dsql_execute_immediate(PStatus: PLongint; var db_Handle: PLongint;
var trans_Handle: PLongint; Length: Word; SQL: PChar; Dialect: Word;
PxSqlDa: Pointer): LongInt; stdcall; external 'FBCLIENT.DLL';

function isc_detach_database(PStatus: PLongint; var db_handle: PLongint):
LongInt; stdcall; external 'FBCLIENT.DLL';

function isc_sqlcode(PStatus: PLongint): LongInt; stdcall; external 'FBCLIENT.DLL';

function isc_sql_interprete(Code: LongInt; Buffer: PChar; Size: Integer):
LongInt; stdcall; external 'FBCLIENT.DLL';

function DisplayError(SqlRslt: LongInt; Vector: PLongInt): String;
const
MAX_MSG = 500;
var
SqlMsg: String;
begin
SqlRslt := isc_sqlcode(Vector);
SetLength(SqlMsg, MAX_MSG);
isc_sql_interprete(SqlRslt, PChar(SqlMsg), MAX_MSG);
Setlength(SqlMsg, StrLen(PChar(SqlMsg)));
Result := 'SQL-Code: ' + IntToStr(SqlRslt) + ', Mensagem: ' + SqlMsg;
end;

// MODO DE CRIAÇÃO DB
procedure CreateDataBase(DBName, User, Pswd, CharSet: String; Dialect: Word);
var
Status: Array[1..19] of LongInt;
db, tran: PLongInt;
Rslt: LongInt;
BaseSQL: String;
begin
db := nil;
tran := nil;

BaseSQL := 'CREATE DATABASE "' + DBName +
'" USER "' + User +
'" PASSWORD ' + '"' + Pswd + '" ' + CharSet;

Rslt:= isc_dsql_execute_immediate(@status, db, tran, 0, PChar(BaseSQL), Dialect, Nil);

if Rslt <> 0 then
raise EDatabaseError.Create('Deu erro' +
#10#13 + 'ISC-Nr.: ' + IntToStr(Rslt) +
#10#13 + DisplayError(Rslt, @Status));

Rslt := isc_detach_database(@Status, db);

if Rslt <> 0 then
raise EDatabaseError.Create('Deu erro' +
#10#13 + 'ISC-Nr.: ' + IntToStr(Rslt) +
#10#13 + DisplayError(Rslt, @status));

end;

// CONEXÃO DO O ZCONNECTION
procedure zconn(pzConn: TZConnection); //Para criar o USER e SENHA no zconnection.
var
meuip, caminhodb : string;
begin
//captura ip do componente
{meuip := dm.IdIPWatch1.LocalIP;
caminhodb := meuip+':C:\Aldac\Motoboy\MOTOBOY.fdb';
pzConn.Database := caminhodb;// Caminho onde se encontra o seu banco de dados

//pzConn.HostName := meuip; //'localhost'; //melhor deixar como o ip no lugar do localhost
pzConn.Password := 'masterkey'; // Senha usado para autenticação no banco
pzConn.Protocol := 'firebird-2.0';
pzConn.User := 'SYSDBA'; // Usuário usado para autenticação no banco}
end;

//VERIFICA SE TEM TABELAS, INDICES, GENERATORS
function TemTabela(Query: TZQuery; Tabela, Campo: string): Boolean;
begin
Tabela:= UpperCase (Tabela);
if (Campo <> EmptyStr) then
Campo:= UpperCase (Campo);
Query.Close;
Query.SQL.Clear;
Query.SQL.Add ('SELECT rdb$relation_name FROM rdb$relation_fields ');
Query.SQL.Add ('WHERE rdb$relation_name = ' + QuotedStr(UpperCase(Tabela)));
if (Campo <> EmptyStr) then
Query.SQL.Add ('AND rdb$field_name = ' + QuotedStr(Campo));
Query.Open;
Result := (not Query.IsEmpty);
end;

function TemIndice(Query: TZQuery; Indice: String): Boolean;
var
sSQL: String;
begin
sSQL := 'SELECT rdb$index_name FROM rdb$indices WHERE rdb$index_name = ' + QuotedStr(UpperCase(Indice));
Query.Close;
Query.SQL.Clear;
Query.SQL.Add (sSQL);
Query.Open;
Result := (not Query.IsEmpty);
end;

function TemGenerator (Query: TZQuery; Generator: String): Boolean;
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add ('SELECT rdb$generator_name FROM rdb$generators WHERE rdb$generator_name = ' + QuotedStr(UpperCase(Generator)));
Query.Open;
Result := (not Query.IsEmpty);
end;

function TemTrigger (Query: TZQuery; Trigger: String): Boolean;
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT rdb$trigger_name FROM rdb$triggers WHERE rdb$trigger_name = ' + QuotedStr(UpperCase(Trigger)));
Query.Open;
Result := (not Query.IsEmpty);
end;

function TemProcedure(Query: TZQuery; sProcedure: String): Boolean;
var
sSQL: String;
begin
sSQL := 'SELECT * FROM rdb$procedures WHERE rdb$procedure_name = ' + QuotedStr(UpperCase(sProcedure));
Query.Close;
Query.SQL.Clear;
Query.SQL.Text := sSQL;
query.open;
Result := (not Query.IsEmpty);
end;

function ControleVersaoDB(Query: TZQuery): Integer;
var
sSQL: String;
begin
sSQL := ' SELECT controle FROM versaodb ';
with Query do
begin
Close;
SQL.Clear;
SQL.Text := sSQL;
Open;
if not IsEmpty then
Result := FieldByName('controle').AsInteger
else
Result := 0;
end;
end;

function ComparaVersoesDB(iControleAplication: Integer): Boolean;
var
i, iControleBanco: Integer;
begin
i := iControleAplication;
//Se existir algum campo novo na tabela então o result é true
iControleBanco := ControleVersaoDB(dm.ControleVersaoDB);
if i > iControleBanco then
Result := True
else
Result := False;
end;

{}

//COMPARA TABELAS
{procedure mostracampos(pQuery: TZQuery; ListarCampos: String);
begin
//Cria a tabela em modo string
with pQuery do
begin
close; //mostra todos os campos criados
SQL.Close;
SQL.Add (' select (rdb$field_name)as Campo from ');
SQL.Add (' rdb$relation_fields ');
SQL.Add (' where rdb$relation_name = ''VERSOES'' ');
SQL.Add (' order by rdb$field_position ');
open;
ListarCampos :=(pQuery.fields[0].AsString);
resultcampos := ListarCampos;
end;
end;
}
//-----------------------------------------------------------------------------
//
// ALTERAÇÃO DAS TABELAS
// Autor: Adriano
// Para alterar os campos das tabelas utilize este espaço
//
//------------------------------------------------------------------------------
procedure AlterTable(pCon: TZConnection; pQuery: TZQuery);
//Procedure para atualizar a versão no banco cfe alteraões
procedure AtualizaVersaoDB(iVarControl: Integer);
begin
with pQuery do
begin
Close;
SQL.Clear;
SQL.Text := ' UPDATE versaodb SET controle = :iControle ';
ParamByName('iControle').AsInteger := iVarControl;
ExecSQL;
DM.connection.Commit;
end;
end;
begin
try
with pQuery do
begin
//Nova atualização
//Data: 04/03/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 1
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(1) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE PARAMETROS ');
SQL.Add (' ADD AT_MAIMIN CHAR(1) ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(1); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//

//Nova atualização
//Data: 05/03/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 2
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(2) then // <=== MUDA AQUI
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE PARAMETROS ');
SQL.Add (' ADD AT_VALIDCPF CHAR(1), ');
SQL.Add (' ADD AT_VALIDCNPJ CHAR(1), ');
SQL.Add (' ADD AT_VALIDCEI CHAR(1) ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(2); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//
//Nova atualização
//Data: 05/03/2011 - 23:00hs
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 3
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(3) then // <=== MUDA AQUI
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE PARAMETROS ');
SQL.Add (' ADD AT_TABLEOPEN CHAR(1) ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(3); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//

//
//Nova atualização
//Data: 06/03/2011 - 03:00hs
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 4
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(4) then // <=== MUDA AQUI
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE PARAMETROS ');
SQL.Add (' ADD AT_THEME CHAR(1) ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(4); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//
//Nova atualização
//Data: 06/03/2011 - 03:30hs
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 5
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(5) then // <=== MUDA AQUI
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE PARAMETROS ');
SQL.Add (' ADD AT_ABAPAGINA CHAR(1) ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(5); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//
//Nova atualização
//Data: 06/03/2011 - 14:00hs
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 6
//PT: 1000 solicitações de novos campos na tabela Orderserv para um
//cliente que tem um trabalho diferenciado com o banco HSBC
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'ORDEMSERV', EmptyStr) then // <== INCLUI O NOME DA TABELA QUE TERÁ NOVOS CAMPOS
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(6) then // <=== MUDA A VERSÃO AQUI
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
//Aqui é incluido os novos campos cfe script SQL
SQL.Add (' ALTER TABLE ORDEMSERV ');
SQL.Add (' ADD MATRICULAHSBC INTEGER ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(6); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//
//Nova atualização
//Data: 13/03/2011 - 11:30hs
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 7
//PT: 1000 solicitações de novos campos na tabela Orderserv para um
//cliente que tem um trabalho diferenciado com o banco HSBC
//Tabela REGISTRO recebeu novos campos
if TemTabela(pQuery, 'REGISTRO', EmptyStr) then // <== INCLUI O NOME DA TABELA QUE TERÁ NOVOS CAMPOS
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(7) then // <=== MUDA A VERSÃO AQUI
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
//Aqui é incluido os novos campos cfe script SQL
SQL.Add (' ALTER TABLE REGISTRO ');
SQL.Add (' ADD CBIE VARCHAR(2), ');
SQL.Add (' ADD IE VARCHAR(20), ');
SQL.Add (' ADD CEP VARCHAR(15), ');
SQL.Add (' ADD NUMERO VARCHAR(10)');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(7); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//
//Nova atualização
//Data: 25/03/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 8
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(8) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE PARAMETROS ');
SQL.Add (' ADD AT_BUTTONPROCESSAR CHAR(1) ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(8); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
end;
end;
//
//Nova atualização
//Data: 27/03/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 9
//Tabela GRUPOUSUARIOS recebeu novo campo
if TemTabela(pQuery, 'GRUPOUSUARIOS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(9) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Add (' ALTER TABLE GRUPOUSUARIOS ');
SQL.Add (' ADD IDEMPRESAS integer ');
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(9); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;
//
//
//Nova atualização
//Data: 01/04/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 10
//Tabela PERFIL_CONF recebeu novo campo
if TemTabela(pQuery, 'PERFIL_CONF', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(10) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE PERFIL_CONF ADD CONSTRAINT FK_PERFIL_CONF_1'+
' FOREIGN KEY (RELACION_ID) REFERENCES USUARIOS (ID_USUARIO) '+
' ON DELETE CASCADE ON UPDATE CASCADE';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(10); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 07/09/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 11
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(11) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE PARAMETROS '+
' ADD AT_BLOQUEAR_SETAS CHAR(1) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(11); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 22/11/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 12
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(12) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE PARAMETROS '+
' ADD AT_UTILIZAFRACAO_HORA CHAR(1) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(12); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 22/11/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 13
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PRECO', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(13) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE PRECO '+
' ADD HORA_MEDIA VARCHAR(3), '+
' ADD MEDIA_HORA TIME ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(13); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 22/10/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 14
//Tabela PARAMETROS recebeu novo campo
if TemTabela(pQuery, 'PRESERV', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(14) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE PRESERV '+
' ADD HORA_MEDIA VARCHAR(3), '+
' ADD MEDIA_HORA TIME ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(14); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 15/11/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 15
//Tabela CONTAS_RECEBER recebeu novo campo
if TemTabela(pQuery, 'CONTAS_RECEBER', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(15) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CONTAS_RECEBER '+
' ADD FORMAPGTO VARCHAR(30) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(15); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 15/11/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 15
//Tabela FORMAPGTO recebeu novo campo
if TemTabela(pQuery, 'FORMAPGTO', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(16) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE FORMAPGTO '+
' ADD UTILIZAR_EM CHAR(1) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(16); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 25/11/2011
//Cada atualização de campos deve ser incluido uma nova versão
//Passando para versão 17
//Tabela FORMAPGTO recebeu novo campo
if TemTabela(pQuery, 'CONTAS_RECEBER', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(17) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CONTAS_RECEBER '+
' ADD TIPORECEBIMENTO VARCHAR(50) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(17); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 25/01/2012
//criado uma novo campo
//Passando para versão 18
if TemTabela(pQuery, 'CLIENTES', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(18) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CLIENTES '+
' ADD FLAG_CEF_TRANSMIT CHAR(1) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(18); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 20/03/2012
//criado uma novo campo
//Passando para versão 19
if TemTabela(pQuery, 'CONTAS_PAGAR', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(19) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CONTAS_PAGAR '+
' ADD FORMAPGTO VARCHAR(30), '+
' ADD TIPORECEBIMENTO VARCHAR(50) COLLATE WIN_PTBR, '+
' ADD HISTORICO_RECEBIMENTO VARCHAR(255) COLLATE WIN_PTBR, '+
' ADD MOTIVORECEB VARCHAR(20) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(19); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 01/05/2012
//criado uma novo campo
//Passando para versão 20
if TemTabela(pQuery, 'ORDEMSERV', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(20) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE ORDEMSERV '+
' ADD CONTA_CONTABIL VARCHAR(15) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(20); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 27/07/2012
//criado novo parametro na tabela paramentros
if TemTabela(pQuery, 'PARAMETROS', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(21) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE PARAMETROS '+
' ADD AT_GRAVAOSSEMVALOR CHAR(1) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(21); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 20/03/2013
//criado campo na tabela cliente
if TemTabela(pQuery, 'CLIENTES', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(22) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CLIENTES '+
' ADD FLAG_NFE_EXXMAIS CHAR(3) ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(22); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 28/11/2013
//criado campo na tabela cliente
if TemTabela(pQuery, 'CLIENTES', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(23) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CLIENTES '+
' ALTER EMAILRESP TYPE VARCHAR(255) CHARACTER SET WIN1252 ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(23); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 28/11/2013
//criado campo na tabela cliente
if TemTabela(pQuery, 'CLIENTES', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(24) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE CLIENTES '+
' ALTER EMAILCLIE TYPE VARCHAR(255) CHARACTER SET WIN1252 ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(24); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 28/11/2013
//criado campo na tabela cliente
if TemTabela(pQuery, 'EMPRESA', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(25) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE EMPRESA '+
' ALTER EMAILEMP TYPE VARCHAR(255) CHARACTER SET WIN1252 ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(25); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 28/11/2013
//criado campo na tabela cliente
if TemTabela(pQuery, 'EMPRESA', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(26) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE EMPRESA '+
' ALTER EMAILCOB TYPE VARCHAR(255) CHARACTER SET WIN1252 ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(26); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;

//Nova atualização
//Data: 28/11/2013
//criado campo na tabela cliente
if TemTabela(pQuery, 'MOTOBOY', EmptyStr) then
begin
{Verifica o controle da ultima versão do banco de dados
se a versão do banco foi inferior a versão passada no parametro então o resultado
é verdadeiro e deve alterar a tabela cfe os novos campos.
OBS: Sempre seguir a sequencia do ID da nova versão}
if ComparaVersoesDB(27) then
begin
Application.ProcessMessages;
try
Close;
SQL.Clear;
SQL.Text:= ' ALTER TABLE MOTOBOY '+
' ALTER EMAIL TYPE VARCHAR(255) CHARACTER SET WIN1252 ';
ExecSQL;
except
//Se der erro dispara um execpt silencioso
end;
//Depois de incluir novos campos na tabela, altera a tabela versaodb
AtualizaVersaoDB(27); // <== MUDA AQUI passando a ID da versão para atualizar a tabela
//
end;
end;


//
//----------------------------------------------------
end; //Final do with
except
on E: Exception do
begin
pt_messagedlg ('Ocorreu um erro ao criar a Tabela. ' +#13#13 +'Erro gerado: '+#13+
E.Message + #13#13 + 'Todo o processo foi abortado!', mtError, [mbOk],0);

pcon.Rollback; //referente ao ZConnetcion
Abort;
end;
end;
end;

//-----------------------------------------------------------------------------
//
// CRIAÇÃO DAS TABELAS
// Autor: Adriano
// Para incluir novas tabelas utilize este espaço
//
//------------------------------------------------------------------------------
procedure CreateTable(pCon: TZConnection; pQuery: TZQuery);
var
seExiste, i : integer;
ListaCampos : TStringList;
Lista, resultcampos, camposarmazenado, extraicampos : string;
sqlcriartable, ListarTabela: string;

vTerceira, xmc, xtz : String;
begin
try
{ bloco que reune todos as criações das tabelas }
with pQuery do
begin
//aqui vou criar as tabelas em scripts usando uma variavel string
// e usar o zporcessor para criar no banco

//Trigger Altera cadastro clientes ordemserv
//trigger DELCONDUTORCASCATA
if (not TemTrigger (pQuery, 'UPD_CADLCLIE_ORDEM')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Trigger cascata';
Application.ProcessMessages;
Close;
SQL.Text := ' CREATE OR ALTER TRIGGER UPD_CADLCLIE_ORDEM FOR CLIENTES '+
' ACTIVE BEFORE UPDATE POSITION 0 '+
' AS '+
' BEGIN '+
' UPDATE ORDEMSERV SET '+
' IDCLIENTES = NEW.IDCLIENTES, '+
' NOMECLIE = NEW.NOMECLIE, '+
' ENDERCLIE = NEW.ENDERCLIE, '+
' TELCLIE = NEW.TELCLIE1, '+
' BAIRROCLIE = NEW.BAIRROCLIE, '+
' CIDADECLIE = NEW.CIDADECLIE, '+
' UFCLIE = NEW.UFCLIE '+
' WHERE IDCLIENTES = NEW.IDCLIENTES; '+
' END ';
ExecSQL;
end;

//trigger DELCONDUTORCASCATA
if (not TemTrigger (pQuery, 'DELCONDUTORCASCATA')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Trigger cascata';
Application.ProcessMessages;
Close;
SQL.Text := ' CREATE OR ALTER TRIGGER DELCONDUTORCASCATA FOR MOTOBOY '+
' ACTIVE BEFORE DELETE POSITION 0 '+
' AS '+
' begin '+
' DELETE FROM vale '+
' WHERE (IDFUNCIONA = OLD.IDMOTOBOY); '+
' end ';
ExecSQL;
end;

if (not temtabela (pQuery, 'PERIODO_RELATORIO', '')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Tabela MULTI-EMPRESAS';
application.processmessages;
// Tabela PERIODO_RELATORIO
Close;
SQL.Clear;
SQL.Text := ' CREATE TABLE PERIODO_RELATORIO( '+
' DATAINICIAL DATE, DATAFINAL DATE ) ';
ExecSQL;
end;

//MONTAGEM DA TABELA MULTI-EMPRESAS
if (not temtabela (pQuery, 'MULTEMPR', '')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Tabela MULTI-EMPRESAS';
application.processmessages;
// Tabela Associados
Close;
SQL.Clear;
SQL.Add (' CREATE TABLE multempr( ');
SQL.Add (' id integer, ');
SQL.Add (' idempresas integer, ');
SQL.Add (' cnpjempresa varchar(18), ');
SQL.Add (' nmempresa varchar(50) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR ');
SQL.Add (' ) ');
execsql;
end;

//indices MULTIEMPRESAS
if (not temindice(pQuery, 'IDXMULTEMPR')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Indices MULTI-EMPRESAS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE INDEX idxMULTEMPR on MULTEMPR (id, idempresas) ');
execsql;
end;

// GENERATORS MULTEMPRESAS
if (not temgenerator (pQuery, 'GEN_MULTEMPR_ID')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando GENERATORS MULTI-EMPRESAS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE GENERATOR GEN_MULTEMPR_ID ');
execsql;
end;

//trigger MULTEMPRESAS
if (not temtrigger (pQuery, 'MULTEMPR_BI')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Trigger MULTI-EMPRESAS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE or alter trigger MULTEMPR_BI FOR MULTEMPR ');
SQL.Add (' active before insert or update position 0 ');
SQL.Add (' as begin ');
SQL.Add (' if (new.id is null) then ');
SQL.Add (' new.id = gen_id(GEN_MULTEMPR_ID,1); ');
SQL.Add (' end ');
execsql;
end;

//Autor: Adriano
//Data: 10/05/2011
{AT0099_0905211 - No formulário “Cadastro de Cliente” criar uma aba com
o nome “Solicitante”, está aba deve ter o mesmo processo da aba “Centro
Custo”. Para que o usuário cadastre todas as pessoas autorizadas a
solicitar serviço. }
//MONTAGEM DA TABELA SOLICITANTE
if (not TemTabela(pQuery, 'SOLICITANTEIND', '')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Tabela SOLICITANTEIND';
application.processmessages;
// Tabela Associados
Close;
SQL.Clear;
SQL.Add (' CREATE TABLE SOLICITANTEIND ( ');
SQL.Add (' IDSOLICITANTEIND INTEGER,, ');
SQL.Add (' IDCLIENTES INTEGER, ');
SQL.Add (' IDEMPRESAS INTEGER, ');
SQL.Add (' CDSOLICITANTEIND VARCHAR(8), ');
SQL.Add (' NOMESOLICITANTEIND VARCHAR(50) COLLATE WIN_PTBR, ');
SQL.Add (' ACESSO CHAR(1), ');
SQL.Add (' USUARIO VARCHAR(50), ');
SQL.Add (' DATAACESSO TIMESTAMP ');
SQL.Add (' ) ');
ExecSQL;
end;

//indices SOLICITANTEIND
if (not TemIndice(pQuery, 'IDXSOLICITANTEIND')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Indices SOLICITANTEIND';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE INDEX idxSOLICITANTEIND on SOLICITANTEIND (IDSOLICITANTEIND) ');
ExecSQL;
end;

// GENERATORS IDSOLICITANTEIND
if (not TemGenerator(pQuery, 'GEN_SOLICITANTEIND_ID')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando GENERATORS IDSOLICITANTEIND';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE GENERATOR GEN_SOLICITANTEIND_ID ');
ExecSQL;
end;

//trigger IDSOLICITANTEIND
if (not temtrigger (pQuery, 'SOLICITANTEIND_BI')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Trigger IDSOLICITANTEIND';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE or alter trigger SOLICITANTEIND_BI FOR SOLICITANTEIND ');
SQL.Add (' active before insert or update position 0 ');
SQL.Add (' as begin ');
SQL.Add (' if (NEW.IDSOLICITANTEIND is null) then ');
SQL.Add (' NEW.IDSOLICITANTEIND = gen_id(GEN_SOLICITANTEIND_ID,1); ');
SQL.Add (' end ');
ExecSQL;
end;

//Autor: Adriano
//Data: 26/03/2011
//MONTAGEM DA TABELA GRUPO DE USUARIOS
if (not temtabela (pQuery, 'GRUPOUSUARIOS', '')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Tabela GRUPOUSUARIOS';
application.processmessages;
// Tabela Associados
Close;
SQL.Clear;
SQL.Add (' CREATE TABLE grupousuarios( ');
SQL.Add (' id integer not null PRIMARY KEY, ');
SQL.Add (' grupo varchar(50) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR,');
SQL.Add (' nivel integer, ');
SQL.Add (' mesmogrupo char(1), ');
SQL.Add (' criasubgrupo char(1), ');
SQL.Add (' subgrupo varchar(50) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR ');
SQL.Add (' ) ');
execsql;
end;

//indices GRUPO DE USUARIOS
if (not temindice(pQuery, 'IDXGRUPOUSUARIOS')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Indices GRUPOUSUARIOS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE INDEX idxGRUPOUSUARIOS on GRUPOUSUARIOS (id) ');
execsql;
end;

// GENERATORS GRUPOUSUARIOS
if (not temgenerator (pQuery, 'GEN_GRUPOUSUARIOS_ID')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando GENERATORS GRUPOUSUARIOS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE GENERATOR GEN_GRUPOUSUARIOS_ID ');
execsql;
end;

//trigger GRUPOSUSUARIOS
if (not temtrigger (pQuery, 'GRUPOUSUARIOS_BI')) then
begin
//frmsplash.lblaguarde.caption:= 'Criando Trigger GRUPOUSUARIOS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE or alter trigger GRUPOUSUARIOS_BI FOR GRUPOUSUARIOS ');
SQL.Add (' active before insert or update position 0 ');
SQL.Add (' as begin ');
SQL.Add (' if (new.id is null) then ');
SQL.Add (' new.id = gen_id(GEN_GRUPOUSUARIOS_ID,1); ');
SQL.Add (' end ');
execsql;
end;


//Autor: Adriano
//Data: 04/03/2011
//Tabela para controle de versoes
//MONTAGEM DA TABELA VERSAODB
if (not TemTabela(pQuery, 'VERSAODB', EmptyStr)) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Tabela VERSAODB';
Application.ProcessMessages;
Close;
SQL.Clear;
SQL.Add (' CREATE TABLE versaodb( ');
SQL.Add (' controle integer ');
SQL.Add (' ) ');
ExecSQL;
end;

//indices VERSAODB
if (not TemIndice(pQuery, 'IDXVERSAODB')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Indices VERSAODB';
Application.Processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE INDEX idxVERSAODB on VERSAODB(controle) ');
ExecSQL;
end;

//Autor: Adriano
//Data: 04/03/2011
//Novas tabelas
//MONTAGEM DA TABELA PARAMETROS
if (not temtabela (pQuery, 'PARAMETROS', EmptyStr)) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Tabela PARAMETROS';
Application.ProcessMessages;
Close;
SQL.Clear;
SQL.Add (' CREATE TABLE parametros( ');
SQL.Add (' id integer, ');
SQL.Add (' at_buscacep char(1), ');
SQL.Add (' at_validarcnh char(1), ');
SQL.Add (' at_utilizarcampostatusOS char(1), ');
SQL.Add (' at_visiblematriculaOS char(1) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR ');
SQL.Add (' ) ');
ExecSQL;
end;

//indices PARAMETROS
if (not temindice (pQuery, 'IDXPARAMETROS')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Indices PARAMETROS';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE INDEX idxPARAMETROS on PARAMETROS (id) ');
ExecSQL;
end;

// GENERATORS PARAMETROS
if (not temgenerator (pQuery, 'GEN_PARAMETROS_ID')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando GENERATORS PARAMETROS';
application.processmessages;
close;
SQL.Clear;
SQL.Add (' CREATE GENERATOR GEN_PARAMETROS_ID ');
execsql;
end;

//trigger PARAMETROS
if (not temtrigger (pQuery, 'PARAMETROS_BI')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Trigger PARAMETROS';
application.processmessages;
close;
SQL.Clear;
SQL.Add (' CREATE or alter trigger PARAMETROS_BI FOR PARAMETROS ');
SQL.Add (' active before insert or update position 0 ');
SQL.Add (' as begin ');
SQL.Add (' if (new.id is null) then ');
SQL.Add (' new.id = gen_id(GEN_PARAMETROS_ID,1); ');
SQL.Add (' end ');
execsql;
end;

//Autor: Adriano
//Data: 01/04/2011
//Novas tabelas
//MONTAGEM DA TABELA perfil_conf
if (not temtabela (pQuery, 'PERFIL_CONF', EmptyStr)) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Tabela PERFIL_CONF';
Application.ProcessMessages;
Close;
SQL.Clear;
SQL.Text := ' CREATE TABLE PERFIL_CONF ( '+
' NAME VARCHAR(75) NOT NULL,'+
' CAPTION VARCHAR(75),'+
' PERMISSAO CHAR(1),'+
' PERFILID INTEGER NOT NULL PRIMARY KEY,'+
' RELACION_ID INTEGER NOT NULL,'+
' MENUVISIBLE CHAR(1) )';
ExecSQL;
end;

//indices PERFIL_CONF
if (not temindice (pQuery, 'IDXPERFIL_CONF')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Indices PERFIL_CONF';
application.processmessages;
Close;
SQL.Clear;
SQL.Add (' CREATE INDEX idxPERFIL_CONF on PERFIL_CONF (PERFILID) ');
ExecSQL;
end;

// GENERATORS PERFIL_CONF
if (not temgenerator (pQuery, 'GEN_PERFIL_CONF_ID')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando GENERATORS PERFIL_CONF';
application.processmessages;
close;
SQL.Clear;
SQL.Add (' CREATE GENERATOR GEN_PERFIL_CONF_ID ');
execsql;
end;

//trigger PERFIL_CONF
if (not temtrigger (pQuery, 'PERFIL_CONF_BI')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Trigger PERFIL_CONF';
application.processmessages;
close;
SQL.Clear;
SQL.Text := 'CREATE OR ALTER TRIGGER PERFIL_CONF_BI FOR PERFIL_CONF '+
' ACTIVE BEFORE INSERT OR UPDATE POSITION 0'+
' AS'+
' BEGIN'+
' IF (NEW.PERFILID IS NULL) THEN'+
' NEW.PERFILID = GEN_ID(GEN_PERFIL_CONF_ID,1);'+
' END';
ExecSQL;
end;
//**************************************************************

//MOTAGEM DA TABELA CLIENTE
if (not temtabela (pQuery, 'CLIENTES', '')) then
begin
////frmsplash.lblaguarde.caption:= 'Criando Tabela CLIENTES';
application.processmessages;
// Tabela Associados
close;
SQL.Clear;
SQL.Add (' CREATE TABLE clientes ( ');
SQL.Add (' idclientes integer, ');
SQL.Add (' idempresas integer, '); //referencia para multempresa
SQL.Add (' datacad date, ');
SQL.Add (' situacaoclie varchar(20), ');
SQL.Add (' nomeclie varchar(50) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR, ');
SQL.Add (' tipocnpj varchar(4), ');
SQL.Add (' cnpjclie varchar(18), ');
SQL.Add (' ufie varchar(2), ');
SQL.Add (' ieclie varchar(20), ');
SQL.Add (' rg varchar(20), ');
SQL.Add (' enderclie varchar(50) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR, ');
SQL.Add (' numclie varchar(10), ');
SQL.Add (' bairroclie varchar(50), ');
SQL.Add (' complclie varchar(50), ');
SQL.Add (' cidadeclie varchar(50) ');
SQL.Add (' CHARACTER SET WIN1252 COLLATE WIN_PTBR, ');
SQL.Add (' ufclie varchar(2), ');
SQL.Add (' telclie1 varchar(14), ');
SQL.Add (' telclie2 varchar(14), ');
SQL.Add (' faxclie varchar(14), ');
SQL.Add (' celularclie varchar(14), ');
SQL.Add (' emailclie varchar(50), ');
SQL.Add (' siteclie varchar(50), ');
SQL.Add (' fantasiaclie varchar(30), ');
SQL.Add (' cepclie varchar(10), ');
SQL.Add (' obs blob sub_type 1 segment size 80, ');
SQL.Add (' endcob varchar(50), ');
SQL.Add (' numcob varchar(10), ');
SQL.Add (' baircob varchar(50),
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
hjmarcon
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 16 de Julho de 2007
Mensagens: 112

MensagemEnviada: Ter Set 19, 2017 11:37 am    Assunto: Responder com Citação

Adriano, muito obrigado por sua prontidão, como sempre, em responder e ajudar.
Olhando seu código, vi que não usa o SET TERM na criação das triggers e resolvi testar sem esse termo.
E FUNCIONOU!
A minha rotina ficou exatamente igual, a única alteração foi remover os SET TERM.
Mais uma vez, muito obrigado. Sucesso!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Set 19, 2017 11:42 am    Assunto: Responder com Citação

hjmarcon escreveu:
Adriano, muito obrigado por sua prontidão, como sempre, em responder e ajudar.
Olhando seu código, vi que não usa o SET TERM na criação das triggers e resolvi testar sem esse termo.
E FUNCIONOU!
A minha rotina ficou exatamente igual, a única alteração foi remover os SET TERM.
Mais uma vez, muito obrigado. Sucesso!
Que bom que resolveu hjmarcon, faz muito tempo que não uso mais zeos e firebird. Mais o importante que ajudou de qualquer forma.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB