Fórum Executar Script com SQLConnection #256906

02/11/2004

0

Gostaria de saber se tem um componente ou alguma forma de executar o seguinte script abaixo pelo delphi:

CREATE TABLE TB_TESTE (
CODIGO INTEGER NOT NULL,
NOME VARCHAR(40) NOT NULL,
PRIMARY KEY (CODIGO)
);

INSERT INTO TB_TESTE (CODIGO, NOME)
VALUES (1, ´ALGO1´);

INSERT INTO TB_TESTE (CODIGO, NOME)
VALUES (2, ´ALGO2´);

COMMIT WORK;

Tenho que executar essas três atualizações no banco, e precisa ser tudo de uma vez, é que esses comandos estão dentro de uma arquivo texto, e é necessário executar o script que esteja nesse arquivo...

Desde já obrigado...


Edusgouveia

Edusgouveia

Responder

Posts

02/11/2004

Gilvanj

Oi.

Dê uma olhada no pacote de componente DbExpressPlus. Tem o componente TSQLScript que foi feito para isso.


Responder

Gostei + 0

03/11/2004

Edusgouveia

Mas onde consigo esse pacote de componentes DbExpressPlus, que possui o componente para execução de script? Esse pacote é de terceiro ou está incluido no delphi 7? É que não posso usar componentes de terceiros...

Desde já obrigado


Responder

Gostei + 0

03/11/2004

Gilvanj

dbExpressPlus é um pacote de componentes de código aberto. Vc pode baixá-lo de:
http://sourceforge.net/projects/dbexpressplus/

Parece que o pacote não é atualizado a bastante tempo...


Responder

Gostei + 0

03/11/2004

Vinicius2k

Colegas,

Há algum tempo desenvolvi uma função capaz de executar scripts simples...
Scripts simples seriam sem alterações ou criações de triggers ou procedures...
Ela ainda não está 100¬ testada, mas pode ser um ponto de partida para vcs...

function RunScript(aSQLConnection: TSQLConnection; aFileName: String): Boolean;
var TD: TTransactionDesc;
    Arquivo: TextFile;
    Linha, StrTemp: String;
    Scripts: TStringList;
    i: integer;
begin
  Result:= False;
  if not FileExists(aFileName) then Exit;
  { **** }
  Scripts:= TStringList.Create;
  StrTemp:= ´´;
  AssignFile(Arquivo, aFileName);
  Reset(Arquivo);
  while not Eof(Arquivo) do
  begin
    ReadLn(Arquivo, Linha);
    StrTemp:= StrTemp + Linha;
    if Pos(´;´, StrTemp) > 0 then
    begin
      Scripts.Add(StrTemp);
      StrTemp:= ´´;
    end
    else StrTemp:= StrTemp + ´ ´;
  end;
  CloseFile(Arquivo);
  { **** }
  TD.TransactionID:= 1;
  TD.IsolationLevel:= xilREADCOMMITTED;
  try
    if not aSQLConnection.Connected then
      aSQLConnection.Connected:= True;
    for i:= 0 to (Scripts.Count - 1) do
    begin
      try
        aSQLConnection.StartTransaction(TD);
        aSQLConnection.ExecuteDirect(Scripts[i]);
        aSQLConnection.Commit(TD);
      except
        on E: Exception do
        begin
          aSQLConnection.Rollback(TD);
          ShowMessage(e.Message);
          Exit;
        end;
      end;
    end;
  except
    on E: Exception do
    begin
      ShowMessage(e.Message);
      Exit;
    end;
  end;
  Result:= True;
end;


Para usar:

if RunScript(SQLConnection1,´D:\correcoes.sql´) then
ShowMessage(´Atualizações concluídas.´);


Espero ter ajudado...
T+


Responder

Gostei + 0

04/11/2004

Gilvanj

Se o comando possuir um ´;´ como abaixo:

UPDATE LOGSISTEMA SET DADOS=´bla bla ; bla bla´ where ...

A função irá que quebrar o comando em duas instruções:

UPDATE LOGSISTEMA SET DADOS=´bla bla ;

e

; bla bla´


Responder

Gostei + 0

04/11/2004

Vinicius2k

Exatamente...
Esta função não chega nem perto do que seria um SQL Parser... mas ela supriu uma necessidade que tive na época...
Como eu disse, apenas instruções DDL simples como CREATE TABLE, ALTER TABLE, CREATE INDEX, ela vai executar com sucesso...

T+


Responder

Gostei + 0

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

Aceitar