quinta-feira, 29 de setembro de 2011

Evitar erro ao dar OPENROWSET em XML com acentuação (SQL Server)

Para não ocorrer erro carregar um arquivo XML via OPENROWSET, quando o XML possui acentuação (Illegal Characters / Illegal Characters), basta adicionar o encoding na primeira linha do XML:

<?xml version="1.0" encoding = "ISO-8859-1" ?>





Bulk Insert e BCP / Queryout sem perder acentuação (SQL Server)

Para não perder a acentuação das palavras ao carregar um TXT via BULK INSERT ou ao exportar uma tabela via QUERYOUT, é necessário definir a CODEPAGE/COLLATION.

É simples:

BULK INSERT - Exemplo:
set @cmd = 'bulk insert TABELA from
''' + @FileName + ''' WITH (CODEPAGE = 1252)'
exec(@cmd)


BCP/QUERYOUT - Exemplo:


set @cmd = 'bcp "SELECT * FROM ##atu_conf" queryout ' + @FileName + ' -T -c -C1252 -t, '
EXEC xp_cmdshell @cmd

quinta-feira, 26 de maio de 2011

SQL Server - criar diretório via XP_CREATE_SUBDIR usando parâmetro

O comando xp_create_subdir 'c:\sua_pasta' funciona, mas se for criar um diretório/pasta utilizando uma variável, terá de fazer assim:


declare @dir varchar(30)
set @dir = 'c:\sua_pasta'
exec xp_create_subdir @dir

Caso contrário, retornará o erro Incorrect syntax near 'xp_create_subdir'.

sql server; xp_create_subdir; Incorrect syntax near xp_create_subdir;

quinta-feira, 19 de maio de 2011

Oracle 10g - recuperando uma tabela dropada

A partir da versão 10g do Oracle, é possível recuperar uma tabela que foi excluída (DROP), graças a uma tabela do sistema chamada RecycleBin e a um recurso chamado Flashback

Vamos ao Exemplo:

Crio uma tabela
create table Tabela1
(id integer, nome varchar(50));

Populo a tabela com alguns registros
insert into tabela1 (id, nome) values (1, 'Napa 1');
insert into tabela1 (id, nome) values (2, 'Napa 2');
insert into tabela1 (id, nome) values (3, 'Napa 2');
insert into tabela1 (id, nome) values (4, 'Napa 3');
COMMIT;

Consulto os dados da tabela
select * from tabela1

Agora dou um Drop na tabela
drop table tabela1

Tento dar um novo select na tabela: retornará erro
select * from tabela1

Note que ela fica armazenada na tabela recyclebin
select * from recyclebin

Para recuperar a tabela, executo o comando abaixo
flashback table tabela1 TO before DROP

Um novo select na tabela e os dados estarão lá
select * from tabela1


OBSERVAÇÕES IMPORTANTES

Os objetos dropados permanecem na tabela recyclebin até que:
- Seja restaurada através do comando UNDROP;
- Seja dropado permanentemente através do comando PURGE;
- Até que não tenha espaço suficiente para os objetos regulares na tablespace;
- As Contraints referencial não são protegidas pela recyclebin;

Observações extraídas de: ProfissionaisOracle.com.br

terça-feira, 17 de maio de 2011

SQL Server - exemplo simples de BulkInsert

CREATE TABLE [dbo].[CLIENTE](
[ID] [int] IDENTITY(1,1) NOT NULL,
[NOME] [nvarchar](100) NULL
) ON [PRIMARY]


Conteúdo a impordar: Arquivo CARGA.TXT
2;JOAQUIM;
3;MARIA;
4;PEDRO;

Abrir o MS-DOS e se logar no SQLCMD
sqlcmd -Useu_usuario -Psuasenha


BULK INSERT [Nome_da_Sua_Database].dbo.Cliente FROM "C:\CARGA.TXT"
WITH
(
FIRSTROW = 1,
FIELDTERMINATOR =";"
);
GO

Note que ele irá ignorar o ID informado, pois usará o IDENTITY da coluna ID.
Para fazer valer o ID do arquivo, adione o parâmetro KEEP_IDENTITY, dentro do WITH.

Pronto.

terça-feira, 26 de abril de 2011

Erro ao instalar Microsoft SQL Server 2008 Standard: MSXML 6.0 Parser (KB933579) -- Installation failed

Erro ao instalar Microsoft SQL Server 2008 Standard: MSXML 6.0 Parser (KB933579) -- Installation failed

Solução

- Desinstalar o MSXML 6 SP2 (Microsoft Core XML Services (MSXML) 6.0 SP2)
- Instalar o MSXML 6 disponível neste site
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=993C0BCF-3BCF-4009-BE21-27E85E1857B1&displaylang=en

Caso você não consiga desinstalar o MSXML6 SP2 (erro fatal durante desinstalação do MSXML6):

- Acesse o link abaixo e baixe o Fix it.


- Reinicie o computador. Em seguida, instale o MSXML6 do link acima.
- E para finalizar, inicie novamente a instalação do SQL Server 2008.

Felipe

Erro ao atualizar VS2008: Error 1935: An error occurred during the installation of the assembly

Erro ao atualizar visual studio 2008:
Error 1935: An error occurred during the installation of the assembly



