Executar Script com SQLConnection
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...
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
Curtidas 0
Respostas
Gilvanj
02/11/2004
Oi.
Dê uma olhada no pacote de componente DbExpressPlus. Tem o componente TSQLScript que foi feito para isso.
Dê uma olhada no pacote de componente DbExpressPlus. Tem o componente TSQLScript que foi feito para isso.
GOSTEI 0
Edusgouveia
02/11/2004
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
Desde já obrigado
GOSTEI 0
Gilvanj
02/11/2004
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...
http://sourceforge.net/projects/dbexpressplus/
Parece que o pacote não é atualizado a bastante tempo...
GOSTEI 0
Vinicius2k
02/11/2004
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...
Para usar:
Espero ter ajudado...
T+
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+
GOSTEI 0
Gilvanj
02/11/2004
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´
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´
GOSTEI 0
Vinicius2k
02/11/2004
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+
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+
GOSTEI 0