15 10 2015
Instalando o SQL Server junto com a aplicação
Finalmente, depois de meses desenvolvendo o seu aplicativo, você acabou o projeto. Você já testou todos os cenários que você conseguiu imaginar e o resultado foi positivo: tudo está funcionando perfeitamente. Pequeno detalhe: no seu computador. É nessa etapa que começa uma nova batalha: distribuir a sua aplicação.
Uns tempos atrás eu escrevi um artigo sobre instaladores para aplicativos .NET, onde eu abordo três opções de instaladores para aplicativos criados com o .NET Framework. Porém, e se a sua aplicação utilizar um banco de dados SQL Server e você quiser instalá-lo com a aplicação? Bom, se essa é a sua necessidade, você veio ao lugar certo. Hoje eu vou mostrar para você como ajustar a sua aplicação para que ela crie um banco de dados padrão para a sua aplicação na sua primeira execução. Depois, vou mostrar também como utilizar um script ninja do InnoSetup que instala o SQL Server Express junto com a sua aplicação.
A aplicação de exemplo
Para demonstrar a instalação e configuração do SQL Server junto com a aplicação, a primeira coisa que temos que fazer é criar uma aplicação que utilize o SQL Server. Dessa forma, vamos construir uma aplicação Windows Forms com um DataGridView mostrando as linhas de uma tabela de um banco de dados SQL Server. É importante salientar que a aplicação poderia ser de qualquer outro tipo (por exemplo, WPF ou Console Application). Só escolhi Windows Forms porque fica mais fácil de explicar.
Dito isso, crie um novo projeto do tipo Windows Forms Application e ajuste o formulário de forma que ele fique parecido com a imagem abaixo:
Note que a interface é extremamente simples: um botão (visualizarDadosButton) e um DataGridView (dadosDataGridView). No clique do botão, vamos carregar as informações de uma tabela do banco de dados “ExemploInstalador“, instância “SQLEXPRESS“:
private void visualizarDadosButton_Click(object sender, EventArgs e) { try { using (var conn = new System.Data.SqlClient.SqlConnection(@"Server=.\SQLEXPRESS;Database=ExemploInstalador;Trusted_Connection=True;")) { conn.Open(); using (var comm = conn.CreateCommand()) { comm.CommandText = "SELECT * FROM ExemploTabela"; using (var reader = comm.ExecuteReader()) { var dataTable = new System.Data.DataTable(); dataTable.Load(reader); dadosDataGridView.DataSource = dataTable; } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Atenção: eu poderia (ou deveria) ter armazenado a string de conexão em um arquivo de configuração. Só fiz dessa forma para simplificar o exemplo e focar no que realmente interessa (o acesso ao banco de dados e criação do banco caso ainda não exista). Além disso, ao invés de utilizar ADO.NET puro, eu poderia ter utilizado algum ORM. O fato é: esses detalhes não fazem a mínima diferença para a essência desse artigo, portanto, resolvi utilizar a maneira mais simples possível para que todo mundo consiga acompanhar.
Se você, de fato, tiver uma instância chamada “SQLEXPRESS“, com um banco de dados chamado “ExemploInstalador” que tenha uma tabela chamada “ExemploTabela“, a aplicação se comportará dessa forma ao clicarmos no botão:
Porém, se você não tiver essa instância ou esse banco de dados ou essa tabela, a aplicação obviamente não funcionará.
O banco de dados de exemplo
O banco de dados que eu utilizei nesse exemplo é absurdamente simples: ele contém somente uma tabela, chamada “ExemploTabela“. Para conseguirmos fazer o processo automático de criação do banco de dados, a ideia que eu tive foi gerar um backup com o banco de dados “padrão” para servir de template. Quando o aplicativo for executado, verificaremos se o banco de dados ainda não existe e restauraremos esse backup caso necessário.
Obviamente você pode utilizar o seu próprio banco de dados, mas, se você quiser testar exatamente esse exemplo, crie uma nova database no seu SQL Server e dê o nome de “ExemploInstalador“. Nessa nova database, execute o seguinte script para criar a tabela “ExemploTabela“:
CREATE TABLE ExemploTabela ( ID INT IDENTITY(1,1) NOT NULL, Descricao VARCHAR(100) NOT NULL, CONSTRAINT PK_ExemploTabela PRIMARY KEY (ID ASC) )
Feito isso, crie um backup completo desse banco de dados, dando o nome de “DBTemplate.bak” ao arquivo de backup. Copie o arquivo de backup para a pasta do seu projeto e adicione-o ao projeto utilizando a opção “Add” => “Existing Item” no Visual Studio:
O próximo passo é alterar esse arquivo de backup no Visual Studio de forma que ele sempre seja copiado para o diretório de compilação. Para isso, vá até o Solution Explorer, clique no arquivo de backup e, na janela de propriedades, altere a opção “Copy to Output Directory” para “Copy always“:
Nota: é importante que você gere o arquivo de backup com uma versão idêntica (ou inferior) do SQL Server que deverá ser instalado no computador cliente. Para esse exemplo, eu gerei o arquivo de backup com uma instância do SQL Server 2008 R2. Caso você queira, você pode fazer o download do meu arquivo de backup aqui (clique com o botão direito escolha a opção “Salvar como”).
Detectando se o banco de dados já existe
Até aqui, tudo muito simples, não é mesmo? Temos uma aplicação que tem um grid que lista as linhas da tabela “ExemploTabela” ao clicarmos em um botão. Já vimos como criar o banco de dados e fizemos um backup que servirá de template caso a database “ExemploInstalador” ainda não exista no SQL Server do usuário. Estamos levando em conta que o instalador irá fazer a instalação automática do SQL Server (veremos como fazer isso com o InnoSetup na seção final deste artigo). Porém, como é que podemos fazer essa checagem se o banco de dados já existe ou não? Simples! É só fazer uma query utilizando a consulta “SYS.DATABASES“, procurando pelo banco de dados chamado “ExemploInstalador“:
SELECT 1 FROM SYS.DATABASES WHERE NAME LIKE 'ExemploInstalador'
Se essa sentença retornar “1“, quer dizer que o banco já existe. Se ela retornar nulo, quer dizer que o banco ainda não existe. Dessa forma, podemos criar um método na nossa aplicação que faça essa checagem e retorne verdadeiro caso o banco de dados exista ou falso case o banco de dados não exista:
private bool VerificaSeBancoJaExiste() { bool retorno = false; try { using (var conn = new System.Data.SqlClient.SqlConnection(@"Server=.\SQLEXPRESS;Database=master;Trusted_Connection=True;")) { conn.Open(); using (var comm = conn.CreateCommand()) { comm.CommandText = "SELECT 1 FROM SYS.DATABASES WHERE NAME LIKE 'ExemploInstalador'"; var valor = comm.ExecuteScalar(); if (valor != null && valor != DBNull.Value && Convert.ToInt32(valor).Equals(1)) { retorno = true; } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } return retorno; }
Restaurando o template caso o ainda banco não exista
Agora que já temos um método que verifica se o banco de dados existe ou não, vamos criar o método que restaura o template caso o banco de dados não exista. Porém, antes de fazermos isso, temos que copiar o arquivo de backup que geramos anteriormente (“DBTemplate.bak“) para o diretório de backup do SQL Server. E como descobrimos qual é o diretório de backup do SQL Server? Utilizando SMO (SQL Server Management Objects)! Se você não sabe o que é SMO, dê uma olhada no meu artigo sobre criação e restauração de backups do SQL Server através do C#, onde eu utilizo o SMO para realizar essa tarefa.
Primeiramente, adicione as referências às dlls do SMO:
– Microsoft.SqlServer.ConnectionInfo
– Microsoft.SqlServer.Management.Sdk.Sfc
– Microsoft.SqlServer.Smo
– Microsoft.SqlServer.SmoExtended
Você encontra essas referências na seção “Extensions” da tela “Reference Manager“:
Feito isso, vamos adicionar o método que descobrirá e retornará os diretórios de backup, de dados e de log da instância do SQL Server:
private void DescobrirDiretoriosPadrao(out string diretorioDados, out string diretorioLog, out string diretorioBackup) { using (var connection = new System.Data.SqlClient.SqlConnection(@"Server=.\SQLEXPRESS;Database=master;Trusted_Connection=True;")) { var serverConnection = new Microsoft.SqlServer.Management.Common.ServerConnection(connection); var server = new Microsoft.SqlServer.Management.Smo.Server(serverConnection); diretorioDados = !string.IsNullOrWhiteSpace(server.Settings.DefaultFile) ? server.Settings.DefaultFile : (!string.IsNullOrWhiteSpace(server.DefaultFile) ? server.DefaultFile : server.MasterDBPath); diretorioLog = !string.IsNullOrWhiteSpace(server.Settings.DefaultLog) ? server.Settings.DefaultLog : (!string.IsNullOrWhiteSpace(server.DefaultLog) ? server.DefaultLog : server.MasterDBLogPath); diretorioBackup = !string.IsNullOrWhiteSpace(server.Settings.BackupDirectory) ? server.Settings.BackupDirectory : server.BackupDirectory; } }
Note que é muito fácil descobrirmos esses diretórios com o SMO: eles estarão definidos na propriedade server.Settings.DefaultFile ou server.DefaultFile ou server.MasterDBPath (ou Default”Log” para o diretório de log e BackupDirectory para o diretório de backup).
Com os diretórios de dados, log e backup em mãos, podemos simplesmente copiar o arquivo “DBTemplate.bak” para o diretório de backup e executarmos um comando “RESTORE DATABASE” para criar o banco de dados utilizando o template:
private void RestaurarDBPadrao() { try { string diretorioDados, diretorioLog, diretorioBackup; DescobrirDiretoriosPadrao(out diretorioDados, out diretorioLog, out diretorioBackup); using (var conn = new System.Data.SqlClient.SqlConnection(@"Server=.\SQLEXPRESS;Database=master;Trusted_Connection=True;")) { conn.Open(); using (var comm = conn.CreateCommand()) { var caminhoCompletoBackup = System.IO.Path.Combine(diretorioBackup, "DBTemplate.bak"); var caminhoCompletoDados = System.IO.Path.Combine(diretorioDados, "ExemploInstalador.mdf"); var caminhoCompletoLog = System.IO.Path.Combine(diretorioLog, "ExemploInstalador_Log.ldf"); System.IO.File.Copy("DBTemplate.bak", caminhoCompletoBackup, true); comm.CommandText = @"RESTORE DATABASE ExemploInstalador " + @"FROM DISK = N'" + caminhoCompletoBackup + "' " + @"WITH FILE = 1, " + @"MOVE N'ExemploInstalador' TO N'" + caminhoCompletoDados + "', " + @"MOVE N'ExemploInstalador_LOG' TO N'" + caminhoCompletoLog + "', " + @"NOUNLOAD, REPLACE, STATS = 10"; comm.ExecuteNonQuery(); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Finalmente, vamos criar um método que faz a checagem se o banco de dados existe ou não e, caso ele não exista, nós chamamos o método que faz a criação do banco de dados:
public FormMain() { InitializeComponent(); RestaurarDBPadraoCasoNaoExista(); } private void RestaurarDBPadraoCasoNaoExista() { try { var bancoExiste = VerificaSeBancoJaExiste(); if (!bancoExiste) { RestaurarDBPadrao(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
E com isso, o template do banco de dados será restaurado automaticamente caso o banco de dados “ExemploInstalador” não exista.
Uma única observação sobre esse código é que ele só funcionará caso seja rodado como administrador, uma vez que precisamos de acesso de escrita em pastas localizadas dentro do diretório “Arquivos de Programas” (que é onde as pastas do SQL Server normalmente ficam). Para que o Windows peça permissão de administrador automaticamente, adicione um arquivo de manifesto à sua aplicação e altere o “level” da tag “requestedExecutionLevel” para “requireAdministrator“:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />;
Nota: você pode adaptar esse exemplo para que o método verifique a existência do seu próprio banco de dados (e não o banco de dados “ExemploInstalador”).
Nota 2: para simplificar, implementei todo o código no formulário. Porém, isso não é o mais indicado. Separe esse código em uma classe e utilize essa classe para fazer a verificação. De preferência, separe esse código da verificação em um outro executável e configure o instalador a executá-lo após a instalação. Como esse código precisa de acesso à pasta “Arquivos de Programas” (onde os diretórios do SQL Server normalmente estão localizados por padrão), ele só funcionará caso seja executado como administrador.
Instalando o SQL Server junto com a aplicação
Agora que você já viu como criar uma aplicação que restaura automaticamente o banco de dados caso ele ainda não exista, vamos aprender como gerar um instalador que faça a instalação do SQL Server Express de forma automática e silenciosa. Para isso, eu escolhi o gerador de instaladores InnoSetup.
Procurando na Internet, encontrei este artigo no CodeProject: Modular InnoSetup Dependency Installer. Parecia exatamente o que eu estava procurando. Com esse esquema, conseguimos ativar e desativar dependências relacionadas ao nosso aplicativo e, para cada dependência ativada, uma checagem é feita para ver se ela já está instalada ou não. Caso ainda não esteja instalada, o download é automaticamente realizado e a dependência é instalada. Uma das dependências que ele suporta é o SQL Server 2008 R2 Express. Mágico, não? Isso é, se funcionasse.
Na minha primeira tentativa com esse script, a instalação do SQL Server falhava. Pesquisando bastante e fazendo vários testes, consegui encontrar o problema presente nesse script. Consertei esse problema e, finalmente, tenho uma versão do instalador funcionando perfeitamente. Você quer aprender? Então, vamos lá!
Primeiramente, instale o InnoSetup (se você tiver alguma dúvida nesse processo, dê uma olhada no meu artigo sobre instaladores para aplicativos .NET). Depois, faça o download dos scripts do CodeProject ou, se preferir, baixe-os diretamente através deste link. Descompacte o conteúdo deste pacote em uma pasta no seu sistema de arquivos e abra o arquivo “setup.iss” no InnoSetup.
Edit: o leitor Manoel Américo Zancheta estava com um problema relacionado à detecção da plataforma (32/64 bits) e ele conseguiu resolver esse problema fazendo algumas alterações no script. Se você estiver enfrentando esse problema também, ele gentilmente me enviou o script alterado, que você pode baixar aqui.
Logo no começo do script, note que você encontra várias linhas com “#define use_xxx“. Cada uma dessas linhas representa uma dependência que será checada durante a instalação:
No nosso caso, vamos deixar somente as dependências do .NET Framework 4 (use_dotnetfx40) e do SQL Server 2008 R2 Express (use_sql2008express) habilitadas. Comente todas as outras dependências utilizando um ponto-e-vírgula no começo da linha:
;comment out product defines to disable installing them ;#define use_iis ;#define use_kb835732 ;#define use_msi20 ;#define use_msi31 ;#define use_msi45 ;#define use_ie6 ;#define use_dotnetfx11 ;#define use_dotnetfx11lp ;#define use_dotnetfx20 ;#define use_dotnetfx20lp ;#define use_dotnetfx35 ;#define use_dotnetfx35lp #define use_dotnetfx40 ;#define use_wic ;#define use_dotnetfx46 ;#define use_msiproduct ;#define use_vc2005 ;#define use_vc2008 ;#define use_vc2010 ;#define use_vc2012 ;#define use_vc2013 ;#define use_vc2015 ;#define use_mdac28 ;#define use_jet4sp8 ;#define use_sqlcompact35sp2 ;#define use_sql2005express #define use_sql2008express
Feito isso, altere a definição de MyAppSetupName, MyAppVersion, AppCopyright, VersionInfoCompany, AppPublisher e UninstallDisplayIcon de forma que elas representem corretamente as propriedades do seu aplicativo. Por exemplo, eu alterei o nome da aplicação para “Exemplo Instalador“, versão “0.1” e nome da empresa “abc-dev“:
#define MyAppSetupName 'Exemplo Instalador' #define MyAppVersion '0.1' [Setup] AppName={#MyAppSetupName} AppVersion={#MyAppVersion} AppVerName={#MyAppSetupName} {#MyAppVersion} AppCopyright=Copyright © 2007-2015 abc-dev VersionInfoVersion={#MyAppVersion} VersionInfoCompany=abc-dev AppPublisher=abc-dev ;AppPublisherURL=http://... ;AppSupportURL=http://... ;AppUpdatesURL=http://... OutputBaseFilename={#MyAppSetupName}-{#MyAppVersion} DefaultGroupName={#MyAppSetupName} DefaultDirName={pf}\{#MyAppSetupName} UninstallDisplayIcon={app}\AppInstaladorDB.exe
Em seguida, precisamos configurar as tags “Files“, “Icons” e “Run“, de forma que elas apontem para o executável do nosso aplicativo. Porém, antes disso, precisamos compilar o nosso aplicativo e mover os arquivos necessários para dentro da pasta “src” do instalador:
Além do executável da aplicação, temos que copiar também o arquivo de template do banco de dados (DBTemplate.bak) e as dlls necessárias pelas classes do SMO (que eu listei anteriormente na seção “Restaurando o template caso o banco ainda não exista“). Você encontra a maioria das dlls do SMO dentro da pasta “C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\“. Somente uma delas (Microsoft.SqlServer.SqlClrProvider.dll) fica dentro do GAC. Veja neste link como conseguir copiar essa dll do GAC para outra pasta. Para facilitar a sua vida, eu compactei as dlls do SMO e estou disponibilizando para que você faça o download através deste link.
Uma vez copiados o executável (no meu caso o executável se chama “AppInstaladorDB.exe”), o template do banco e todas as dlls necessárias à aplicação, a sua pasta “src” deve ficar parecida com a screenshot abaixo:
Agora que já copiamos os arquivos para a pasta “src“, precisamos ajustar as tags “Files“, “Icons” e “Run” no arquivo “setup.iss” para que elas considerem esses itens:
[Files] Source: "src\AppInstaladorDB.exe"; DestDir: "{app}"; DestName: "AppInstaladorDB.exe"; Source: "src\DBTemplate.bak"; DestDir: "{app}"; DestName: "DBTemplate.bak"; Source: "src\Microsoft.SqlServer.ConnectionInfo.dll"; DestDir: "{app}"; DestName: "Microsoft.SqlServer.ConnectionInfo.dll"; Source: "src\Microsoft.SqlServer.Management.Sdk.Sfc.dll"; DestDir: "{app}"; DestName: "Microsoft.SqlServer.Management.Sdk.Sfc.dll"; Source: "src\Microsoft.SqlServer.Smo.dll"; DestDir: "{app}"; DestName: "Microsoft.SqlServer.Smo.dll"; Source: "src\Microsoft.SqlServer.SqlClrProvider.dll"; DestDir: "{app}"; DestName: "Microsoft.SqlServer.SqlClrProvider.dll"; Source: "src\Microsoft.SqlServer.SqlEnum.dll"; DestDir: "{app}"; DestName: "Microsoft.SqlServer.SqlEnum.dll"; [Icons] Name: "{group}\{#MyAppSetupName}"; Filename: "{app}\AppInstaladorDB.exe"; Name: "{group}\{cm:UninstallProgram,{#MyAppSetupName}}"; Filename: "{uninstallexe}" Name: "{commondesktop}\{#MyAppSetupName}"; Filename: "{app}\AppInstaladorDB.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppSetupName}"; Filename: "{app}\AppInstaladorDB.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\AppInstaladorDB.exe"; Description: "{cm:LaunchProgram,{#MyAppSetupName}}"; Flags: nowait postinstall skipifsilent
Finalmente, lembra que eu falei que o script para instalar o SQL Server Express não estava funcionando? Pois bem, precisamos consertá-lo! Para isso, abra o arquivo “sql2008express.iss” que se encontra dentro da pasta “scripts/products” do instalador e altere a linha da instalação do SQL Server (originalmente linha 33 do arquivo “sql2008express.iss“). Aqui vai a linha original do exemplo:
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=All /INSTANCENAME=SQLEXPRESS /SQLSVCACCOUNT="NT AUTHORITY\Network Service" /SQLSYSADMINACCOUNTS="builtin\administrators"',
Você precisa alterá-la para que ela fique assim:
'/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools /INSTANCENAME=SQLEXPRESS /SQLSVCACCOUNT="NT AUTHORITY\Network Service" /SQLSYSADMINACCOUNTS="builtin\administrators"',
Veja que alteramos de “/FEATURES=All” para “/FEATURES=SQL,Tools” (uma vez que esse parâmetro foi alterado no SQL Server 2008 R2 e não aceita mais o termo “All“).
Nota: a instalação do SQL Server (tanto manual como automática via linha de comando) não funciona se o nome do usuário for exatamente igual ao nome do computador. Se algum erro acontecer durante a instalação do SQL Server com esse instalador, atente-se para esse cenário problemático!
Tendo feitas essas alterações, salve todos os arquivos e compile o projeto de setup (no InnoSetup, menu “Build => Compile“). O instalador será criado dentro da pasta “bin“:
Ao executar esse instalador em um sistema que ainda não tenha o SQL Server 2008 R2 Express instalado, o instalador fará o download automaticamente e instalará para você! Fantástico, não?
Concluindo
A criação de instaladores é muitas vezes deixada de lado e feita “de qualquer jeito” pelos desenvolvedores. Na minha opinião, isso é um tremendo erro. A primeira impressão que o usuário tem com a sua aplicação é a experiência de instalação. Se a sua aplicação utiliza o banco de dados SQL Server, por favor, nem pense em fazer com que o usuário tenha que instalá-lo manualmente!
O exemplo apresentado nesse artigo mostra como fazer a instalação automática do SQL Server Express durante a instalação do seu aplicativo com o InnoSetup. Além disso, quando o aplicativo é executado, fazemos uma checagem para ver se o banco ainda não existe. Caso ele ainda não exista, nós criamos esse banco utilizando um template salvo em forma de backup.
Acredito que esse exemplo fará com que a experiência de instalação dos seus aplicativos melhore exponencialmente. Fico no aguardo para que você experimente essa sistemática no seu próximo instalador e me conte nos comentários como foi a experiência.
Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.
Até a próxima!
André Lima
Report Viewer: formatações diferentes dentro do mesmo TextBox Periscope replay: Qual é melhor – Crystal Reports ou Report Viewer?
[…] Edit: publiquei um novo artigo que mostra como desenvolver um instalador que distribui o SQL Server Express junto com a aplicação utilizando InnoSetup. Além disso, a aplicação também cria automaticamente o banco de dados caso ele não exista! Confira aqui! […]
Olá, gostei muito do seu tutorial, eu segui passo a passo porem usando linguagem vb.net, estou terminando meu curso técnico esse ano e gostaria de saber muito como instala o sql junto ao projeto fiz tudo certo, mas tem uma parte que ele da erro.
An error occurred while installing the dependencies. please restart the computer and run the setup again or install the following dependencies manually: sql server 2008 express r2
Se possível teria como me mostrar a solução, pra esse erro nao acontecer.
Desde já, agradeço.
Olá Ruan, obrigado pelo comentário!
Pela mensagem de erro, aconteceu algum problema durante a instalacao do SQL Server 2008 R2.. Dito isso, a sugestao que eu dou para você é que você dê uma olhada no arquivo de log da instalacao do SQL Server para tentar entender o que causou esse erro.. Para mais informacoes de como ler o arquivo de log de instalacao do SQL Server, veja este link:
Exibir e ler arquivos de log da Instalação do SQL Server
Abraco!
André Lima
Cara, tô me borrando de tanto rir aqui!!!
Por que não achei essa sua dica há uns 2 meses atrás?!?!?!
Acredita que criei uma classe só pra construir o banco de dados?
Fiz tudo no braço!!!!! Esfolei os dedos de tanto digitar CREATE TABLE…..kkkkkk!!
PARABÉNS!!!
Pensou rápido e com eficiência.
Obrigado pela dica!!
Fala Nelson, obrigado pelo comentário!
Poxa, isso já aconteceu comigo também em outras situações.. A gente passa um tempo absurdo implementando a solução de um jeito e, depois de um tempo, topamos com um artigo que mostra a solução 10 vezes mais fácil.. Vida de programador é assim mesmo, hehehe..
Pelo menos da próxima vez você já sabe um jeito mais fácil de resolver esse problema.. :)
Abraço!
André Lima
Ola meu caro,
Muito bom post, mas estou com problemas nessa linha desse metodo RestaurarDBPadrao(), só alterei as variaveis para passar como parametro.
System.IO.File.Copy(nomeArquivoBackup+”.bak”, caminhoCompletoBackup, true);
Comentei ela e não finaliza o processo de restaurar porque esta dando problema de acesso na pasta, ja criei o Manifesto no projeto alterei conforme o post e nada.
Poderia me ajudar?
Olá Everton, tudo tranquilo?
Será que você poderia postar exatamente como ficou o seu método? Pode ser que você tenha deixado passar alguma coisa na hora que você substituiu para passar por parâmetro..
Abraço!
André Lima
Bom dia , vi no seu script do inno setup que relaciona o framework e o sql_server2008 , teria como referenciar o banco de dados local para a instalação ? Pois eu uso o sqlbdlocal.
Obrigado
Olá Jorge,
Obrigado pelo comentário.. A princípio, você teria que implementar a referência do MSI do LocalDb no script do InnoSetup.. Não deve ser difícil, mas, também não é tão simples assim.. Vou colocar na minha lista de assuntos para abordar no futuro.. Assim que eu conseguir escrever sobre isso eu te aviso aqui..
Abraço!
André Lima
Gostaria de um post explicando como criar o executável (vb.net) com o Bd Access, ou seja, que “carregasse” junto ao executável do programa (vb.net) o BD Access. Como faria para que o endereço que faz a conexão do BD com o programa deveria ser? No código fica especificado para tal local e tal pasta (mas que só existem no meu pc) como faria para que pudesse ser instalado em outras máquinas???
Olá Wellington!
A maneira mais fácil de fazer isso é considerar que o arquivo mdb estará dentro do mesmo diretório da sua aplicação.. Aí, na hora de construir a string de conexão, você pega o caminho da aplicação e utiliza esse caminho + o nome do arquivo..
Para pegar o caminho onde a aplicação está instalada, existem várias maneiras.. Neste link você encontra algumas delas:
Best way to get application folder path
Exemplo:
Abraço!
André Lima
Boa Tarde Andre, você teria esse arquivo que você montou para me mandar de exemplo?
Olá Gabriel!
O projeto de exemplo (do Visual Studio) você pode baixar aqui.. O projeto do InnoSetup eu infelizmente não tenho mais salvo aqui no meu computador.. Mas, é tranquilo.. É só seguir o passo a passo apresentado no artigo que é para dar certo.. Qualquer coisa se não funcionar me avisa que eu te ajudo..
Abraço!
André Lima
Boa Tarde André,
Parabéns pelo post ficou Fantástico.
Uma pergunta, essa instalação contempla todos produtos do SQL Express, exemplo Reporting Services.
Tenho uma aplicação que utiliza SQL Espress + Reporting Services (Server).
Abraços
Alex
Olá Alexander, obrigado pelo comentário!
Esse script utiliza o SQL Server Express sem o Reporting Services.. Para instalar o Reporting Services também, você precisaria substituir nos scripts a URL para baixar o SQL Server Express with Advanced Services.. Dentro da pasta scripts\products, você encontra o arquivo referente à versão do SQL Server que você quer utilizar.. Abra esse script e altere a URL para download do arquivo de forma que ela aponte para o download do SQL Server Express with Advanced Services.. Dessa forma o Reporting Services será instalado também..
Se você não tiver entendido ou ficar com alguma dúvida nesse processo, me avisa que eu tento ajudar de alguma outra maneira..
Abraço!
André Lima
André, boa noite.
Obrigado pelo retorno. Ficou claro sim, tentarei executar.
Abraços
Alexander
Beleza Alexander! Qualquer coisa é só entrar em contato novamente..
Abraço!
André Lima
Uma luz no fim do túnel! Excelente artigo. A dúvida que resta é: Da pra fazer o mesmo com o MySQL? E dando pra fazer, como fazer?
Olá Grégory, obrigado pelo comentário!
Em teoria, dá para instalar o MySQL da mesma maneira.. Você só teria que ajustar o script para, ao invés de instalar o SQL Server, ele teria que instalar o MySQL através da linha de comando em modo silencioso.. A linha de comando para instalar o MySQL em modo silencioso você encontra neste link:
Automating MySQL Installation on Microsoft Windows Using the MSI Package
Depois volta aqui e conta pra gente se você conseguiu adaptar para o MySQL, OK?
Abraço!
André Lima
Muito bom o artigo André, parabéns. Porém fiquei com a seguinte dúvida. Na minha aplicação utilizo um mdf de uso somente local, preciso distribuir/instalar o sql server? Para mdf somente local quais arquivos tenho que distribuir com a minha aplicação?
Olá Ailton, obrigado pelo comentário!
Nesse caso, como você tem que atachar o banco mdf em algum lugar, você precisaria ou do SQL Server Express ou do LocalDb (que é tipo um SQL Server Express bem mais simples de instalar, mas, que só funciona localmente).. Baixe o LocalDb neste link (o título fala “SQL Server Express”, mas, quando você clica em download você tem a opção para LocalDb):
https://www.microsoft.com/en-us/download/details.aspx?id=42299
Abraço!
André Lima
Boa noite amigo,Segui todo o tutorial ,consegui instalar a aplicação na maquina do cliente junto com o sql,mas quando executo a aplicação e ele cai no if para restaurar o banco de dados ele da o seguinte erro “Não foi possivel carregar o arquivo ou assembly ‘Microsoft.SqlServer.Connection.Info Version=11.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91’
Acredito eu que esta faltando alguma dll do SMO na maquina do cliente, mas como se instalou o Sql server Express 2008 perfeitamente ?
Atenciosamente
Danilo.
Olá Danilo!
Estranho hein.. O que pode ter acontecido é você ter utilizado uma versão do SQL Server na hora de desenvolver e outra versão do SQL Server no deployment.. Qual versão do SQL Server você tem instalado na sua máquina de desenvolvimento? Se não me engano, a versão 11 do SMO corresponde à versão do SQL Server 2012.. Se no computador cliente está sendo instalado o SQL Server 2008, pode ser que a versão do SMO dele seja inferior à 11, entendeu?
Será que não pode ter ocorrido essa confusão de versões?
Na pior das hipóteses, se você realmente quiser utilizar a versão 11 do SMO, você pode instalar no computador cliente somente o SQLSysClrTypes.msi e SharedManagementObjects.msi correspondente à versão do SQL Server 2012 (disponível nesta página – expanda o nó “Install Instructions” e procure pelos nomes dos arquivos msi)..
Abraço!
André Lima
Olá Andre,Muito obrigado pelo ajuda consegui resolver esse problema referenciando as dll na versão 10.0 na minha aplicação,porem estou com outro problema ,ao tentar restaurar o template ele retorna a seguinte mensagem
“The media family on device ‘c:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\DBTemplate.bak’ is
incorrectly formed. SQL Server cannot process this media family.
RESTORE DATABASE is terminating abnormally.”
Observaçãp : o arquivo de backup foi criado no SQL Server 2008
teria solução para este problema ?
Atenciosamente
Danilo.
Olá Danilo!
Esse erro acontece normalmente em duas situações: 1) arquivo .bak corrompido; 2) arquivo .bak gerado em uma versão superior do SQL Server..
Dessa forma, no seu caso, eu confirmaria essas duas coisas.. Primeiro, ter certeza absoluta que o backup foi gerado com uma versão menor ou igual à que você está instalando (atenção SQL Server 2008 e SQL Server 2008 “R2” são duas versões diferentes e o .bak da R2 não restaura na versão “não R2”).. Segundo, se possível, tente restaurar esse mesmo arquivo .bak utilizando o SQL Server Management Studio no computador cliente (somente para fins de teste e elimnar a possibilidade do arquivo de backup estar corrompido)..
Abraço!
André Lima
Bom dia!
Segui seu artigo e consegui gerar o meu pacote de instalação sem nenhum problema. Ficou perfeito!
Parabéns! Que você seja recompensado por ajudar tanta gente!
Olá Leonardo!
Muito obrigado pelo comentário! Fico feliz que as informações contidas neste artigo tenham te ajudado a construir o seu instalador!
Um grande abraço!
André Lima
Saudações e cumprimentos André. Agradeço-lhe enormemente pelo tutorial. Muito bem detalhado, elaborado, e explicação do modo mais simples possível. Percebi que esses fatores não se aplicam apenas neste, mas em todos os tutoriais do teu blog. Deve ajudar muitas pessoas. Agradeço por disponibilizar seu tempo nesse tipo de atividade.
Eu quero lhe perguntar duas coisas: dentre as versões do SQL Server 2008 R2 podem ocorrer erros de compatibilidade entre os Service Packs; e quando for instalar o SQL Server na máquina do desenvolvedor devo optar por uma autenticação do windows, do SQL Server ou tanto faz? Pois presumo que isso pode afetar o modo como a string de conexão é formada.
Olá Ariel! Primeiramente, muito obrigado pelos elogios!
Quanto às suas dúvidas, a primeira questão sobre os Service Packs, eu não entendi muito bem.. O que você quer dizer? O recomendado é você sempre instalar a versão do SQL Server que já venha com o último Service Pack embutido.. Seguida essa orientação, imagino que você não deva ter problemas de incompatibilidade, principalmente porque os Service Packs são cumulativos, ou seja, uma vez instalado o Service Pack mais novo, ele já conterá todas as correções dos Service Packs anteriores..
E quanto à instalação do SQL Server na máquina de desenvolvedor, no final das contas tanto faz.. Isso afeta a string de conexão, como você mesmo disse.. Porém, é só você ajustar a string de conexão adequadamente (dependendo se a autenticação será com usuário e senha ou windows authentication) que tudo deve funcionar normalmente..
Um grande abraço!
André Lima
André! Parabéns pelo artigo. Consegui instalar o SQL SERVER EXPRESS mas não estou conseguindo restaurar o banco de dados. Estou com o mesmo problema do Danilo no comentário acima. Para verificar se estava com a mesma versão eu rodei o script do banco de dados na máquina do cliente e restaurei para ter certeza que não estava corrompido. E também fiz um executável a parte para a restauração para ver onde estava errando, mesmo assim não consegui. Tem alguma forma de copiar o backup de forma que não precise status de administrador para acessar?
Olá Celio, obrigado pelo comentário!
Muito estranho.. Como eu falei para o Danilo, essa mensagem de erro só é retornada pelo SQL Server quando o arquivo de backup está corrompido ou quando a versão do SQL Server que foi utilizada para gerá-lo é maior do que a versão do SQL Server onde você está tentando restaurar.. Se fosse problema com permissão, a mensagem de erro seria diferente..
Qual é a versão do SQL Server que você está utilizando nesse processo? Para testar o restore manual, você utilizou o arquivo .bak que foi criado pelo instalador ou você copiou manualmente o arquivo da sua máquina? Pode ser que o arquivo .bak tenha sido corrompido na hora que o InnoSetup gerou o pacote de instalação.. Por isso que seria interessante você testar exatamente com o arquivo que foi gerado pelo instalador no momento da instalação (mantendo até no mesmo diretório para confirmar se não é problema de acesso àquele diretório)..
Abraço!
André Lima
André! Obrigado pelo retorno, realmente eu fiz este comentário. Fiz muitas tentativas para acertar o código do meu instalador. E acessei vários artigos sobre instaladores. A situação atual é esta abaixo.
Já consegui avançar alguns passos e só estou precisando instalar o banco de dados. Eu criei o banco de dados via script e fiz um backup e copiei para o projeto e exclui o banco e restaurei para ver se estava corrompido. Deixei o SQL SERVER EXPRESS instalado para o instalador só restaurar o banco e deu tudo certo a primeira vez, então eu removi o SQL SERVER EXPRESS e tentei instalar novamente e começou aparecer este erro abaixo.
André! Seu artigo era o que eu estava precisando. Consegui instalar tudo certinho, porém quando vou restaurar o BANCO DE DADOS ocorre este erro que parece que está com o caminho do backup duplicado.
Cannot open backup device’ c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\ c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\nomeArquivo.bak.
Operating system error 123(A sintaxe do nome do arquivo, pasta ou nome do volume está incorreta)
Restore database is terminating abnormally.
Alguém mais já passou por isto? OBS.: Eu consegui instalar corretamente uma vez, mas desinstalei e tentei novamente e começou a apresentar este erro.
Olá Celio!
Você está tentando restaurar o banco pelo SQL Server Management Studio ou pela aplicação utilizando o código que eu indiquei no artigo? Se for utilizando o código que eu indiquei no artigo, você alterou alguma coisa ou utilizou o exemplo 100% como no artigo? Se você alterou alguma coisa, por favor, posta aqui pra gente o código onde você está executando o restore do banco de dados (no caso do artigo, é o método “RestaurarDBPadrao”).. Pode ser que tenha algum detalhezinho errado..
Abraço!
André Lima
André! Só restaurei com o SQL Management Studio para ver se o backup estava corrompido, eu debuguei o código abaixo e o caminho para restaurar está correto e também a instalação deu certo em algumas vezes, mas gostaria de testar várias vezes para que não ocorra erros quando o usuário for instalar. Este código para fazer a instalação do SQL SERVER EXPRESS com o innosetup era o que estava procurando faz muito tempo, só estava usando o ACCESS porque não conseguia instalar o SQL SERVER EXPRESS.
private void RestaurarDBPadrao()
{
try
{
string diretorioDados, diretorioLog, diretorioBackup;
DescobrirDiretoriosPadrao(out diretorioDados, out diretorioLog, out diretorioBackup);
using (var conn = new System.Data.SqlClient.SqlConnection(@”Server=.\SQLEXPRESS;Database=master;Trusted_Connection=True;”))
{
conn.Open();
using (var comm = conn.CreateCommand())
{
var caminhoCompletoBackup = System.IO.Path.Combine(diretorioBackup, “JETSYSTEM_FX.bak”);
var caminhoCompletoDados = System.IO.Path.Combine(diretorioDados, “JETSYSTEM_FX.mdf”);
var caminhoCompletoLog = System.IO.Path.Combine(diretorioLog, “JETSYSTEM_FX_LOG.ldf”);
System.IO.File.Copy(“JETSYSTEM_FX.bak”, caminhoCompletoBackup, true);
comm.CommandText =
@”RESTORE DATABASE JETSYSTEM_FX ” +
@”FROM DISK = N’ ” + caminhoCompletoBackup + “‘ ” +
@”WITH FILE = 1, ” +
@”MOVE N’JETSYSTEM_FX’ TO N'” + caminhoCompletoDados + “‘, ” +
@”MOVE N’JETSYSTEM_FX_LOG’ TO N'” + caminhoCompletoLog + “‘, ” +
@”NOUNLOAD, REPLACE, STATS = 10″;
comm.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, “Erro”, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Olá Celio!
Estranho.. Aparentemente o código está idêntico ao do artigo (tirando o nome do arquivo).. O que eu achei esquisito foi que na mensagem de erro que você me mandou no outro comentário, o nome do arquivo estava “nomeArquivo.bak”, porém, no seu código, você está utilizando “JETSYSTEM_FX.bak”.. Está certo isso?
Se você quiser colocar o instalador em algum lugar que eu possa baixar (por exemplo, no Dropbox ou OneDrive), eu poderia testar em uma máquina virtual “limpa” aqui para ver se funciona.. Se estiver tudo OK para você, me manda um e-mail com o link onde eu possa baixar.. Meu e-mail é: contato [arroba] andrealveslima [ponto] com [ponto] br..
Abraço!
André Lima
André! Muito obrigado pelo suporte e paciência que teve comigo. Não tinha tido sucesso na instalação, devido ao vício em ctrl c + ctrl v. Este tutorial me ajudou muito e deve ajudar muitas outros programadores. Parabéns!!!
Valeu Celio!
Fico feliz que finalmente conseguimos encontrar o problema do seu instalador! Só para deixar claro aqui para as outras pessoas, o problema estava em um espaço a mais no código do Celio, exatamente aqui:
Abraço!
André Lima
boa tarde celio.
Você poderia disponibilizar o instalador do SQL?
Abraço!
Olá André!
Excelente explicação… Eu preciso criar algo semelhante em minha aplicação, porém estou utilizando o MySQL Workbench para minha base de dados. Gostaria de saber se o procedimento é semelhante e, se é, como criar uma arquivo .bak da minha base de dados
Desde já, grato!
Olá Lucas, obrigado pelo comentário!
A ideia seria a mesma.. Para informações sobre como criar um backup no MySQL Workbench, veja esta thread no StackOverflow:
How to take MySQL database backup using MySQL Workbench?
Depois, com o backup em mãos, você pode utilizar a biblioteca MySqlBackup.NET para fazer o restora através da sua aplicação:
MySqlBackup.NET – MySQL Backup Solution for C#, VB.NET, ASP.NET
E quanto à instalação silenciosa do MySQL, você teria que adaptar as chamadas da linha de comando do SQL Server para utilizar as chamadas do MySQL, que você encontra aqui:
Automating MySQL Installation on Microsoft Windows Using the MSI Package
Eu tenho planos de escrever um artigo mostrando esse mesmo procedimento só que para o MySQL.. Entretanto, acho que só vou conseguir pesquisar e escrever sobre isso no ano que vem..
Abraço!
André Lima
André como vai? você tem previsão de quando vai conseguir fazer o instalador com mysql? Abraço.
Olá André!
Infelizmente não.. Você está precisando fazer um instalador com MySQL agora? Já tentou seguir a mesma ideia apresentada aqui nesse artigo onde eu mostro como fazer com SQL Server? Acredito que deva funcionar da mesma maneira (fazendo a instalação em modo silencioso durante a instalação da aplicação)..
Abraço!
André Lima
Muito bom seu post, implementei e vai me servir muito…
Só tenho uma dúvida, no caso esse script ele faz o download do Sql Server, teria como colocar o instalador do Sql Server junto da aplicação para assim instalar sem precisar de fazer download?
Olá Pablo, muito obrigado pelo comentário!
Eu nunca tentei utilizar essa funcionalidade, mas, de acordo com as informações do site onde eu baixei os scripts, se você criar uma pasta chamada “MyProgramDependencies” no mesmo nível de diretório onde o seu setup.exe está localizado e, dentro dessa pasta você colocar o instalador do SQL Server, ele deve detectar esse instalador e não vai precisar fazer o download.. O nome dessa pasta é configurável no arquivo products.iss..
Se você conseguir testar essa funcionalidade, depois volta aqui e conta pra gente se funcionou..
Abraço!
André Lima
Olá André.
Primeiramente gostaria de parabenizá-lo pelo excelente post.
Assim como o Ailton, também uso LocalDB e gostaria de saber como posso mudar o script ou implementar um novo script para LocalDB. Outra coisa, eu já tenho o arquivo jundo à minha aplicação, assim como o arquivo de backup do banco. Por isso, em vez de fazer o download gostaria de usar o que está na minha pasta junto com as dlls.
O .net framework, gostaria de mudar para o 4.5, pois vi que naqueles scripts tem o 4 ou 4.6.
Grato.
Olá Nailton, obrigado pelo comentário!
Como mencionei anteriormente em algum comentário acima, teoricamente você poderia baixar a instalação do LocalDb e ajustar o script para que ele faça a instalação silenciosa dele.. Não é tão difícil, mas não é tão simples assim.. Esse tema já está na minha lista, mas provavelmente só vou conseguir escrever algo sobre isso no próximo ano.. Se você conseguir ajustar o script antes disso, por favor, avisa aqui pra gente como você fez..
Quanto à instalação do LocalDb já estar junto com a aplicação, se você colocar o instalador na pasta “MyProgramDependencies”, o instalador deve detectar e vai utilizar esse arquivo ao invés de fazer o download novamente (veja a minha resposta para o comentário logo acima do seu)..
E, por fim, quanto ao .NET 4.5, você terá que criar um arquivo referente ao .NET Framework 4.5 na pasta “products” (copie o arquivo “dotnetfx46.iss” e renomeie para, por exemplo, “dotnetfx45.iss”), ajustando o conteúdo com a URL onde o .NET Framework 4.5 pode ser baixado.. Se você se basear nos arquivos referentes ao .NET 4 ou 4.6, você sem dúvida conseguirá montar o esquema para o .NET 4.5 também.. Vou colocar essa dúvida na minha lista e assim que possível eu dou uma pesquisada aqui.. Novamente, se você conseguir resolver antes, posta aqui o resultado, por favor..
Abraço!
André Lima
Olá!
A primeira vez que executei o instalador, o mesmo reconheceu que meu Windows é 64 bits, baixou o arquivo correto e deu erro pois tinha esquecido de alterar a linha do sql2008express.iss. Pois bem, fiz a alteração porém agora o instalador reconhece como 32 bits.
Tem alguma idéia do que possa ser?
Olá Manoel!
Que estranho hein.. Normalmente você não precisaria alterar nada nos scripts para que ele reconhecesse a arquitetura do processador e baixasse / instalasse a versão correta.. Pelo menos nos meus testes funcionou direitinho com 64 bits.. Você já tentou rodar o instalador em outro computador 64 bits para ver se o problema persiste?
Abraço!
André Lima
Não testei, pois nas outras máquinas já tenho SQL instalado e em uso, fiz em uma específica que esta “limpa”. Vou fazer mais testes aqui, obrigado por responder à minha dúvida! Abraço!
Beleza Manoel.. Depois conta pra gente os resultados dos seus testes..
Abraço!
André Lima
Olá.
Consegui, mexendo um pouco no sql2008express.iss, fazer com que o instalador diferenciasse 32 e 64 bits. Agora o problema está nas dependências da instalação, falta algo além de habilitar #define use_dotnetfx40 pelo jeito.
begin
// Check if the full version fo the SQL Server 2008 R2 is installed
RegQueryStringValue(HKLM, ‘SOFTWARE\Microsoft\Microsoft SQL Server\SQLSERVER\MSSQLServer\CurrentVersion’, ‘CurrentVersion’, version);
if (version < '10.5') or (version = '') then begin
// If the full version is not found then check for the Express edition
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\MSSQLServer\CurrentVersion', 'CurrentVersion', version);
if (version ‘9.00’) or (version = ”) *) then begin
if isX64() then
AddProduct(‘SQLEXPRWT_x64_ENU.exe’, ‘/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools /INSTANCENAME=SQLEXPRESS /SQLSVCACCOUNT=”NT AUTHORITY\Network Service” /SQLSYSADMINACCOUNTS=”builtin\Administrators” /INDICATEPROGRESS /TCPENABLED=1 /BROWSERSVCSTARTUPTYPE=Automatic /ERRORREPORTING=0 /SQMREPORTING=0 /SECURITYMODE=SQL /SAPWD=1234’, CustomMessage(‘sql2008r2expressx64_title’), CustomMessage(‘sql2008r2expressx64_size’), sql2008r2expressx64_url,false,false)
else
AddProduct(‘SQLEXPRWT_x86_ENU.exe’, ‘/QS /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools /INSTANCENAME=SQLEXPRESS /SQLSVCACCOUNT=”NT AUTHORITY\Network Service” /SQLSYSADMINACCOUNTS=”builtin\Administrators” /INDICATEPROGRESS /TCPENABLED=1 /BROWSERSVCSTARTUPTYPE=Automatic /ERRORREPORTING=0 /SQMREPORTING=0 /SECURITYMODE=SQL /SAPWD=1234’, CustomMessage(‘sql2008r2expressx86_title’), CustomMessage(‘sql2008r2expressx86_size’), sql2008r2expressx86_url,false,false);
end;
end;
end;
Olá Manoel, obrigado pelo retorno! Qual é o erro que você está tendo agora quando você tenta rodar o instalador?
Abraço!
André Lima
Está dando mensagem que falta alguma dependência para realizar a instalação. Preciso procurar na pasta de log da instalação pra ver oque ele “está reclamando”.
Beleza Manoel.. Assim que você descobrir o problema fala aqui pra gente como você resolveu, OK?
Abraço!
André Lima
“An error occured while installing the dependencies. Please restar the computer and run the setup again or install the following dependencies manually:
Microsoft SQL Server 2008 R2 Express Edition x64 (Including Tools)
Setup cannot continue. Please click Cancel to exit.”
Esta é a mensagem que retorna mas, olhando nos logs não achei mensagem nenhuma de erro.
Olá Manoel!
Essa mensagem está sendo retornada pelo instalador do Inno.. É a mensagem padrão para quando acontece algum erro com as dependências.. Estranho você não ter encontrado nada no log..
Você já tentou instalar o SQL Server separadamente para ver se você descobre o erro?
Abraço!
André Lima
Olá!
A instalação direta pelo setup do SQlServer funciona sem problemas.
Olá Manoel!
Você fez a instalação pela UI do instalador do SQL Server (modo visual) ou através da linha de comando? Pelo que você falou, tudo indica que tem alguma coisa de errado no comando que faz a instalação silenciosa do SQL Server..
Abraço!
André Lima
Olá.
Modo visual. Já utilizei o comando como o do seu exemplo e coloquei outros (com outros parâmetros) que encontrei na NET, mas o erro é o mesmo em qualquer um deles. Você saberia me dizer o nome do arquivo de log que diz onde está o problema? São criados vários e em nenhum deles eu vi mensagem de erro, pode ser que passou desapercebido.
Grato pela sua atenção!
Abraço!
Olá Manoel!
Você já deu uma olhada nesta seção da documentação do MSDN, que fala sobre o log de instalação do SQL Server?
View and Read SQL Server Setup Log Files
Se você quiser, me manda os seus scripts do projeto do Inno para eu dar uma olhada (por e-mail: contato [arroba] andrealveslima [ponto] com [ponto] br).. Talvez eu consiga detectar o que pode estar errado na linha de comando..
Abraço!
André Lima
Olá André!
Eu já havia olhado esta documentação sim.
Eu mudei o parâmetro /QS para /Q e instalou tudo sem erro, até o Studio.
Segundo a documentação, diz o seguinte à respeito deste parâmetro:
Controle de instalação do SQL Server /Q
Opcional Especifica que a Instalação é executada em modo silencioso sem nenhuma interface do usuário. Isso é usado para instalações autônomas.
Controle de instalação do SQL Server /QS
Opcional Especifica que a Instalação é executada e mostra o andamento por meio da interface do usuário, mas não aceita nenhuma entrada
Ah e obrigado pela atenção.
Vou “brigar” agora para fazer o restante (banco, instalação do meu programa, etc)
Um grande abraço!
Fala Manoel!
Magina, sem problema.. Fico feliz que tenha conseguido fazer funcionar.. E obrigado pelo script que você mandou por e-mail.. Já editei o artigo compartilhando o script caso alguém enfrente esse mesmo problema..
Abraço!
André Lima
Gostei muito do tutorial, é exatamente o que estou precisando para publicar uma aplicação pequena que estou precisando fazer.
Só uma ressalva!?
Eu posso fazer uma aplicação apenas usando arquivo sql e não instalar o sql server, na máquina do Cliente?!
Olá José, obrigado pelo comentário!
Se você utilizar o SQL Server na sua aplicação (classes SQLConnection, SQLCommand, etc), você terá que instalar algum tipo de SQL Server no computador do seu cliente.. Nem que seja o SQL Server Express ou LocalDb (não recomendado para produção).. Uma alternativa seria utilizar algum outro tipo de banco de dados, que seja local e não precise de instalação, como o SQLite.. Caso a aplicação seja pequena e não precise ser acessada ao mesmo tempo por mais de um usuário, essa seria uma ótima alternativa..
Abraço!
André Lima
Amigo, esse processo serve para o Service-based Database no visual studio?
pois estou fazendo um aplicativo aqui e utilizei esse Service-based Database como o banco de dados, mas na hora de utilizar em um outro computador ele não acha a base de dados, seria esse o caso de não ter instalado o SQL Server Express?
Olá Flavio!
O Service-Based Database que você cria no Visual Studio é justamente uma instância de base de dados do SQL Server.. Ou seja, na hora de publicar a aplicação, você vai precisar que o SQL Server (pelo menos o Express) esteja instalado no computador do cliente..
Abraço!
André Lima
Achei muito bom sua explicação parabens, mas ficou uma dúvida.
Vamos supor que eu precise instalar um sistema na maquina do cliente e quero que o banco de dados seja instalado em outra maquina na rede para servir de servidor, assim as demais maquinas que tambem instalar o meu sistema vai enchergar o mesmo banco. Tem como fazer isso ?
Olá Jerry, obrigado pelo comentário!
Eu não vejo uma maneira de fazer isso de forma totalmente automatizada.. Acredito que você teria que instalar manualmente o SQL Server no servidor onde o seu banco de dados será hospedado, mesmo porque, até onde eu sei, não dá para você instalar o SQL Server em outro computador que não seja o local (instalação remota)..
Uma vez tendo o banco de dados instalado no servidor, a única coisa que você precisa fazer nos clientes é alterar a string de conexão de forma que ela aponte para esse servidor.. Se você estiver armazenando a string de conexão em um arquivo de configuração (como deve ser feito), aí não tem stress.. É só abrir o arquivo .config e alterar a string de conexão lá..
Abraço!
André Lima
Excelente tutorial, Andre estou com uma duvida referente a instalação do sql , quando rodo o instalador em minha maquina ele executa o sistema normalmente, porem quando excluo o banco de dados para testar a restauração o mesmo apresenta erro de logon
Olá Ramon, obrigado pelo comentário!
Mas que estranho esse comportamento, hein.. Será que você poderia mandar exatamente qual é a mensagem de erro que você está recebendo?
Abraço!
André Lima
O erro apresentado é ao final da instalação , apresenta o erro RUNTIME ERRO (AT 29:206)
ERRO Interno : Extract TemporaryFile”” was not found
O erro de logon consegui resolver , porem apos a resolução desse problema, foi apresentado esse acima sempre ao final da instalação , já troquei de maquina, porem não resolveu quando faço a instalação em uma maquina sem server o erro persiste.
Poderia me da uma LUZ?
OBRIGADO !!!
Olá Ramon!
Que coisa hein.. Por algum acaso você está em uma rede que tem algum bloqueio de internet (por exemplo, na empresa se você precisa utilizar proxy no browser para acessar a internet)? Esse erro é apresentado pelo instalador, e não pela aplicação, certo? Será que você poderia disponibilizar o instalador em algum lugar (Dropbox, Google Drive, etc) para eu dar uma olhada (pode mandar o link no meu e-mail se preferir)?
Abraço!
André Lima
Bom dia Andre!
Tem sim, segue o link do OneDrive abaixo.
https://1drv.ms/f/s!Avr3YM59DHdR0w1OtxYdnxtYaBeN
Estou tentando instalar em varias maquina, tanto na empresa no qual trabalho quanto em maquina sem está na rede.
Esse erro está aparecendo no instalador, quando clicamos em INSTALAR logo em seguida apresenta esse erro. Percebi o seguinte problema quando executo o instalador sem as DLL necessarias para o meu programa rodar o instalador executa normalmente, porem quando adiciono as linhas abaixo volta a apresenta esse mesmo erro.
Source: “src\Bussiness.dll”; DestDir: “{app}”; DestName: “Bussiness.dll”;
Source: “src\Bussiness.pdb”; DestDir: “{app}”; DestName: “Bussiness.pdb”;
Source: “src\CEstoque.Data.dll”; DestDir: “{app}”; DestName: “CEstoque.Data.dll”;
Source: “src\CEstoque.Data.pdb”; DestDir: “{app}”; DestName: “CEstoque.Data.pdb”;
Source: “src\CEstoque.Entity.dll”; DestDir: “{app}”; DestName: “CEstoque.Entity.dll”;
Source: “src\CEstoque.Entity.pdb”; DestDir: “{app}”; DestName: “CEstoque.Entity.pdb”;
Source: “src\CEstoque.LocalApp.exe.config”; DestDir: “{app}”; DestName: “CEstoque.LocalApp.exe.config”;
Source: “src\CEstoque.LocalApp.pdb”; DestDir: “{app}”; DestName: “CEstoque.LocalApp.pdb”;
Source: “src\CEstoque.LocalApp.vshost.exe”; DestDir: “{app}”; DestName: “CEstoque.LocalApp.vshost.exe”;
Source: “src\CEstoque.LocalApp.vshost.exe.config”; DestDir: “{app}”; DestName: “CEstoque.LocalApp.vshost.exe.config”;
Source: “src\CEstoque.LocalApp.vshost.exe.manifest”; DestDir: “{app}”; DestName: “CEstoque.LocalApp.vshost.exe.manifest”;
Source: “src\itextsharp.dll”; DestDir: “{app}”; DestName: “itextsharp.dll”;
Source: “src\itextsharp.xml”; DestDir: “{app}”; DestName: “itextsharp.xml”;
Source: “src\logo_ico.ico”; DestDir: “{app}”; DestName: “logo_ico.ico”;
Source: “src\Microsoft.SqlServer.Diagnostics.STrace.dll”; DestDir: “{app}”; DestName: “Microsoft.SqlServer.Diagnostics.STrace.dll”;
Source: “src\Microsoft.SqlServer.Dmf.Common.dll”; DestDir: “{app}”; DestName: “Microsoft.SqlServer.Dmf.Common.dll”;
Source: “src\Microsoft.SqlServer.RegSvrEnum.dll”; DestDir: “{app}”; DestName: “Microsoft.SqlServer.RegSvrEnum.dll”;
Source: “src\Microsoft.SqlServer.ServiceBrokerEnum.dll”; DestDir: “{app}”; DestName: “Microsoft.SqlServer.ServiceBrokerEnum.dll”;
Source: “src\Microsoft.SqlServer.SmoExtended.dll”; DestDir: “{app}”; DestName: “Microsoft.SqlServer.SmoExtended.dll”;
Olá Ramon!
O instalador chega a começar a baixar o SQL Server? Digo, esta janela:
Chega a aparecer essa tela aí pra você? Porque eu testei com o arquivo SnackBars-1.0 que você colocou no OneDrive e no meu computador não apresentou erro.. Por isso que estou achando que pode ser algum problema com proxy que não está deixando baixar o instalador do SQL Server durante a instalação..
Abraço!
André Lima
André tentei instalar em outra maquina diferente , que acabou de ser formatada e também não funcionou apresentou a mesma mensagem informada acima , kkkkk
Quando clico em instalar não chega nem a aparecer essa tela informada , quando clico em instalar ele já abre a mensagem de erro.
Ao ser feito a instalação em uma maquina que possua o sql server, .NET a instalação funciona normalmente, porem hoje fui fazer a instalação em uma maquina recem formatada e ao clicar no botao INSTALAR no mesmo instante apresenta a mensagem :
RUNTIME ERRO (AT 29:206)
ERRO Interno : Extract TemporaryFile”” was not found
Olá Ramon!
Qual é o instalador que você está utilizando? Aquele SnackBars-1.0 que está no seu OneDrive? Se for ele, aqui funcionou de boa.. Se não for ele, por favor, coloque a versão que não está funcionando no OneDrive para eu testar aqui..
Mais uma vez, pergunto: você está em uma rede que utilize proxy bloqueando alguns acessos a sites na internet? Você já testou em alguma outra rede?
Abraço!
André Lima
Bom dia Andre!
O instalador é o mesmo, porem consegui resolver o problema, segue a minha solução:
No arquivo de configuração products.iss tem uma linha que faz a verificação da liguagem de instalação:
if (ActiveLanguage() ‘en’) then begin
ExtractTemporaryFile(CustomMessage(‘isxdl_langfile’));
isxdl_SetOption(‘language’, ExpandConstant(‘{tmp}{\}’) + CustomMessage(‘isxdl_langfile’));
end;
//isxdl_SetOption(‘title’, FmtMessage(SetupMessage(msgSetupWindowTitle), [CustomMessage(‘appname’)]));
Esse Script verifica se é a linguagem padrao EN porem no meu instalador adicionei a linguagem Brasileira tive apenas que fazer a alteração de
if (ActiveLanguage() ‘en’) then begin
Para
if (ActiveLanguage() ‘brazilianportuguese’) then begin
feito essa alteração o erro :
RUNTIME ERRO (AT 29:206)
ERRO Interno : Extract TemporaryFile”” was not found
foi corrigido.
Porem agora esta apresentando outro erro conforme informado pelo amigo: Manoel Américo Zancheta
erro:
“An error occured while installing the dependencies. Please restar the computer and run the setup again or install the following dependencies manually:
Microsoft SQL Server 2008 R2 Express Edition x64 (Including Tools)
Setup cannot continue. Please click Cancel to exit.”
Foi feito a alteração que o mesmo informou porem o meu não funcionou.
Andre se você tiver a linha editada poderia por favor compartilhar no comentário a linha completa.
Respondendo sua pergunta:
Mais uma vez, pergunto: você está em uma rede que utilize proxy bloqueando alguns acessos a sites na internet?
Não, a rede que utilizo é a residencial não sendo configurado nenhum tipo de proxy
Você já testou em alguma outra rede?
Sim, estou testando em varias redes diferentes
Olá Ramon!
Que bom que você conseguiu resolver o primeiro problema.. Não tinha ideia que isso poderia ser problema da tradução para outro idioma..
Enfim, quanto à sua pergunta sobre o script do Manoel Américo Zancheta, ele enviou para mim e eu disponibilizei no próprio artigo (procure pelo nome dele no artigo e você encontrará o local onde eu comento sobre isso).. De qualquer forma, o link para baixar o script dele é este (a propósito, eu não testei o script dele):
http://andrealveslima.com.br/files/artigos/instaladores/InnoSQLSuporte32_64Bits.zip
Depois conta pra gente se funcionou..
Abraço!
André Lima
André Boa noite!
Meu sistema e feito com comandos sql tais como sqlcommand,sqldatareader e outros , seria possível utilizar algum instalador mais leve do que o sql Server 2008 r2 ?
Algum banco mais rápido para a instalação da aplicação do cliente
Obrigado
Olá novamente, Ramon!
Isso depende de uma série de fatores.. A sua aplicação é utilizada ao mesmo tempo por mais de um usuário na rede? Ou seja, você tem um banco “central” em algum lugar da rede e múltiplos usuários acessam esse mesmo banco a partir de outras estações? Caso positivo, aí você tem que utilizar algum banco de dados robusto mesmo, como o SQL Server Express, MySQL, PostgreSQL, etc.. A instalação de qualquer um desses bancos será pesada, então eu não vejo porque migrar para outro banco se a sua aplicação já estiver funcionando com o SQL Server..
Agora, se a sua aplicação é mono-usuário (ou seja, o banco de dados é instalado no computador do usuário e somente ele acessa esse banco pela estação dele), dependendo do volume de dados, faz mais sentido utilizar algum banco de dados local.. Nesse caso você teria algumas opções mais simples (que não precisam de instalação customizada – basta enviar o arquivo do banco junto com a aplicação), como Microsoft Access, SQLite (escrevi sobre ele aqui), LocalDB, etc..
A sua aplicação atende a qual desses dois cenários?
Abraço!
André Lima
Minha aplicação atende a uma maquina, não sendo possível utilizar em rede.
Olá Ramon!
E qual é o volume de dados que estamos falando? Milhares de registros? Milhões de registros? Qual é tamanho o arquivo MDF do seu SQL Server fica em média?
Eu diria que, se a sua base de dados ficar normalmente abaixo dos 50Mb, você poderia utilizar algum banco bem mais simples, como o Microsoft Access.. Se ficar entre os 50Mb e 100Mb, você poderia partir para um SQLite ou SQL Server CE (Compact).. Agora, se o banco da sua aplicação for maior que 100Mb, a chance de um banco de dados local corromper aumenta.. Aí talvez seria melhor continuar com o SQL Server Express mesmo..
E claro, essa é só a minha opinião.. :)
Abraço!
André Lima
Boa noite meu amigo !
Muito obrigado pelo apoio,minha base de dados não tenho como medir pois meu sistema é para lanchonete que terá fotos , continuarei com sql Server mesmo.
Porem fiz a correção que o amigo Manoel mencionou e no meu instalador ele não esta finalizando a instalação do sql Server 2008 sempre apresenta o mesmo erro ao final.
Fiz a troca da linha mencionada e nada. Continuarei tentando kkkk
Obrigado !!!
Olá Ramon!
Que estranho.. Se você puder, coloca lá no OneDrive a última versão do script, arquivos de origem do instalador e versão compilada do instalador que está dando problema para eu dar uma olhada..
Pergunta adicional: você está tentando instalar em um computador com idioma em português, arquitetura 32 bits? Ou 64 bits?
Abraço!
André Lima
Ola, Boa tarde Andre!
Segue o link com todos os arquivos do projeto
https://1drv.ms/f/s!Avr3YM59DHdR03aqGBddeJ2sImLL
Pergunta adicional: você está tentando instalar em um computador com idioma em português, arquitetura 32 bits? Ou 64 bits?
R: Sim os computadores estão em português e arquitetura de 64 bits
Olá Ramon!
Fiz uns testes aqui e também tive problemas com o seu instalador.. Testei em uma máquina virtual com Windows 10 Pro, 64 bits em português.. Primeiro ele reclamou que não tinha o .NET Framework 3.5 instalado.. Ele é realmente necessário, pois é um dos pré-requisitos para o SQL Server 2008 R2.. Veja se ele não está faltando no computador onde você está tentando instalar a sua aplicação..
Depois de reiniciar, tentei novamente e tive um outro erro.. Analisei o resultado da instalação e, na verdade, o SQL Server foi instalado:
Só que ele foi instalado meio que pela metade.. Não dá nem para conectar nele com o SQL Server Management Studio..
Analisando os logs da instalação, vi que ele deu um erro no finalzinho:
Pesquisando sobre esse erro, encontrei esta thread no fórum da MSDN:
Failure to install Sql Server 2008 “access is denied”
O que eu tentaria agora: em um computador limpo, executar o seu instalador em modo administrador, para ver se esse problema da permissão deixa de acontecer.. Você poderia fazer esse teste (se é que você ainda não fez)?
Abraço!
André Lima
Boa noite André !
Farei os testes conforme informado no link, porem vou deparar com o seguinte problema, se fizer essa modificação via Windows despois tenho que fazer via script para meus clientes.
André voltando um pouco no tempo, quando falamos sobre outros meios de instalar um banco de dados nas maquinas clientes vc me mandou um link sobre sqlite e outros meios, como minha aplicação esta focada em microempreendedor e para uma maquina apenas qual desses bancos seria mais rápido a instalação e que aceitaria meu script ja com comandos sql.
Seria o sqlite mesmo? Se sim teria algum tutorial com explicação para fazer um instalador já com as classes e configurações necessárias para minha aplicação ?
Obrigado pela imensa ajuda que anda me dando
Olá Ramon!
Se funcionar rodando o instalador como administrador, você pode configurar isso no script do Inno.. Mais detalhes nesta thread do StackOverflow:
Inno Setup : How to set installer “Run As Administrator”?
Mas, enfim, quando à sua pergunta do SQLite, ele é um banco de dados local que não precisa de nenhuma instalação à parte.. Você só precisa distribuir as dlls do SQLite (que são as dlls adicionadas nas referências do projeto uma vez que você adiciona o SQLite pelo NuGet) no mesmo diretório da sua aplicação..
Você chegou a dar uma olhada no meu artigo sobre SQLite que eu te mandei nas respostas anteriores?
Abraço!
André Lima
Ola Andre boa noite!
Desculpe a ausência estive viajando pela empresa!
Bom Andre, estive dando uma olhada sim no seu artigo , porem eu gostaria de importar o banco de dados que ja tenho pronto no sql server para o sqlite, seria possível?
Fiz o teste que voce informou sobre permissões porem apresenta o mesmo problema, resolvi deixar um pouco de lado a instalação do sql 2008 devido ao tempo de download e configuração.
Estou tentando focar nessa solução que você me apresentou SQLite, acho mais adequado para minha aplicação.
Olá Ramon, sem problema!
Uns tempos atrás um outro leitor do meu site me perguntou sobre uma ferramenta para converter bancos SQL Server em SQLite.. Na época eu encontrei esta ferramenta:
Convert SQL Server DB to SQLite DB
Não cheguei a testar, mas que eu me lembre funcionou bem para ele.. Vale a pena dar uma investigada..
Abraço!
André Lima
Fala Andre boa tarde!
Andre ao fazer a instalação do sql server para clientes percebi que nao fica viável o tempo de espera e ao criar o instalador.
Devido a isso fiz a instalação do SQLLOCALDB.MSI onde minha aplicação ao fazer a primeira consulta ao banco de dados ele retorna o erro 26 da instancia nao foi encontrada, ao clicar em continuar meu sistema abre normamente e banco de dados funciona normal.
Porem toda vez que faço a inicialização do programa ele apresenta esse erro .
Você teria alguma solução para meu ajudar?
Estou precisando muito dessa ajuda já procurei na internet mais nao consegui resolver esse problema!!!
Minha ideia é de instalar o sqllocaldb junto com o instalador da minha aplicação
Olá Ramon!
Você está fazendo o restore do banco na primeira vez que a aplicação é executada? Se esse for o caso, você precisa descobrir exatamente qual ponto da aplicação que está tentando utilizar alguma coisa do banco antes de ele ser criado.. Tente colocar um breakpoint na primeira linha do ponto de entrada da aplicação (método main) e ir executando linha a linha para ver onde é que o banco de dados está sendo chamado antes da rotina que faz o restore inicial do banco..
Abraço!
André Lima
Boa Noite, sou iniciante e estou tentando compilar meu programa com o banco de dados, me perdi no passo: Instalando o SQL SERVER junto com a aplicação…
Eu baixei o InnoSetup…e fiz os downloads do scipts do CodeProect…só que ai que me perdi…coloco esses arquivos em qual pasta? eu compilo meu programa primeiro
e jogo esses arquivos lá dentro…ou coloco esses arquivos dentro da pasta do InnoSetup?
Olá Andressa!
Como mencionado no artigo, você precisa compilar o seu projeto e jogar todos os executáveis e dlls necessários à sua aplicação dentro da pasta “src” do instalador.. Depois, no editor do InnoSetup, você tem que adicionar as entradas na chave “Files” do arquivo de setup..
Você tentou fazer exatamente o passo a passo indicado no artigo, utilizando inclusive a aplicação de exemplo que eu construi na parte inicial dele? Tente primeiro com essa aplicação, seguindo exatamente os passos do artigo.. Aí vai ficar mais fácil de você entender as mudanças que você terá que fazer para adaptar à sua aplicação..
Abraço!
André Lima
Boa tarde André. Parabéns pelo site excelente conteúdo você é referência no meio da programação. Queria te pedir uma ajuda referente a esse tópico. Consegui fazer todo procedimento, mais quando eu simplesmente só mudo o nome do DataBase a ser criado para ‘ExemploInstalador2’ com a sua mesma tabela, ele me retorna um erro Restore error 3234. Arquivo lógico nao faz parte do banco de dados.
Pode desconsiderar o nome lógico do arquivo estava totalmente diferente. Obrigado André.
Legal, Walmir! Que bom que você conseguiu resolver.. Qualquer coisa estamos aí..
Abraço!
André Lima
Bom dia, André.
Uma dúvida relacionada: estou construindo uma aplicação desktop em C#, que deve permitir que o usuário trabalhe offline, mas que faça a devida replicação para um banco na web quando o usuário se conectar à internet.
A ideia é que o usuário continue fazendo cadastros mesmo offline. Além disso, a comunicação com o banco na Internet é importante porque preciso validar questões como “a licença do usuário ainda está ativa?”.
Gostaria de saber qual a melhor forma de fazer isso e qual o banco de dados indicado para ser instalado no computador do usuário.
Coisas que quero que considere:
– não gostaria de ter que instalar um SGBD pesado (ex: uma solução completa do SQL Server) no computador do usuário, que pode ser bem “fraquinho”.
– pensei em algo como SQLite, mas não tenho condições de avaliar se essa integração funciona.
– no ambiente web, estou pensando em utilizar o Postgres.
Poderia me ajudar?
Olá João!
Se você pudesse utilizar um SGBD compenente por trás da sua aplicação, você poderia simplesmente utilizar as ferramentas de replicação do próprio SGBD.. Por exemplo, o SQL Server tem funcionalidade de replicação nas versões mais profissionais..
Agora, sem um SGBD competente por trás, você terá que fazer tudo manualmente (via web services para fazer a sincronização), ou terá que utilizar alguma solução pronta.. Eu não tenho experiência em replicação de bancos SQLite para PostgreSQL.. Nesta thread do StackOverflow o pessoal dá algumas sugestões de ferramentas de replicação para o SQLite, veja só, talvez te ajude:
Method to replicate sqlite database across multiple servers
Abraço!
André Lima
Bom dia, André.
Certo.
Já tinha visto algumas das soluções propostas no link que você me enviou. Não testei, mas estou avaliando até que ponto poderiam ser úteis.
De acordo com a sua resposta, acredito que o caminho a seguir possivelmente será criar as regras de forma manual.
De qualquer forma, obrigado pela resposta! Abraço!
De nada, João! Depois que você implementar a funcionalidade no seu sistema, não esquece de vir aqui para contar pra gente a solução que você adotou..
Abraço!
André Lima
Olá André!Já agradeço e digo que adorei sua solução, porém gostaria de instalar o Sql Server Express 2014. O que preciso mudar? Teria como me orientar?
Olá Michelle!
Você terá que criar um arquivo correspondente para o SQL 2014 dentro da pasta “products”.. Copie o arquivo “sql200express.iss” e faça as alterações necessárias para o SQL 2014.. Depois, no seu script principal, você terá que colocar a linha #define sql2014express e o seguinte bloco no final do script:
Abraço!
André Lima
Olá André,
Boa Tarde!
Tentei efetuar umas mudanças para instalar o SQL2014.
Depois de criar um script específico para o 2014 com o endereço de download:
[Code]
const
sql2014expressr2_url = ‘https://download.microsoft.com/download/A/3/7/A37DC861-6952-4A8F-A7EE-1F664F9B8CA9/SQLEXPRADV_x86_PTB.exe’;
sql2014expressr2_url_x64 = ‘https://download.microsoft.com/download/A/3/7/A37DC861-6952-4A8F-A7EE-1F664F9B8CA9/SQLEXPRADV_x64_PTB.exe’;
Antes de iniciar o download é informado o ERRO: Protocolo não suportado!
Apesar de ser esse o endereço para baixar os arquivos pelo browser, desconfiei que o erro pode estar aí.
Tem alguma dica?
Olá Nelson!
Provavelmente é porque você está utilizando “https” no endereço.. Tente remover o “s” do final e veja se funciona só com “http”..
Abraço!
André Lima