Fórum Geração de Script #393898
18/01/2011
0
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
(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
Curtir tópico
+ 0
Responder
Posts
18/01/2011
Marco Salles
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
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
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;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)