Olá Jecel!
Essa parte, (wstm := wstm copyFrom: 1 to: (wstm size - 4)), onde ele
tira os caracteres é proposital, para retirar um "AND" final do
statement.
Mas um programador da empresa onde trabalho me deu uma ajuda, acho
que ele já tinha enfrentado algum problema parecido com o meu, hehe.
Aqui onde trabalho, opero bastante com bancos do DB2 (IBM) e alguns
do Access. Dessa vez, estava mexendo com um banco MySQL.
No banco DB2, por exemplo, quando tenho um campo no banco de dados do
tipo CHAR(15), e digito uma palavra com 10 caracteres, o resto o
próprio DB2 completa com espaços em branco.
Porém, se eu tenho mesmo caso em um banco MySQL, ele completa o
restante com um caracter de valor nulo, que no smalltalk é o
caracter "(Character value: 0)".
Esse era o problema: Quando o programa ia concatenando os registros
no meu statement, e encontrava um campo desse tipo, esse caracter
nulo "quebrava" a String, e então eu obtia o erro na síntaxe.
Para solucionar o problema, precisei apenas utilizar o
método "abtWithoutOccurencesOf: (Character value: 0)", retirando esse
caracter nulo quando o campo fosse CHAR.
Agora o programa monta os statements corretamente.
Achei importante postar essa mensagem, caso alguém enfrente o mesmo
problema, para não ter de "quebrar a cabeça" como eu, hehe.
De qualquer forma, muito obrigado!
Danilo Marcondes
--- In st-br@yahoogroups.com, "Jecel Assumpcao Jr" <jecel@...> wrote:
>
> Danilo,
>
> [...]
> > 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.
> [...]
> > wstm := wstm copyFrom: 1 to: (wstm size - 4).
> [...]
>
> Aqui você está "comendo o final do texto" de propósito. E logo na
linha
> seguinte passa a ser o meio do texto de modo que imagino que não é
disso
> que você está falando. Só achei o -4 meio estranho - você não só
apaga a
> ',' e o CR e LF mas também o caracter final do resultado de (self
> asSql: (wrow at: (wnom asSymbol))). É sempre um espaço ou algo
assim?
>
> Eu aproveitaria os recursos interativos do ambiente de programação.
> Execute a expressão passo a passo no "debugger" (sem entrar em cada
> submétodo na primeira vez) e uso os inspetores para ver os detalhes
de
> cada objeto envolvido.
>
> Boa sorte!
> -- Jecel
>