Solução 1:
Reinicie a máquina e inicie novamente o VS2008 Setup.


Solução 2:

Se a solução 1 não funcionar:

1. Desabilite as atualizações automáticas do Windows (Menu Iniciar\Painel de Controle\Atualizações automáticas)

2. Desabilite o antivírus;
3. Inicie novamente a instalação/atualização do VS2008;

4. Quando finalizar a atualização, habilite novamente as atualizações automáticas (se desejar) e ative novamente o antivírus.

Fonte:
http://blogs.msdn.com/b/varungupta/archive/2007/11/27/visual-studio-2008-setup-fails-with-error-1935-an-error-occurred-during-the-installation-of-the-assembly.aspx


Visual Studio 2008 setup fails with "Error 1935: An error occurred during the installation of the assembly......."
Varun Gupta - MSFT
27 Nov 2007 3:07 AM


Sometimes this error occurs if windows update is scanning for updates at the same time as Visual Studio setup is installing components.


Workaround 1:

Reboot your machine and restart Visual Studio 2008 setup.


Workaround 2:

If Workaround 1 doesn’t work,

1. Reboot the machine

2. Disable windows update (start menu -> windows update)

3. Restart VS setup

4. When VS Setup is done, enable windows update (don't forget this step!)



If you run into any problems with either installation or uninstall, please make sure to post in the Visual Studio 2008 Setup and Installation Forum on MSDN.

sábado, 26 de fevereiro de 2011

Delphi - Stringrid multilinha

Código para StringGrid multilinha - quebrar o texto em linhas.

Depois, basta adicionar o + #13 entre o texto que você quer quebrar.

procedure TForm1.StringGrid1DrawCell(Sender: TObject;
Col, Row: Longint;
Rect: TRect;
State: TGridDrawState);

var
Line1: string;
Line2: string;
ptr: integer;
padding: integer;
begin

If (ACol > 0) and (ARow >0) Then
Begin
ptr := Pos(';', StringGrid1.Cells[ACol, ARow]);
if ptr > 0 then
begin
Line1 := Copy(StringGrid1.Cells[ACol, ARow], 1, ptr - 1);
Line2 := Copy(StringGrid1.Cells[ACol, ARow], ptr + 1,
Length(StringGrid1.Cells[ACol,ARow]) - ptr);
end
else
Line1 := StringGrid1.Cells[ACol, ARow];

StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top + 2, Line1);
if ptr > 0 then
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top -
StringGrid1.Canvas.Font.Height + 3, Line2);

End;

segunda-feira, 10 de janeiro de 2011

Instruções de Instalação do Indy10 para Delphi 7

Parece haver um bug na instalação do do Indy10 para Delphi 7.
Por isso, segue o passo a passo para instalar o Indy10 com sucesso.


DESINSTALANDO O INDY 7
Para o indy10 funcionar, você tem que desinstalar a versão antiga, senão, dará conflito ao compilar seu
código.

- Acesse o menu Component\Install Package
- Localize lingha "Internet Direct Indy for D7..."
- Clique nela e clique em REMOVE.

*Remova as DCU do Indy versão 7*
- Acesse a pasta C:\Arquivos de programas\Borland\Delphi7\Lib
- Apague todas as DCU iniciadas por Id (ID*.DCU). São aproximadamente 177 arquivos.
Obs.: Recomendo mover para uma outra pasta, para caso de precisar delas novamente.

INSTALANDO O INDY 10
- Feche o Delphi;
- Execute o indy10.1.5_d7.exe


CORRIGINDO A INSTALAÇÃO
- Abra o Delphi.
- Ele exibirá a mensagem "Cannot load package dclindycore70.bpl...", perguntando se deseja tentar abrí-la

novamente na próxima vez que iniciar o Dephhi. Clique em NÃO para todas as perguntas.
- Acesse o menu Tools\Environment Options;
- Na aba Library, clique no botão ao lado do Library Path;
- Verifique se a pasta C:\Arquivos de Programas\Indy for Delphi 7\LibD7 está na lista.
- Se não estiver, adicione.


REGISTRANDO OS PACOTES (DPK) DO COMPONENTE
- Acesse a pasta onde o Indy10 foi instalado (C:\Arquivos de Programas\Indy 10 for Delphi 7) e abra a

pasta Source. Lá existem 4 subpastas.

- Agora vamos compilar os pacotes (DPK) na ordem correta.
Apenas compilar! Você não conseguie instalá-los.


1. IndySystem70.dpk (pasta \System)
2. IndyCore70.dpk (pasta \Core)
3. IndyProtocols70.dpk (pasta \Protocols)
4. dclIndyCore70.dpk (pasta \Core)
5. dclIndyProtocols70.dpk (pasta \Protocols)


- Agora, acesse o menu Components\Install Package;
- Cliquem em ADD e adicione as duas BPL's da pasta C:\Arquivos de Programas\Indy for Delphi 7\LibD7:
- dclIndyCore70.bpl
- dclIndyProtocols.bpl

- Feche o Delphi e entre novamente.


Algumas instruções estão no link abaixo, mas não funciona exatamente como deveria:
http://www.indyproject.org/Sockets/Docs/indy10Installation.de.aspx