Clipper On Line • Ver Tópico - duvidas com comando mysql?
Página 1 de 1

duvidas com comando mysql?

MensagemEnviado: 15 Mai 2019 22:04
por pena
Boa noite pessoal, estou utilizando mysql e com classes, só que esta me retornando erros que via heidysql funcionam, precisava de uma ajuda, alguem estaria disponivel pra trocarmos uma ideia
ja de saida vou colocar um comando aqui que esta retornando erro
   cSql:=""
   If Bloq
      cSql:="Start Transaction; "
   endif
   cSql+="Select * from CadCof where Id_key = "+Str(cCod,7)+";"
   oQCadCof := oServer:Query( cSql )
   If oServer:NetErr()
     MsGInfo("Erro ao executar sql - Selecionando codigo "+csql )
   Endif

pois entao, se o Bloq vem falso, funciona, senao da erro, comando basico do mysql

duvidas com comando mysql?

MensagemEnviado: 16 Mai 2019 01:08
por alxsts
Olá!
pena escreveu:ja de saida vou colocar um comando aqui que esta retornando erro

Qual erro? Você não informa mas pode-se imaginar alguns tipos conforme o teu exemplo.
pena escreveu:pois entao, se o Bloq vem falso, funciona, senao da erro, comando basico do mysql

Qual o conteúdo de cCod? Não dá para saber mas, se você está usando Str(), supõe-se que seja uma conversão de numérico para carácter. Se isto for verdade, o valor de cCod deveria ser colocado entre aspas na string a enviar ao banco de dados. Assim, teriamos:
"Select * from CadCof where Id_key = '"+Str(cCod,7)+"';"  // Note as aspas simples

Olhando o código, se bloq vem como verdadeiro, a string ficaria ""
"Start Transaction; Select * from CadCof where Id_key = '"+ <algum conteúdo> + "';"

Não mostra a sequência do código. Por que abrir uma transação? Existe o respectivo commit? Sabe o que é e para que serve uma transação?

Veja se este conteúdo interessa: Transação em base de dados

duvidas com comando mysql?

MensagemEnviado: 16 Mai 2019 08:11
por pena
Sei sim o que é uma transação, trabalho com cobol x mysql a 7 anos, no entanto, aqui na empresa não quisemos arriscar o que no cobol funciona bem, então o bloqueio é tratado numa tabela a parte, e funciona bem. Neste caso o projeto é particular, e dae eu pensei, "impossível que uma ferramenta do padrão do mysql não funcione o bloqueio", então estava tentando fazer funcionar. A documentação do mysql diz, o arquivo tem que ser innodb, e se tiver marcado autocommit = true, a cada select se inicia com begin transaction, o select nao esta correto ali, faltou um comando, mas como estava em teste, passou despercebido, mas igual, se eu rodo no heidi ele executa, e ali nao, o comando faltou Lock in Share Mode, um detalhe, se passar bloq falso, ele funciona
   cSql:=""
   If Bloq
      cSql:="Start Transaction; "
   endif
   msgstop("entrei")
   cSql+="Select * from CadCof where Id_key = "+Str(cCod,7)+" Lock in Share Mode;"
   oQCadCof := oServer:Query( cSql )
   If oServer:NetErr()
     MsGInfo("Erro ao executar sql - Selecionando codigo "+csql )
   Endif


ninguém bloqueia registro com mysql? Não deve ser um bixo de sete cabeças, alguem saberia dizer onde acho uma documentação?

duvidas com comando mysql?

MensagemEnviado: 16 Mai 2019 08:58
por alxsts
Olá!

Pode-se utilizar SELECT ... FOR UPDATE.

Veja este material na documentação do MySQL: 15.7.2.4 Locking Reads.

duvidas com comando mysql?

MensagemEnviado: 16 Mai 2019 09:08
por pena
mas segundo a documentação, eu tenho que abrir uma transação junto sempre, então não é essa a questão, a questão é que ele não esta executando o select

duvidas com comando mysql?

MensagemEnviado: 01 Jun 2019 21:34
por JoséQuintas
Reabrindo o assunto....
Se não me engano, é BEGIN TRANSACTION

Que eu saiba, isso é para atualizações, pra cancelar algo que foi feito.
Sendo assim, não tem sentido colocar isso num SELECT, que é apenas de leitura.

pena escreveu:dae eu pensei, "impossível que uma ferramenta do padrão do mysql não funcione o bloqueio"


Só não é algo comum.

https://www.google.com/search?q=mysql+lock&ie=&oe=

duvidas com comando mysql?

MensagemEnviado: 02 Jun 2019 21:05
por pena
pra mim é o básico de uma engenharia de software, dei o meu jeito, mas não insisti em fazer funcionar com a ferramenta mysql