duvidas com comando mysql?

Forum sobre SQL.

Moderador: Moderadores

pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

duvidas com comando mysql?

Mensagem 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

Código: Selecionar todos

   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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

duvidas com comando mysql?

Mensagem 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:

Código: Selecionar todos

"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 ""

Código: Selecionar todos

"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
[]´s
Alexandre Santos (AlxSts)
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

duvidas com comando mysql?

Mensagem 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

Código: Selecionar todos

   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?
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

duvidas com comando mysql?

Mensagem por alxsts »

Olá!

Pode-se utilizar SELECT ... FOR UPDATE.

Veja este material na documentação do MySQL: 15.7.2.4 Locking Reads.
[]´s
Alexandre Santos (AlxSts)
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

duvidas com comando mysql?

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

duvidas com comando mysql?

Mensagem 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=
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

duvidas com comando mysql?

Mensagem 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
Responder