Possivel Bug datasnap 2010
25/01/2010
0
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
Rad Informatica
Posts
26/01/2010
Rad Informatica
obrigado..
26/01/2010
Emerson Nascimento
TBlobField(qryArquivos.FieldByName('BINARIO')).LoadFromFile(DirAtual + '\' + arquivo);
porque você precisa criar um stream para gravar o arquivo no campo?
28/01/2010
Rad Informatica
Clique aqui para fazer login e interagir na Comunidade :)