Problemas com anos de 4 dígitos no MySQL
21/03/2003
0
Estou tendo problemas com campos do tipo DATE no MySQL
Utilizo a biblioteca Zeos para conectar ao MySQL e quando insiro com o TZMySQLQuery
dados do tipo Data (com 4 dígitos no ano) em uma tabela ele grava de forma errada. Por exemplo:
04/03/2003 ele está gravando 04/03/2020, parece que ele está pegando o parâmetro que
eu passo só até o 8º caracter e então entende que eu entrei com 04/03/20, quando
converte passa o ano para 4 dígitos e fica 04/03/2020. Como corrigir esta salada,
ou seja como fazer ele entender e gravar o ano de 4 dígitos como eu indiquei no parâmetro?
E também gostaria de saber o que há de errado com este comando SQL:
update estoque_lotes set qtd=qtd-1 where (produto=1) and (dt_validade=´04/03/2003´)
Ele não está modificando nenhum registro(há um registro com as informações da
cláusula where batendo) e não está apresentando qualquer mensagem de erro.
Mais uma vez o problema parece ter ligação com a data porque quando eu mudo o comando
para que compare somente o campo produto ele realiza a baixa no estoque.
Desde já agradeço.
Vicente Corrêa da Silva Neto.
Utilizo a biblioteca Zeos para conectar ao MySQL e quando insiro com o TZMySQLQuery
dados do tipo Data (com 4 dígitos no ano) em uma tabela ele grava de forma errada. Por exemplo:
04/03/2003 ele está gravando 04/03/2020, parece que ele está pegando o parâmetro que
eu passo só até o 8º caracter e então entende que eu entrei com 04/03/20, quando
converte passa o ano para 4 dígitos e fica 04/03/2020. Como corrigir esta salada,
ou seja como fazer ele entender e gravar o ano de 4 dígitos como eu indiquei no parâmetro?
E também gostaria de saber o que há de errado com este comando SQL:
update estoque_lotes set qtd=qtd-1 where (produto=1) and (dt_validade=´04/03/2003´)
Ele não está modificando nenhum registro(há um registro com as informações da
cláusula where batendo) e não está apresentando qualquer mensagem de erro.
Mais uma vez o problema parece ter ligação com a data porque quando eu mudo o comando
para que compare somente o campo produto ele realiza a baixa no estoque.
Desde já agradeço.
Vicente Corrêa da Silva Neto.
Anonymous
Curtir tópico
+ 0
Responder
Posts
21/03/2003
Jonhy Riper
Ai Vicente, está função eu utilizo nos meus programas, apezar de utilizar Oracle, o controle eu faço no programa, verifique se possui alguma utilidade pra você, caso contrario ATÉ MAIS;
*********Colocar no Form Inicial
procedure TF_Principal.FormCreate(Sender: TObject);
begin
AcertaPadraoData;
end;
*************************************
Coloque a funcao em uma Unit sem form
procedure AcertaPadraoData;
const
arrShortDayNames: array[1..7] of string[3] = (´Dom´,´Seg´,´Ter´,´Qua´, ´Qui´,´Sex´,´Sab´);
arrLongDayNames: array[1..7] of string[15] = (´Domingo´,´Segunda´,´Terça´, ´Quarta´,´Quinta´,´Sexta´, ´Sábado´);
arrShortMonthNames: array[1..12] of string[3] = (´Jan´,´Fev´,´Mar´,´Abr´, ´Mai´,´Jun´,´Jul´,´Ago´,´Set´,´Out´,´Nov´,´Dez´);
arrLongMonthNames: array[1..12] of string[15] = (´Janeiro´,´Fevereiro´, ´Março´,´Abril´,´Maio´, ´Junho´,´Julho´,´Agosto´, ´Setembro´,´Outubro´, ´Novembro´,´Dezembro´);
var
ii: integer;
begin
ShortDateFormat := ´dd/mm/yyyy´;
DateSeparator:=´/´;
DecimalSeparator := ´,´;
ThousandSeparator := ´.´;
for ii := 1 to 7 do
begin
ShortDayNames[ii] := arrShortDayNames[ii];
LongDayNames[ii] := arrLongDayNames[ii];
end;
for ii := 1 to 12 do
begin
ShortMonthNames[ii] := arrShortMonthNames[ii];
LongMonthNames[ii] := arrLongMonthNames[ii];
end;
end;
*********Colocar no Form Inicial
procedure TF_Principal.FormCreate(Sender: TObject);
begin
AcertaPadraoData;
end;
*************************************
Coloque a funcao em uma Unit sem form
procedure AcertaPadraoData;
const
arrShortDayNames: array[1..7] of string[3] = (´Dom´,´Seg´,´Ter´,´Qua´, ´Qui´,´Sex´,´Sab´);
arrLongDayNames: array[1..7] of string[15] = (´Domingo´,´Segunda´,´Terça´, ´Quarta´,´Quinta´,´Sexta´, ´Sábado´);
arrShortMonthNames: array[1..12] of string[3] = (´Jan´,´Fev´,´Mar´,´Abr´, ´Mai´,´Jun´,´Jul´,´Ago´,´Set´,´Out´,´Nov´,´Dez´);
arrLongMonthNames: array[1..12] of string[15] = (´Janeiro´,´Fevereiro´, ´Março´,´Abril´,´Maio´, ´Junho´,´Julho´,´Agosto´, ´Setembro´,´Outubro´, ´Novembro´,´Dezembro´);
var
ii: integer;
begin
ShortDateFormat := ´dd/mm/yyyy´;
DateSeparator:=´/´;
DecimalSeparator := ´,´;
ThousandSeparator := ´.´;
for ii := 1 to 7 do
begin
ShortDayNames[ii] := arrShortDayNames[ii];
LongDayNames[ii] := arrLongDayNames[ii];
end;
for ii := 1 to 12 do
begin
ShortMonthNames[ii] := arrShortMonthNames[ii];
LongMonthNames[ii] := arrLongMonthNames[ii];
end;
end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)