Página 1 de 1
problema com delete e where
Enviado: 04 Out 2021 09:31
por mmarcondes
bom dia amigos, final de semana iniciei meus estudos com mysql, consegui incluir, alterar, etc, mas quando fui deletar deu erro, passei o domingo olhando e não consegui entender a mensagem de erro.
na minha tabela itens, tem um campo onde eu mesclo letras e números ( referencia varchar(30) ), ele fica mais ou menos assim o conteúdo : gspx4857214104
fiz um teste tentando apagar um registro com base nele : delete from itens_pedidos where referencia = gspx4857214104, no fonte ficou assim :
pesquisa := AllTrim(v_ref)
cQuery_del := "delete from itens_pedidos where referencia = "+pesquisa
oQuery_del := oMySQL:query( cQuery_del )
if oQuery_del:neterr()
Alert(oQuery_del:error())
return( nil )
endif
o erro apresentado foi :
unknown column "gspx4857214104" in where clause
agradeço qualquer ajuda, obrigado.
problema com delete e where
Enviado: 04 Out 2021 10:43
por Fernando queiroz
use a chave única da tabela para deletar , ficou meio estranho o seu delete
DELETE FROM regrastributarias WHERE Regra_id ='" + STRZERO(::nRegra_Id,11,0) + "'"
problema com delete e where
Enviado: 04 Out 2021 11:09
por mmarcondes
eu li sobre isso, mas fiquei curioso, pq passei anos usando dbf e tudo dava certo, pq o mysql não entende algo tão simples ?
problema com delete e where
Enviado: 04 Out 2021 11:22
por alxsts
Olá!
O conteúdo de campos não numéricos, incluido dates, tem que estar entre aspas simples:
Código: Selecionar todos
delete from itens_pedidos where referencia = 'gspx4857214104'
problema com delete e where
Enviado: 04 Out 2021 12:05
por JoséQuintas
mmarcondes escreveu:eu li sobre isso, mas fiquei curioso, pq passei anos usando dbf e tudo dava certo, pq o mysql não entende algo tão simples ?
E quem disse que o DBF aceitaria isso?
Aliás.... o erro é exatamente o mesmo: o campo não existe.
problema com delete e where
Enviado: 04 Out 2021 12:08
por mmarcondes
agora deu certo e entendi o pq, tem que ter aspas simples antes e depois.
obrigado alxsts !!
problema com delete e where
Enviado: 04 Out 2021 12:17
por mmarcondes
José, eu entendi a lógica do teu teste, realmente, se não tiver o campo não tem como, seja em qual linguagem ou banco de dados for, na minha humilde opinião isso é muito primário, e como eu havia dito, eu já tinha me certificado disso, passei o dia todo repetindo a rotina sem entender o erro, mas com a ajuda do amigo alxsts eu entendi algo que tinha lido ontem, que para o mysql tudo é texto, independente se for numero, data e string, e é aqui o problema de quem estava acostumado só com dbf, no mysql vc precisa colocar uma string dentro de aspas simples para que seja entendido como tal, senão o mysql vai entender que aquilo é outra coisa e vai dar erro mesmo !
problema com delete e where
Enviado: 04 Out 2021 12:56
por alxsts
Olá!
mmarcondes escreveu:para o mysql tudo é texto, independente se for numero, data e string,
Não, isto não é verdade. Veja:
Código: Selecionar todos
-- deletar um pedido identificado por um campo numérico (idPedido 5964)
DELETE FROM tbOrder WHERE idOrder = 5964 -- campo numérico não precisa de aspas
-- deletar os pedidos de uma data
DELETE FROM tbOrder WHERE dtOrder >= '2021-09-30' AND dtOrder <= '2021-09-30' -- campo data precisa de aspas
-- deletar os itens de um pedido específico com itens com código alfanumérico
DELETE FROM tbOrder WHERE idOrder = 5964 AND idProd = '21RBS' -- campo alfanumérico precisa de aspas
-- deletar os pedidos cancelados -> fgCancel é uma coluna do tipo boolean
DELETE FROM tbOrder WHERE fgCancel = TRUE -- campo boolean não precisa de aspas
problema com delete e where
Enviado: 04 Out 2021 14:25
por JoséQuintas
mmarcondes escreveu:e é aqui o problema de quem estava acostumado só com dbf, no mysql vc precisa colocar uma string dentro de aspas simples para que seja entendido como tal, senão o mysql vai entender que aquilo é outra coisa e vai dar erro mesmo
Em DBF:
Não é diferença de DBF e SQL.
Uma coisa é usar uma variável pré-definida no APLICATIVO, onde o aplicativo faz tudo.
Outra coisa é passar o comando para o servidor, que desconhece qualquer variável do aplicativo.
Se usar o mesmo conceito com DBF, vai remover muitas limitações que existem hoje no Clipper/Harbour.
problema com delete e where
Enviado: 06 Out 2021 09:08
por JoséQuintas
JoséQuintas escreveu:Se usar o mesmo conceito com DBF, vai remover muitas limitações que existem hoje no Clipper/Harbour.
Só exemplo disso, que acaba tornando tudo igual.
O mais comum é usar no DBF:
Código: Selecionar todos
cNome := "JOSE"
SET FILTER TO NOME = cNome
SET FILTER TO NOME="&cNome"
Isso deixa o filtro preso a existir a variável
Código: Selecionar todos
cNome := "JOSE"
cFilter := [NOME = "] + cNome + ["]
SET FILTER TO &cFilter
Agora o filtro só contém texto fixo.
Nenhum erro por variável não existir depois.
Assim fica visível que DBF ou SQL, a indicação de string precisa das aspas.
Não depender de variáveis é obrigatório para comandos SQL, mas pode ajudar muito no DBF/aplicativo também.