Para ver se o statement estava realmente correto, eu mandei que o
Smalltalk gerasse para mim um arquivo texto com ele.
Ao abrir o arquivo, vi que o statement estava com a sintaxe correta.
Eu até verifiquei a rotina que pega os registros do banco de dados,
mas os valores vêm normalmente...
O problema é realmente na hora de passar o string gerado ou de exibí-
lo para mim, é aí que ele aparece cortado.
O pior é que se eu gero um texto desse tamanho de alguma outra forma
(por exemplo, concatenando informações que eu mesmo tenha digitado),
ele gera o texto sem problemas também, mas o exibe inteiro.
Ainda estou procurando algo no VisualAge para ver se acho alguma
coisa ou a razão do problema.
Obrigado!
--- In st-br@yahoogroups.com, "Sebastian Sastre" <ssastre@...> wrote:
>
> Olá Danilo,
> certamente o default de um string *não é* ficar "comido" como para
ter que
> pedi-lo enteiro. Ele é o que é.
> Pode ser que o framework que interfaceia com o teu rdbms esteja te
fazendo
> passar um mal momento. Outra coisa pode ser o driver de odbc.
> Eu tentaría com opçoes ou com alguma ferramenta de diagnostico que
permita estar
> 100% certo de que o problema e dentro do st ou fora (drives, rdbms
encoding
> issues, etc).
> Se o string que teu codigo forma executa bem via um cliente
externo, nao vejo
> porque questiona lo.
> hope this helps,
> Sebastian
>
>
>
> _____
>
> De: st-br@yahoogroups.com [mailto:st-br@yahoogroups.com] En nombre
de
> danilo.marcondes
> Enviado el: Tuesday, January 13, 2009 11:21
> Para: st-br@yahoogroups.com
> Asunto: [st-br] Problemas para gerar statement SQL
>
>
>
> Estou programando uma classe no Smalltalk (VisualAge 6.0), que lê
um
> registro de uma tabela em um banco de dados e monta um statement de
> UPDATE, baseado nos nomes dos campos e nas informações que cada um
> deles contém.
>
> O statement UPDATE é gerado corretamente, e fica com um tamanho de
> pouco menos de 600 caracteres.
>
> Não sei por qual razão, quando o statement é passado para ser
> executado, o smalltalk "come" o final dele. Dessa forma, quando
tento
> executar o UPDATE, o programa me retorna erro de sintaxe.
>
> Esse é o meu método:
>
> ====================================================================
> alteraLinha: wrow chave: wchv tabela: wtab
>
> | wconweb wtabweb wstm wcr waux wlst |
>
> wconweb := AbtDbmSystem activeDatabaseConnectionWithAlias: 'WEBDB'.
>
> wtabweb := wconweb openTableNamed: #Tabela ifError: [ :werr |
> self rc: (self trataErro: werr).
> ^false
> ].
>
> wlst := wtabweb columnNamesIfError: [ :werr |
> self rc: (self trataErro: werr).
> ^false
> ].
>
> wcr := ((String with: (Character value: 13)), (String with:
> (Character value: 10))).
> wstm := 'UPDATE ', wtab, ' SET ', wcr.
>
> wlst do:[ :wnom |
>
> wstm := wstm, wnom, ' = '.
> wstm := wstm, (self asSql: (wrow at: (wnom
> asSymbol))).
> wstm := wstm, ', ', wcr.
>
> ].
>
> wstm := wstm copyFrom: 1 to: (wstm size - 4).
> wstm := wstm, ' WHERE ', wchv, ' = ', (self asSql: (wrow at: (wchv
> asSymbol))).
>
> wconweb executeSQLStatement: wstm ifError: [ :werr |
> self rc: (self trataErro: werr).
> ^false
> ].
>
> ====================================================================
>
> Obs.: O método "self asSql:" apenas transforma a informação que
> estiver em determinado campo no registro, para incluí-la na
> formatação correta no statement de update.
>
> Não sei se existe algum atributo na classe String que me permita
> enviar todos os caracteres.
> Achei um tanto quanto incomum esse evento, mas se alguém souber de
> alguma coisa, agradeço muito!
>
> Obrigado.
>