quinta-feira, 8 de dezembro de 2016

Erro Failed to load Delzip192.dll %1 não é um arquivo Win32 válido

Erro ao compactar utilizando o componente ZipMaster (Delphizip).


"Failed to load delzip192 dll %1 não é um arquivo win 32 válido"


O erro ocorre em máquinas 64 bits, ao gerar o arquivo ZIP pelo componente, quando se está utilizando a DLL para Windows 64 bits.

Solução: 
1) Remover a DLL delzip192.dll da pasta \Windows\System32.
2) Copiar a DLL delzip192.dll (versão 32 bits) para a pasta \Windows\SysWow64

Não utilizar a DLL  delzip192.dll versão 64 bits, mesmo que seu Windows seja 64 bits
Irá revolver.

quarta-feira, 16 de novembro de 2016

SQL Server 2014 - como fazer select em uma planilha do Excel (Linked Server dinâmico)

Para ler os dados de uma planilha do Excel sem precisar criar um linked server, basta utilizar o OPENROWSET.


SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 
                    'Excel8.0;Database=H:\Cargas\MinhaPlanilha.xls;HDR=YES;IMEX=0',
  'SELECT * FROM [Plan1$]') 

terça-feira, 18 de outubro de 2016

SQL Server - como revalidar / corrigir os logins x users após restaurar um backup

Após a restauração de um backup, os usuários ficam impossibilitados de fazer login, pois o SQL perde a referência Login x Usuário do banco.
Para corrigir isso, execute o script a baixo, que irá gerar um script de autofix para corrigir essa referência.
É só executá-lo e pronto!


- Copiar o resultado da query abaixo e executar no seu banco
-- Repetir o procedimento para cada Banco de dados restaurado

create table #tmp_logins(UserName varchar(150),userSID varchar(max))
insert into #tmp_logins
EXEC sp_change_users_login 'Report' 

