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

sábado, 18 de dezembro de 2010

Delphi - Access violation at address 03491BC9 in module 'dbexpora.dll'

Erro ao executar um clientdataset que chama uma procedure Oracle:
Access violation at address 03491BC9 in module 'dbexpora.dll'. Read of address 00000088.

Este erro sempre ocorre quando há algum erro na passagem dos parâmetros.

Se você estiver passando os parâmetros via CommandText, pode ter esquecido algum ":" antes do parâmetro. Ou então o SQLQuery está com parâmetros diferentes do ClientDataset

Delphi - Rave Reports: Unable to gain control of Rave data Communication System.

Erro: Unable to gain Control of RAVE Data communication System

Ao abrir duas aplicações que utilizam o mesmo relatório Rave simultaneamente, é apresentada. A solução é bastante simples, bastando abrir o arquivo de projeto (DPR) e acrescentar o seguinte:

program Project1;
uses
SysUtils, RPDefine, Forms,
Unit1 in ‘Unit1.pas’ {Form1};
{$R *.res}
begin
RPDefine.DataID := IntToStr(Application.Handle);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Solução extraída do Blog do André Ferreira de Moraes
http://anfm.blogspot.com/2009/04/erro-unable-to-gain-control-of-rave.html

Delphi - chamando procedure com parâmetro tipo data: errro Invalid Field Type

Ao dar Execute em um client dataset que está chamando uma procedure em Oracle, que possui parâmetros tipo data, ocorre o erro Invalid Field Type.

Para resolver, você deve usar uma variável do tipo SQLTimeStamp para passar os parâmetros.

Adicione a unit SQLTimST no Uses;

Exemplo:
var
myTimeStamp: TSQLTimeStamp;
begin

cdsAuxGeral.Close;
cdsAuxGeral.CommandText :=
' begin ' +
' pkg_teste.RetornaVendasPeriodo(:p_DataHoraIni, :p_DataHoraFim, :lst);'+
' end; ';
cdsAuxGeral.Params.Clear;

cdsAuxGeral.Params.CreateParam(ftTimeStamp,'p_DataHoraIni', ptInput);
cdsAuxGeral.Params.CreateParam(ftTimeStamp,'p_DataHoraFim', ptInput);


cdsAuxGeral.Params.CreateParam(ftCursor,'Lst', ptOutput);

myTimeStamp := DateTimeToSQLTimeStamp(pPeriodoIni);
cdsAuxGeral.Params.ParamByName('p_DataHoraIni').AsSQLTimeStamp := myTimeStamp;

myTimeStamp := DateTimeToSQLTimeStamp(pPeriodoFim);
cdsAuxGeral.Params.ParamByName('p_DataHoraFim').AsSQLTimeStamp := myTimeStamp;

cdsAuxGeral.Execute;

Delphi - Rave Reports imprimindo o texto 'INVALID' no datatext

Isso acontece quando seu ClientDataset foi alterado (ao adicionar ou modificar algum campo).

No projeto do relatório, com o RaveReports aberto, localize seu RvDataSetConnection (lado direito da tela), clique com o botão direito e selecione REFRESH. E confirme com SIM para atualizar os campos.

Configurando TNSNAMES.ORA no Oracle Client

- Configurando o TNSNAMES.ORA no Oracle XE Client:

- Menu Iniciar\Executar: regedit;
- Crie um string value (valor de sequencia) chamada TNS_ADMIN em HKLM\Software\Oracle\KEY_XEClient\ , com value data = C:\XEClient\NETWORK\ADMIN


- Crie o arquivo tnsnames.ora na pasta C:\XEClient\NETWORK\ADMIN;
- E coloque configure suas conexões dentro dele.


***************************************
Configuring tnsnames.ora for Oracle 10g XE client

1. open regedit
2. create a string value HKLM\Software\Oracle\KEY_XEClient\TNS_ADMIN with value data = 'C:\XEClient\NETWORK\ADMIN'
3. create the tnsnames.ora file C:\XEClient\NETWORK\ADMIN\tnsnames.ora
4. Fill this file with your data conections;

quarta-feira, 1 de dezembro de 2010

Delphi - Internal error L681 ao dar o BUILD no projeto

No Delphi, ao dar um BUILD no projeto, ocorre o erro de compilação:
"Internal error L681".

Solução:
O erro ocorre pois a declaração de 'overload' de alguma função está replicada no bloco IMPLEMENTATION, e deve estar apensa no bloco INTERFACE.

Você deve retirar a palavra 'overload;' da função, no bloco IMPLEMENTATION

Ex.:

interface

function RetornaValor(pParam : String): Integer; overload;

implementation

function RetornaValor(pParam : String): Integer; overload;
begin
...
end;

terça-feira, 26 de outubro de 2010

Delphi - Erro Provider not exported ao abrir ClientDataSet criado dinamicamente

Delphi

Erro Provider not exported ao abrir (Open) ClientDataSet criado dinamicamente.

O erro ocorreu comigo pois eu estava setando o datasetprovider de forma incorreta.

aCds - meu clientedataset
aDsp - meu datasetprovider

(errado)

aCds.ProviderName := aDsp.Name;


(correto)
aCds.SetProvider(aDsp);



Felipe

sábado, 1 de maio de 2010

Como converter e-mails do Thunderbird para o Outlook Express

Infelizmente a Mozilla não disponibiliza nenhuma função para exportar os e-mails do Thunderbird para o Outlook Express.

Para quem precisar, basta usar uma ferramenta chamada IMAPZIE.
http://www.broobles.com/imapsize/download.php (se o link não funcionar, dê uma procurada no Google).

Depois de instalar:
- Abra o programa e acesse o menu Tools\Mbox2Eml.
- Clique no botão Select MBOX Files to convert.
- Localize a pasta onde o Thunderbird gravar os e-mails;
- Se você estiver na pasta do Thunderbird e não aparecer nada, basta renomear as pastas do Thuderbird, adicionando a extensão .MBOX no final Ex. (Pasta1 ==> Pasta1.mbox).
- Selecione as pastas e clique em Abrir.
- Defina a pasta de destino;
- E clique no botão Convert.
- Serão gerados vários arquivos .EML.
- Daí é só abrir o Outlook Express, e arrastar os e-mails para dentro do Outlook Express.

Dica: se você tiver muitas pastas para serem convertidas, faça a conversão uma pasta por vez, pois os e-mails serão convertidos todos na mesma pasta, e você não saberá depois à qual pasta eles pertence.

Bom, é isso aí.

terça-feira, 30 de março de 2010

Mensagem: Aplicativo não inicializado corretamente (0x0150002)

Ao abrir sua aplicação, aparece a mensagem:
"Aplicativo não inicializado corretamente (0x0150002). Clique em OK para finalizar a execução."

Esta mensagem só ocorre se sua aplicação utiliza as funções das DLLs da Bematech: sigma_bema.dll e libeay32.dll (dlls que tem funções que facilitam a geração de arquivos para atender a lei PAF-ECF).

Essas DLLs exigem framework versão mínima 2.0 (informação confirmada com Suporte da Bematech).

Se a máquina não tiver o framework instalado, acesse o site da microsoft, faça o download do Framework 2.0 ou posterior, de preferência a mais recente, instale, reinicie, e pronto!


http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&displaylang=pt-br

Napa