parametros TSqlQuery

Delphi

15/12/2010

Pessoal

Parece que o SqlQuery não aceita passar param ou no que estou errando.

Tenho um form onde o usuario informa data e data2 para emissao das vendas de um certo cliente.
O SqlQuery não está deixando, o que está errado ????

Grato.

SELECT B.NOME, A.DATA, A.DOCUMENTO, A.NUMERO, A.TOTAL
            FROM TVENDAS A INNER JOIN TBCLIENTES B ON (A.CLIENTE = B.CONTROLE)
WHERE (A.DATA >= :DATA1 AND A.DATA <= :DATA2)

Grato


Marcos Roberto

Marcos Roberto

Curtidas 0

Respostas

Felipe Caputo

Felipe Caputo

15/12/2010

depois de colocar o commando sql vc tem q ir na propriedade Params do Objeto e definir o tipo de cada parâmetro. Logo depois vai estar funcionando perfeitamente
GOSTEI 0
Marcos Roberto

Marcos Roberto

15/12/2010


 Felipe

 Isto eu já fiz, mas o problema continua assim mesmo, parece que o bug é quando usa data.
 fico no aguardo.
 vlw

GOSTEI 0
Felipe Caputo

Felipe Caputo

15/12/2010

se você usa firebird, não existe parâmetro do tipo datetime, escolha ftDate, ftTime ou ftTimeStamp
GOSTEI 0
Marcos Roberto

Marcos Roberto

15/12/2010

Estou usando o componente TDateTimePicker e notei que para consultar no IBExpert tenho que passar MM/DD/AAAA e o TdateTimePicker parece que manda DD/MM/AAAA.
Tentei mudar o parametro data para string, depois peguei o TdateTimePicker e converti para 'MM/DD/AAAA' e passei para o Parametro, mesmo assim continua o erro 'dbExpress Error: Operation not Supported' quando chamo o relatorio QuickReport.

* funcao MMDDAAAA retorna uma data 'MM/DD/AAAA' já  confirmei tá ok
  Edit1 e Edit2 sao do form do componente TDateTimePicker

segue:

    sqlComando := 'SELECT * FROM TVENDAS ';
    sqlComando := sqlComando + ' INNER JOIN TBCLIENTES ON TVENDAS.CLIENTE = TBCLIENTES.CONTROLE ';
    sqlComando := sqlComando + 'WHERE (TVENDAS.DATA >= :data1)  AND  (TVENDAS.DATA <= :data2) ';
    dm1.QryVLDia.Active := false;
    dm1.QryVLDia.Close;
    dm1.QryVLDia.SQL.Clear;
    dm1.QryVLDia.SQL.Add(sqlComando);
    dm1.QryVLDia.ParamByName('data1').AsString := MMDDAAAA(dateToStr(Edit1.date)) ;
    dm1.QryVLDia.ParamByName('data2').AsString := MMDDAAAA(dateToStr(Edit2.date));
    dm1.QryVLDia.Open;
    dm1.QryVLDia.Active := true;

* já tentei verificar o dm1.QryVLDia.Reccount  ai o erro passa a ser neste ponto


    F_Vdia.QuickRep1.Preview;


* se comentar a linha que chama o 'F_Vdia.QuickRep1.Preview' o erro não apresenta mais. Então se tudo ocorreu bem porque o dm1.QryVLDia.Reccount  dá o erro ???

Estou cansado, rsrsrsrsrsrs

Valeu

GOSTEI 0
Leonardo Xavier

Leonardo Xavier

15/12/2010

Tente assim:

    dm1.QryVLDia.Close;
    dm1.QryVLDia.SQL.Clear;
    dm1.QryVLDia.SQL.Add(' SELECT * FROM TVENDAS INNER JOIN TBCLIENTES ON TVENDAS.CLIENTE = TBCLIENTES.CONTROLEWHERE (TVENDAS.DATA >= :data1)  AND  (TVENDAS.DATA <= :data2)');
    dm1.QryVLDia.ParamByName('data1').AsString := MMDDAAAA(dateToStr(Edit1.date)) ;
    dm1.QryVLDia.ParamByName('data2').AsString := MMDDAAAA(dateToStr(Edit2.date));
    dm1.QryVLDia.prepared;    
    dm1.QryVLDia.Open;

GOSTEI 0
Marcos Roberto

Marcos Roberto

15/12/2010


Ainda não funciona.
Vou refazer o relatorio para ver se resolve;
Já tentei usar o relatorio sem passar os parametros e func legal. o problema são os parametros, vou investigar mais.

vlw

GOSTEI 0
Marcos Roberto

Marcos Roberto

15/12/2010


 Resolvi da seguinte forma, ja incluo as datas formatas na sentença SQL e depois faço a query.
 Mas ainda preciso saber como efetuar querys passando parametros, se alguem puder me ajudar agradeço.

 vlw

GOSTEI 0
Andre Nobre

Andre Nobre

15/12/2010

MRoberto, tenta fazer assim:

[code]
SQLQuery.close;
SQLQuery.sql.clear;
SQLQuery.sql.add(SELECT B.NOME, A.DATA, A.DOCUMENTO, A.NUMERO, A.TOTAL );
SQLQuery.sql.add(FROM TVENDAS A INNER JOIN TBCLIENTES B ON (A.CLIENTE = B.CONTROLE) );
SQLQuery.sql.add(WHERE (A.DATA >= :DATA1 AND A.DATA
GOSTEI 0
Andre Nobre

Andre Nobre

15/12/2010

MRoberto,

Esqueci de falar, que tem que usar a unit "SQLTimSt".

Falow...
GOSTEI 0
POSTAR