Possivel Bug datasnap 2010

25/01/2010

1

Galera esse problema esta me tirando do serio
meu delphi 2010 esta atualizado com o ultimo update (4/5)

em um sistema com servidor datasnap
nao consigo ler uma tabela contendo uma coluna image (sql server 2005)
quando o conteudo do registro contem um arquivo qualquer..
quando se tem imagens gravadas nessa coluna ele le normal.

o que faço e o seguinte:
e uma rotina de atualização do executavel nos terminais.

no servidor quando aberto eu pego o executavel do sistema e outros arquivos (dll, imagens etc)
e gravo em uma tabela (cada registro contem um arquivo), la eu gravo tbem em outra coluna o nome do arquivo
e em outra a data e hora do arquivo.

la no cliente eu verifico se o arquivo local e diferente do que esta no banco de dados.
se for eu pego do banco e salvo local.
funcionava blz antes quando nao usada datasnap. ou seja qdo buscava direto do banco
tanto e que no servidor de aplicativo eu consigo abrir a query que contem a instrucao que busca os registros da tabela

la no cliente qdo tento abrir simplesmente congela, ou as x da uns erro  com varios caracteres malucos na tela.
se no client eu tentar buscar apenas a linha que contem imagens ele busca.
quando mudo para a linha que contem o executavel do programa trava.
com isso minha rotina de atualizacao ta indo para as cucuias se isso nao for resolvido.


no terminal faço assim:

qryArquivos.close;
qryArquivos.commandtext :='SELECT * FROM ARQUIVOS WHERE ARQUIVO=' + quotedstr(arquivo);
qryArquivos.Open;
if qryArquivos.RecordCount > 0 Then
       TBlobField(qryArquivos.FieldByName('BINARIO')).SaveToFile(DirAtual + '\' + arquivo);

//QUANDO EXCLUI TODOS OS REGISTROS DO BANCO CONSEGUI RODAR AS LINHAS ACIMA.
//POREM DEPOIS ELE NAO CONSEGUE ABRIR.


no servidor faço assim

mem := TMemoryStream.create;

qryArquivos.close;
qryArquivos.commandtext := 'SELECT * FROM ARQUIVOSGEP WHERE ARQUIVO=' + quotedstr(arquivo);
qryArquivos.Open; -> TRAVA BEM AQUI E NAO PASSA.
qryArquivos.edit;

qryArquivos.fieldbyname('DATA').AsDateTime := dataarq;
qryArquivos.fieldbyname('ARQUIVO').asstring := arquivo;
mem.LoadFromFile(DirAtual + '\' + arquivo);
mem.Seek(0, soFromBeginning);
TBlobField(qryArquivos.FieldByName('BINARIO')).LoadFromStream(mem);
qryArquivos.post;
qryArquivos.applyupdates(1);

o objeto qryArquivos é um clientdataset que esta ligado ao servidor de aplicativos pelo remoteserver
e informado o respectivo providerName




ACHO IMPROVAVEL QUE ESTEJA FAZENDO ALGO ERRADO.
pois como disse qdo é outro tipo de arquivo que ta gravado no banco (imagem por ex.) nao da problema.



abraço a todos.
Wilton

Responder

Posts

E ai galera, nada??? nenhum especialista no datasnap ai de plantão para socorrer??

obrigado..
Responder
não sei se há alguma implicação nisso, mas porque não fazer somente:

TBlobField(qryArquivos.FieldByName('BINARIO')).LoadFromFile(DirAtual + '\' + arquivo);

porque você precisa criar um stream para gravar o arquivo no campo?

Responder
Bom quanto a criar um streem funcionava perfeito usando componentes padroes para acesso ao banco.   e o problema nem e na hora de ler o arquivo e jogar para o banco   o arquivo ja esta no banco, eu nao consigo e simplemente abrir a tabela (retornar a linha) que contem o registro com um arquivo .exe gravado na coluna interessante que se na linha tiver gravrado uma imagem.jpg eu abro a tabela normalmente.   vou tentar o seguinte: apagar os registros, tentar incluir os registro pelo clientdataset, conforme o exemplo sem o streem para ver se depois ele consegue ler isso de volta.    
Responder