Array
(
)

Parametro de Data no Mysql ? Como Pasar ?

Semchance
   - 06 nov 2005

Pessoal, alguem pode me ajudar já procurei no Forum mas nenhuma das respostas que achei funcionou estou tentando passar datas como parametro para uma query o banco é Mysql a query é essa abaixo

sqlteste.Close;
sqlteste.SQL.Clear;
sqlteste.SQL.Add(´select * from produtos´);
sqlteste.SQL.Add(´where data_compra between :dataInicial and :dataFinal´);
sqlteste.SQL.Add(´group by data_compra order by data_compra´);
sqlteste.ParamByName(´dataInicial´).AsDate := DateTimePicker1.Date;
sqlteste.ParamByName(´dataFinal´).AsDate := DateTimePicker12.Date;
sqlteste.Open;

Mas dá a seguinte mensagem de erro:
´Operation not applicable´
Estou usando o componente TQuery.


No MysQl, a Query roda desde que eu passe a data como ´aaaa/mm/dd´.
Como faço pra rodar essa query no delphi ??
Valeu...


Sabado
   - 06 nov 2005

Var
Inicio: String;
Final: String;
begin
If Datetimepicker2.Date < Datetimepicker1.Date Then
begin
ShowMessage(´Intervalo de datas inválido, a data inicial é maior que a data final!´);
Datetimepicker2.Date := Datetimepicker1.Date;
end
Else
begin
Inicio := DateToStr(Datetimepicker1.Date);
Final := DateToStr(Datetimepicker2.Date);
query1.Close;
query1.SQL.Clear;
query1.SQL.Text := ´SELECT * FROM boleto WHERE dtpagto >=:pInicial and dtpagto<=:pFinal ORDER BY dtpagto ASC´;
query1.ParamByName(´pInicial´).AsDateTime := StrToDate(Inicio);
query1.ParamByName(´pFinal´).AsDateTime := StrToDate(Final);
query1.Open;
dbgrid1.SetFocus;
Label5.caption := ´Registros: ´ + IntToStr(query1.RecordCount);
end;


Semchance
   - 06 nov 2005

Fiz exatamente a rotina acima e não funcionou deu a mesma mensagem deu erro.


Wiltonfenix
   - 07 nov 2005

Você deve passar a data no formato YYYY-MM-DD:

sqlteste.Close;
sqlteste.SQL.Clear;
sqlteste.SQL.Add(´select * from produtos´);
sqlteste.SQL.Add(´where data_compra between :dataInicial and :dataFinal´);
sqlteste.SQL.Add(´group by data_compra order by data_compra´);
sqlteste.ParamByName(´dataInicial´).AsDate := Copy(DateToSTR(DateTimePicker1.Date),7,4)+´-´+Copy(DateToSTR(DateTimePicker1.Date),4,2); +´-´+Copy(DateToSTR(DateTimePicker1.Date),1,2)
sqlteste.ParamByName(´dataFinal´).AsDate := Copy(DateToStr(DateTimePicker12.Date),7,4)+´-´+Copy(DateToStr(DateTimePicker12.Date),4,2)+´-´+Copy(DateToStr(DateTimePicker12.Date),1,2);
sqlteste.Open;


Sabado
   - 07 nov 2005

Vamos resolver seu problema do inicio:,
O MySQL armazena a data no formato YYYY-mm-dd.
Por isso, você precisa criar uma variavel para transformar o formato data dd/mm/YYYY, assim:var

k,k1,k2: string;
data: string;
begin
k:=copy(edit2.text,1,2);
k1:=copy(edit2.text,4,2);
k2:=copy(edit2.text,7,4);
data:=k2+´-´+k1+´-´+k;

Quando for gravar, o sistema enviará o formato correto para o MySQL.
Depois disto voce pode utilizar aquela rotina que ja te enviei.

Um abraço


Wiltonfenix
   - 07 nov 2005

Desculpem, existe um erro na dica que passei. Nos parâmetros:

sqlteste.ParamByName(´dataInicial´).AsString := Copy(DateToSTR(DateTimePicker1.Date),7,4)+´-´+Copy(DateToSTR(DateTimePicker1.Date),4,2); +´-´+Copy(DateToSTR(DateTimePicker1.Date),1,2)
sqlteste.ParamByName(´dataFinal´).AsString := Copy(DateToStr(DateTimePicker12.Date),7,4)+´-´+Copy(DateToStr(DateTimePicker12.Date),4,2)+´-´+Copy(DateToStr(DateTimePicker12.Date),1,2);


Semchance
   - 07 nov 2005

Pessoal, agradeço a atenção de todos...
E a forma que eu consegu foi essa:

sqlteste.Close;
sqlteste.SQL.Clear;
sqlteste.SQL.Add(´select * from produtos´);
sqlteste.SQL.Add(´where data_compra between :dataInicial and :dataFinal´);
sqlteste.SQL.Add(´group by data_compra order by data_compra´);

sqlteste.Params[0].Value := FormatDateTime(´yyyy,mm,dd´,dtini.Date);
sqlteste.Params[1].Value := FormatDateTime(´yyyy,mm,dd´,dtfim.Date);
sqlteste.Open;
Onde tdtini e dtFinal são doi DateTimerPicker
Valeu...