Geração de Script

Delphi

18/01/2011

 Bom pessoal, meu objetivo é até fácil, gerar um script DDL em lote para liberação em vários clientes.  Mas tem um caraterística que está dificultando a coisa acontecer. Na tabela que estou usando para criar esses scripts possui uma campo image(SQL Server 2008), onde armazeno conteúdo binário, no caso dos scritps são imagens *.gif.   insert into [TABELA] values
(10, 1, '9_2081.gif',
0x47494638396120002000F70000EBEBEBF89804E4D2B7FDF489EBF2FEEABC76E3E3E3FAA706F6B32BEDE2D6E 8ECF7FEC219F0F1F1EADDD36A6A6AF4EEE8F5F3EDFFFFFFDAC8ACFBCE68DAA857E6C788868787E3A349E5BD 85FAFAF4FBD837D5B48BD8DAE4F9EF7BFBCC24E9D9C9FFB409FEE653FABC1FFBE146FDC657F3AC39E8AA58D DBA94F9F9F9D3D3D5FDD52CF4A430EBB55CC9955CC8C9CAFFFBAFF1E5D9E6C5C8BE8E6AF4F9FDFEB411C07D 28E8C293E7D692E1E5EED9AC4CE5B8B7EBC767EE9B0AEADD8EF8F4E9E9B726E8C640E49C34F9F7EFD2A564D4 B564F1E2CEF5F4F3DFDDDEFFE23AFFCE3AEBD37AFEBD17EDA338C3C8D3595655DFD9CAA4A5A5F7F2E6DCE0E9 C29671DFC572F39F19E6E8E8F7FCFFADB5C3DDD6D0F5B618E8B535E6E6E6DCB14298989CE0E0E3D8C194F4CAC ADFD6DFF0AA42DCB37FEACF74FBFBFCE8A3221B1818FFF663BBC1C9D3D5DCEFA718CBA249DB943CF5DADAF3A E20DFB756F4CC4FF9D245F7B113FFB519C9AC82CDB387EFE9E1D1AF7CA8AEBAB5ACABB5B9BEF7F3E8F1E69FF7 F2E7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000002C00000000200020000008A200FF081C48B0A0C18308132 A5CC8B0A1C38710234A9C481122A08B7F0065C4281023C78E1A2F6A242832E3C6911B530EF4F81164C8932B43A 24C5992A447982055E6AC19F3254F963671F634F95366509E2E897E041A536852992899EE6C09136AD3962C6756,
0, getdate(), null) Onde essa sopinha de letras é o arquivo(conteúdo binário). Eu já fiz um teste e funciona realmente. Eu tenho uma programa auxiliar que sobe os aqruivos, depois eu faço uma consulta e fiz o script na mão, copiando a sopa de letras e colando depois, para testar. Enfim, mas são muitos arquivos/registros, não tem como fazer isso na mão. Então nesse meu programa auxiliar eu tentei gerar os scripts, mas na hora do conteúdo binário ser concatenado com a string do script, me traz um valor totalmente diferente. Ja tentei: qrySelecionar.FieldByName('CONTEUDO_BINARIO').Value; qrySelecionar.FieldByName('CONTEUDO_BINARIO').AsString; qrySelecionar.FieldByName('CONTEUDO_BINARIO').Asvarant; Nenhum do três deram certo. Alguém algum idéria?     O Código todo está abaixo:   procedure TForm1.GerarScript;
var
     memScript : TMemo;
     sDDL : AnsiString;
     sConteudoBinario : TBlobData;
begin
     memScript := TMemo.Create(nil);
     memScript.Parent := pnl2;
     try
          qrySelecionar.Close;
          qrySelecionar.Open;           qrySelecionar.First;
          while not qrySelecionar.Eof do
          begin
               memScript.Lines.Clear;                sConteudoBinario := qrySelecionar.FieldByName('CONTEUDO_BINARIO').Value;
               
               sDDL :=   'SELECT     INSERT INTO FW_CONTEUDOS_BINARIOS VALUES (' + #13#10
                         + qrySelecionar.FieldByName('TIPO_CONTEUDO_BINARIO').AsString + ',' + #13#10
                         + qrySelecionar.FieldByName('COD_CONTEUDO_BINARIO').AsString + ',' + #13#10
                         + QuotedStr(qrySelecionar.FieldByName('NOME_ARQUIVO').AsString) + ',' + #13#10
                         + sConteudoBinario + ',' + #13#10
                         + '0, GETDATE(), Null)';                memScript.Lines.Add(sDDL);
               memScript.Lines.SaveToFile(PATH_ARQUIVOS + '\Script_' +  StringReplace(FormatDateTime('dd:nn:ss:mm', Now), ':', '_', [rfReplaceAll, rfIgnoreCase]) + '.sql');
          end;
     finally
          FreeAndNil(memScript);
     end;
end;
Obrigado
Fabio Colli

Fabio Colli

Curtidas 0

Respostas

Marco Salles

Marco Salles

18/01/2011

Se eu entendi direito , eu acho que vc vai precisar de Uma classe que transformam Imagem -> em Stream -> Texto  que são essas letrinhas que vc tem   A conversão Seria assim   Texto --> Stream -->> Imagem   De posse disso poderia fazer assim  
var
bitmap:TBitmap;
MemStream:TMemoryStream;
Lines:TStrings;
begin
  bitmap:=TBitmap.Create;
  MemStream:=TMemoryStream.Create;
  Lines:=TStringList.Create;
  try
    Lines.LoadFromFile(CaminhoDoSeuArquivoHexadecimal);
    TStreamConverter.HexTextToStream( Lines, MemStream);   
     bitmap.LoadFromStream(MemStream);
     SeuDataSet.Append;
     SeuDataSet.FieldByName('Campo').Assign(Image1.Picture.Bitmap); //campo do Tipo TGraphic
    cds.Post;
finally
  begin
   bitmap.Free; 
   MemStream.Free;
   Lines.free;
  end;
end;
  Claro que o coração de tudo esta nesta Classe TStreamConverter que não é nativa do Delphi Procure sobre esta classe na net se não encontrar outra Alternativa mais fácil para o que vc deseja  
GOSTEI 0
POSTAR