Colocar a versão no código fonte
Boa tarde
Como faço para colocar o número da versão no código fonte ??? Tipo se for lá em Project/options VERSION INFORM eu posso informar a versao tipo 1.0.0.0. Mas cada vez que liberar a versáo tenho que estar mudando..
Hoje na tela principal do programa eu coloco a versão manualmente..
Ex: LinhaStatus.Panels[2].Text := 'Versão 1.0.0.0' ;
Eu quero que quando mudar a versáo lá em project options, na barra de status ele captura a versao que coloquei sem precisar mudar manualmente...
Trabalho com Delphi 2010
Fico no aguardo
Rogério
Rogerio Santos
Curtidas 0
Respostas
Marcos Iwazaki
05/08/2010
Cria uma unit com esta estrutura...
unit LibGenU;
interface
type
TAppGen = class
public
class function GetBuildInfo_Mascara(pAppName:string): string;
end;
implementation
uses
SysUtils, Windows, Forms;
class function TAppGen.GetBuildInfo_Mascara(pAppName:string): string;
// formata a BuildInfo em XX.XX.XX.XXX
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
V1, V2, V3, V4: Word;
Prog: string;
begin
Prog := pAppName;
VerInfoSize := GetFileVersionInfoSize(PChar(prog), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(prog), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
V1 := dwFileVersionMS shr 16;
V2 := dwFileVersionMS and $FFFF;
V3 := dwFileVersionLS shr 16;
V4 := dwFileVersionLS and $FFFF;
end;
FreeMem(VerInfo, VerInfoSize);
result := FormatFloat('0',V1) + '.' + FormatFloat('00',V2) + '.' + FormatFloat('00',V3) + '.' + FormatFloat('000',V4);
end;
..
-----------------------------------------------------------------
como usar:
Primeiro faça um uses dessa lib que acabou de criar
LinhaStatus.Panels[2].Text := TAppGen.GetBuildInfo_Mascara('c:\MeuAplicativo.exe');
ou
LinhaStatus.Panels[2].Text := TAppGen.GetBuildInfo_Mascara(Application.ExeName);
espero ter ajudado
unit LibGenU;
interface
type
TAppGen = class
public
class function GetBuildInfo_Mascara(pAppName:string): string;
end;
implementation
uses
SysUtils, Windows, Forms;
class function TAppGen.GetBuildInfo_Mascara(pAppName:string): string;
// formata a BuildInfo em XX.XX.XX.XXX
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
V1, V2, V3, V4: Word;
Prog: string;
begin
Prog := pAppName;
VerInfoSize := GetFileVersionInfoSize(PChar(prog), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(prog), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
V1 := dwFileVersionMS shr 16;
V2 := dwFileVersionMS and $FFFF;
V3 := dwFileVersionLS shr 16;
V4 := dwFileVersionLS and $FFFF;
end;
FreeMem(VerInfo, VerInfoSize);
result := FormatFloat('0',V1) + '.' + FormatFloat('00',V2) + '.' + FormatFloat('00',V3) + '.' + FormatFloat('000',V4);
end;
..
-----------------------------------------------------------------
como usar:
Primeiro faça um uses dessa lib que acabou de criar
LinhaStatus.Panels[2].Text := TAppGen.GetBuildInfo_Mascara('c:\MeuAplicativo.exe');
ou
LinhaStatus.Panels[2].Text := TAppGen.GetBuildInfo_Mascara(Application.ExeName);
espero ter ajudado
GOSTEI 0
Rogerio Santos
05/08/2010
Bom dia
Obrigado por responder mas ainda nao testei o código.. Outra dúvida.
Estou tendo um problema em um cadastro simples, pois percebo que simplesmente nao está gravando registros.
Para gravar faço assim no botao gravar
if dsEstado.State in [dsInsert,dsEdit] then
begin
with dmAuxiliar do
begin
CdsCadEstado.edit;
CdsCadEstado.FieldByName('COD_USUARIO').AsInteger := unFuncao.icdUsuario; if dmConexao.Verifica_campos_em_branco(dsEstado) then
begin
CdsCadEstado.Post;
CdsCadEstado.applyupdates(-1);
dmConexao.comit;
end;
end;
end; //Método comit procedure TdmConexao.comit;
var Transacao : TTransactionDesc;
begin try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD; SqlConexao.StartTransaction(Transacao);
SqlConexao.Connected := True;
SqlConexao.Commit(Transacao); except
on Exc:Exception do
begin
ShowMessage('Erro no registro do banco: '+ Exc.Message);
SqlConexao.Rollback(Transacao);
end;
end; end; As vezes grava o registro e as vezes nao grava Já tirei os fields do ClientDataset e do sqlserver e adicionei novamente, mas nao funcionou... Como COD_USUARIO é chave estrangeira entao na propriedade providerflags desabilitei as proprieadades pfinupdate, pfinupwhere colocando para falso Estou usando a conexao dbxexpress e o Delphi 2010 + Firebird 2.1 Fico no aguardo Rogério
begin
with dmAuxiliar do
begin
CdsCadEstado.edit;
CdsCadEstado.FieldByName('COD_USUARIO').AsInteger := unFuncao.icdUsuario; if dmConexao.Verifica_campos_em_branco(dsEstado) then
begin
CdsCadEstado.Post;
CdsCadEstado.applyupdates(-1);
dmConexao.comit;
end;
end;
end; //Método comit procedure TdmConexao.comit;
var Transacao : TTransactionDesc;
begin try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD; SqlConexao.StartTransaction(Transacao);
SqlConexao.Connected := True;
SqlConexao.Commit(Transacao); except
on Exc:Exception do
begin
ShowMessage('Erro no registro do banco: '+ Exc.Message);
SqlConexao.Rollback(Transacao);
end;
end; end; As vezes grava o registro e as vezes nao grava Já tirei os fields do ClientDataset e do sqlserver e adicionei novamente, mas nao funcionou... Como COD_USUARIO é chave estrangeira entao na propriedade providerflags desabilitei as proprieadades pfinupdate, pfinupwhere colocando para falso Estou usando a conexao dbxexpress e o Delphi 2010 + Firebird 2.1 Fico no aguardo Rogério
GOSTEI 0
Marco Salles
05/08/2010
Utilize o evento onEnconcileError para ver a mensagem de erro
Atraves dela fica mais fácil a solução
GOSTEI 0
Rogerio Santos
05/08/2010
Olá
Quanto àquele código para obter a versão do programa que vc mostrou testei aqui e deu certinho, obrigado..
Quanto ao problema da gravaçao de registro, tirei os fielsd do sqldataset como do clientdataset, adicionei outra vez e deu certo,.... Mas nao sei exatamente o que era.
Mas valeu, obrigado pela ajuda
Rogério
GOSTEI 0
Marco Salles
05/08/2010
Olá
Quanto àquele código para obter a versão do programa que vc mostrou testei aqui e deu certinho, obrigado..
Quanto ao problema da gravaçao de registro, tirei os fielsd do sqldataset como do clientdataset, adicionei outra vez e deu certo,.... Mas nao sei exatamente o que era.
Mas valeu, obrigado pela ajuda
Rogério
Provavelmente era configuração dos Providres Flags .. Tinha que mostrar a mensagem do erro do evento para
maiores detalhes
Dê a Cezar o que é de Cezar o Codigo certinho da versão é do Socran
GOSTEI 0