select 'EXEC sp_change_users_login ''Auto_Fix'',''' + username + ''';' from #tmp_logins

select * from #tmp_logins
drop table #tmp_logins

segunda-feira, 3 de outubro de 2016

MySQL - como forçar uma exceção em uma procedure

Forçar uma exceção no MySQL não é uma tarefa simples como no SQL Server, onde você apenas chama a função RAISERROR.

1) Criar uma procedure MY_EXCEPTION que irá receber a mensagem de erro para forçar a exceção

DROP PROCEDURE IF EXISTS MY_EXCEPTION;

DELIMITER $$
-- Procedure para ser chamada com objetivo de causar exceção
CREATE PROCEDURE MY_EXCEPTION (error_text varchar(2000))
BEGIN
    SET @sql = error_text;
    PREPARE MY_SIGNAL_STMT FROM @sql;
    EXECUTE MY_SIGNAL_STMT;
    DEALLOCATE PREPARE MY_SIGNAL_STMT;
END
$$

2) Chamando a procedure

Dentro da sua procedure, faça a checagem que precisa fazer e dentro do seu IF chame a procedure

if (v_valor = 0) then
--  ROLLBACK;  -- utilize primeiro o Rollback, caso você esteja com um BEGIN TRAN aberto

-- Aqui você chama a procedure criada, passando a mensagem que deseja exibir
 CALL MY_EXCEPTION ('O valor não pode ser zero');

end if;


3) Tratamento para erros não previstos
Caso você esteja com um BEGIN TRAN aberto, é importante também incluir um tratamento para as exceções não tratadas. Para isso, utilize o comando abaixo, que fará um rollback em case de erro.

    BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;           
   
    END;







quarta-feira, 21 de setembro de 2016

Solução: Notebook Dell Latitude 3450 não desliga e não retorna da suspensão atualizar para Windows 10

Após a atualização de aniversário (Agosto/2016) do Windows 10, o notebook Dell Latitude 3450 não retornava mais da hibernação / suspensão automática,  eu tinha que pressionar o botão Power por dez segundos para desligá-lo.
Ele também não desligava através do menu Iniciar\Desligar. Ele apagava a tela e ficava com as luzes acesas. Eu tinha que pressionar o botão Power por dez segundos para ele desligar definitivamente).


Solução: Tive que atualizar o driver da Intel Magment Engine Interface

  • Baixe e instale o programa Driver Boster 3 (http://www.iobit.com/pt/driver-booster.php) ;
  • Ele irá identificar os drivers desatualizados no seu notebook;
  • Desmarque todas as outras atualizações, e deixe marcado somente o driver "Intel Magment Engine Interface" (ele estará com data de Abril/2016);
  • Clique em Atualizar;
  • Pronto! Agora você pode desligar ou hibernar seu notebook e não terá mais problemas.

Se achar necessário, atualize os outros drivers também. Como não tive problemas com mais nada,

 
 

terça-feira, 20 de setembro de 2016

SQL Server - Como localizar determinada palavra dentro de uma procedure ou tabela

Caso deseje localizar um determinado termo (palavra, comentário, nome de objeto, etc) dentro de uma procedure do SQL Server, execute o comando abaixo.

--Localizar dentro da procedure

use nome_do_banco
SELECT A.NAME, A.TYPE, B.TEXT
  FROM SYSOBJECTS  A (nolock)
  JOIN SYSCOMMENTS B (nolock) 
    ON A.ID = B.ID
WHERE UPPER(B.TEXT) LIKE '%MOTIVO%'  --- Informação a ser procurada no corpo da procedure
  AND A.TYPE = 'P'                     --- Tipo de objeto onde o a palavra será procurada. Neste caso, vai procudrar nas procedures
 ORDER BY A.NAME


Caso deseje saber a qual tabela pertence a uma determinada coluna, utilize a query abaixo.

--Localizar dentro de tabela


use nome_do_banco
 SELECT
    T.name AS Tabela,
    C.name AS Coluna
FROM
    sys.sysobjects    AS T (NOLOCK)
INNER JOIN sys.all_columns AS C (NOLOCK) ON T.id = C.object_id AND T.XTYPE = 'U'
WHERE
    upper(C.NAME) LIKE '%NOME_DA_COLUNA%'
ORDER BY
    T.name ASC

sexta-feira, 16 de setembro de 2016

SQL Server - verificando o status dos e-mails enviados pelo DatabaseMail

Caso precise saber se uma mensagem foi enviada com sucesso pelo Database e-mail ou se ocorreu erro no envio do e-mail, utilize as queries abaixo.

O campo mailItem_id é o ID exibido na mensagem de Mail Queued, então você consegue saber exatamente o que aconteceu com a mensagem.
Ex.: Mail (Id: 15027) queued


-- Lista de todos os e-mails enviados
SELECT mailitem_id
   , recipients
, subject
, body
, sent_status
, sent_date 
  FROM msdb..sysmail_mailitems 
WHERE sent_date > DATEADD(DAY, -10,GETDATE())
 and subject like '%assunto do e-mail%'

 

-- Lista os e-mails não enviados devido a alguma falha/erro
use msdb
SELECT items.mailitem_id
       ,items.subject  
    ,items.last_mod_date 
,items.sent_date
    ,l.description FROM dbo.sysmail_faileditems as items  
INNER JOIN dbo.sysmail_event_log AS l  
    ON items.mailitem_id = l.mailitem_id  
WHERE items.mailitem_id  =
-- WHERE -- aplique o filtro desejado

 



quarta-feira, 14 de setembro de 2016

Como corrigir acentos e caracteres especiais do arquivo CSV para Excel

Caso esteja com problemas de campos perdendo acentuação ao importar arquivos CSV no Excel, basta fazer o seguinte:

- Abrir o arquivo CSV utilizando o Notepad++
- Acessar o menu Formatar\Configurar em UTF-8
- Salvar o arquivo (sobrescrever o arquivo atual)

Pronto. Agora é só importar o arquivo CSV no Excel e ele não perderá acentuação nem caracteres especiais


Encontrei a solução no link abaixo. O procedimento é mais simples, diz apenas para abrir o arquivo no Notepad e salvá-lo. 
Você pode tentar essa solução também.
http://www.hugoleonardo.net/2013/03/corrigir-acentos-do-arquivo-csv-para.html

quinta-feira, 1 de setembro de 2016

Blog do Napa mencionado no fórum da Microsoft

Olá,

o Blog do Napa foi mencionado no fórum da Microsoft.
Já faz tempo, mas tá aí...

https://social.msdn.microsoft.com/Forums/sqlserver/pt-BR/f1db93e5-9420-4ef0-b987-f7fc3ae66836/problema-com-til-na-migrao-para-o-azure-sql?forum=520

segunda-feira, 18 de janeiro de 2016

SQL Server 2014 - Instalando e configurando o driver ACE OLEDB12 para ler XLS via Linked Server


Instalando e Configurando o driver ACE OLEDB12 PARA ler arquivo XLS no SQL SERVER 2014


Caso esteja ocorrendo o erro abaixo ao tentar criar um linked server para leitura de arquivo do Excel (.xls), execute as etapas de Instalação e Configuração.
Msg 7403, Level 16, State 1, Line 1 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

Caso esteja ocorrendo os erros abaixo, execute somente a etapa de Configuração(uma vez que você já tem o ACE OLEDB12 instalado)

Msg 7399, Level 16, State 1, Line 2
The OLE DB provider "Microsoft.ACE.OLEDB.12.0″ for linked server "(null)" reported an error. Access denied.
Msg 7301, Level 16, State 2, Line 2
Cannot obtain the required interface ("IID_IDBCreateCommand") from OLE DB provider "Microsoft.ACE.OLEDB.12.0″ for linked server "(null)".


Msg 7302, Level 16, State 1, Line 2
Cannot create an instance of OLE DB provider "MSDASC" for linked server "(null)".
OLE DB provider "Microsoft.ACE.OLEDB.12.0″ for linked server "(null)" returned message "Unspecified error".

Msg 7303, Level 16, State 1, Line 2
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0″ for linked server "(null)".


INSTALANDO O ACCESS DATABASE ENGINE X64


Siga os passos abaixo :
1)    Baixar a versão 64 bits do Acess Database Engine (AccessDatabaseEngine_X64.exe) do "Microsoft Access Database Engine 2010 Redistributable" no link abaixo :


2) Instalar o AccessDatabaseEngine_X64.exe no seu Servidor SQL

3)    Abra uma Nova Janela (new query window) no  SQL Server Management Studio (SSMS) e execute os comandos abaixo : 

USE [master]
GO 
sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OverRide
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE WITH OverRide
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO

*VERIFIQUE SE PARA O SEU CASO A OPÇÃO "ALLOW IN PROCESS" DEVE ESTAR ATIVADA OU INATIVADA. SE DER ERRO NA ETAPA 4, EXECUTE O COMANDO ACIMA COM ALLOWINPROCESS COM 0 NO LUGAR DE 1. IRÁ FUNCIONAR.


4)    Agora tente executar a query abaixo, que simula o linked server:

 select *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\planilha.xls',
               [plan1$])

Caso ocorra erro, execute a configuração abaixo.





 
CONFIGURANDO A CONTA DO SQL SERVER NO MSDAINITIALIZE PARA PERMITIR CONEXÃO LOCAL
 
Fontes:


  • Acessar o menu Iniciar\Executar e digitar: DCOMCNFG   e pressionar ENTER 
  • Clicar em Computers\My Computer\DCOM Config
  • Clicar na opção MSDAINITIALIZE com botão direito e clicar em Properties;
  • Clicar na aba Security;
  • No quadro Access Permissions, marcar Customize e clicar em Edit;
  • Clicar em Add e adicionar o usuário da Instância do SQL Server (Ex. SQLServerUser.Prod)
  • Marcar a opção Local Access (Allow);
  • Clicar em OK, OK e APPLY.

Pronto. Agora irá funcionar. Resolvido.