Fórum Atualizar banco de dados pelo delphi #174208
20/04/2010
0
Irenildo Carvalho
Curtir tópico
+ 0Posts
21/04/2010
Wesley Yamazack
Como esta atualização vai acontecer ? Para executar scrips tem várias formas, você pode ter um arquivo .bat, você pode ter um outro executável, você pode ter um flag no banco de dados gravando em um campo (0 ou 1), se o scritp já foi criado ou não. Explique melhor como deverá funcionar sua rotina que lhe ajudo mais especificamente
Att,
Wesley Y
Gostei + 0
21/04/2010
Irenildo Carvalho
Gostei + 0
22/04/2010
Wesley Yamazack
Não acho que ficaria legal você engessar o script no seu executável, eu aprovo você criar um arquivo txt com o script, e dentro de um item no menu principal, por exemplo opções / atualizar script, você le o txt e dai atualiza, assim você terá esta função sempre que precisar, sacou ? Acho que assim fica mais "elegante", senão concordar tudo bem vemos outra solução.
Um abraço
Wesley Y
Gostei + 0
23/04/2010
Irenildo Carvalho
Gostei + 0
24/04/2010
Wesley Yamazack
A ideia do Flag seria você ter uma tabela, AtualizaBanco com um único campo, "Atualiza VarChar(1)".
Mas de alguma forma você teria que alterar o executável quando precissar modificar o banco, o uso de um meio externo com uma rotina evitaria este tipo de coisa, mas já que você quer automatizar, terá que engessar um pouco.
Ao abrir a tua aplicação, você da primeira vez irá deixar o flag como "vazio", pois o bd já estar atualizado na primeira vez.
Quando você mandar outro executável com a atualização do BD, você terá que botar este flag para "s", e criar alguma rotina no seu executável para poder executar o script quando atualiza = "s", caso contrário ele não abre o sistema, porém você sempre que mudar o bd, terá que alterar esta rotina ok ? Tornando assim algo meio engessado como falei anteriormente
Acho que o caminho que você quer seria este.
Porém acho que você poderia mandar junto com o executável um script.txt, que ao abrir o executável caso este arquivo exista, você atualiza o bd, depois dela este arquivo. Caso contrário o executável abre normalmente. Entendeu esta outra ideia ?
Uma Abraço, qualquer coisa estamos aqui.
Wesley Y
Gostei + 0
24/04/2010
Irenildo Carvalho
Gostei + 0
26/04/2010
Wesley Yamazack
Primeiramente crie um txt com o nome scritpbd.txt.
No Oncreate do seu formulário você utiliza a função fileexists que temos no delphi para verificar se um determinado arquivo existe, se o arquivo existir você terá que criar um componente sqlQuery e jogar o script para ele poder executar algo como
Var
Qry : TSQLQuery;
S : TStringList;
begin
S := TStringList.Create;
S.LoadFromFile('arquivo.txt');
Qry := TSQLQuery.Create(Self);
Qry.SQL.Add(S.text);
Qry.ExecSQL;
End;
Adapte o exemplo a estas dicas para podermos resolver teu problema. Qualquer dúvida estamos aqui.
Att,
Wesley Y
Gostei + 0
26/04/2010
Irenildo Carvalho
Gostei + 0
27/04/2010
Wesley Yamazack
Desculpas peço eu. Faltou o seguinte :
Var
Qry : TSQLQuery;
S : TStringList;
begin
S := TStringList.Create;
S.LoadFromFile('arquivo.txt');
Qry := TSQLQuery.Create(Self);
Qry.SQLCOnnection := DM.Conexao; //Seu sqlconnection
Qry.SQL.Add(S.text);
Qry.ExecSQL;
End;
Um abraço
Wesley Y
Gostei + 0
27/04/2010
Irenildo Carvalho
var
Qry : TAdoQuery;
S : TStringList;
begin if FileExists('script.txt') then
begin frmEspera := TfrmEspera.Create(Application);
frmEspera.Mensagem := 'Atualizando banco de dados...';
frmEspera.Show;
frmEspera.Update; S := TStringList.Create;
S.LoadFromFile('script.txt');
Qry := TAdoQuery.Create(Self);
Qry.Connection := dmAdo.ADOConnection;
Qry.SQL.Add(S.text);
Qry.ExecSQL; if Qry.IsEmpty then DeleteFile('Script.txt'); frmEspera.Free;
Qry.Free;
end;
end;
Gostei + 0
28/04/2010
Wesley Yamazack
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
xQry: TSQLQuery;
begin
xQry := TSQLQuery.Create(Self);
xQry.SQLConnection := Conexao;
With xQry.SQL do
begin
Add('CREATE PROCEDURE CLIENTETOXPTO ');
Add(' RETURNS ( ');
Add(' CLIENTECOUNT INTEGER) ');
Add(' AS ');
Add(' begin ');
Add(' SELECT COUNT(*) FROM CLIENTE INTO :CLIENTECOUNT; ');
Add(' suspend; ');
Add(' end; ');
end;
ShowMessage( xQry.SQL.Text );
// xQry.ExecSQL;
Conexao.ExecuteDirect(xQry.SQL.Text);
end;
Veja se isso irá funcionar
Um abraço
Wesley Y
Gostei + 0
28/04/2010
Irenildo Carvalho
Gostei + 0
28/04/2010
Wesley Yamazack
Crei uma variável
Var
xQry: TSQLQuery;
Cont : Integer;
begin
xQry := TSQLQuery.Create(Self);
xQry.SQLConnection := Conexao;
With xQry.SQL do
begin
Add('CREATE PROCEDURE CLIENTETOXPTO ');
Add(' RETURNS ( ');
Add(' CLIENTECOUNT INTEGER) ');
Add(' AS ');
Add(' begin ');
Add(' SELECT COUNT(*) FROM CLIENTE INTO :CLIENTECOUNT; ');
Add(' suspend; ');
Add(' end; ');
end;
ShowMessage( xQry.SQL.Text );
// xQry.ExecSQL;
ADOConnection1.Execute( xQry.SQL.Text, Count);
end;
Faça as alterações para o ADO. Blz ?
Att,
Wesley Y
Gostei + 0
28/04/2010
Irenildo Carvalho
Gostei + 0
28/04/2010
Wesley Yamazack
Faz o seguinte posta aqui o código do evento que você esta fazendo, e o scritp da procedure.
Um abraço
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)