Fórum Erro ==gt; DbExpress Error: Operation not supported. #287672

11/07/2005

0

Galera

Fiz algumas pesquisa no forum para tentar fazer uma rotina de pesquisa entre datas, mas infelizmente são muito confusas.
Então estou tentando fazer uma simples consulta, mas não esta dando certo, vou ser bem detalhista, pois espero que alguem me informe o correto erro que estou fazendo.

Bom pra comerçar tenho um DataModule
Propriedade Name: Dm

Coloquei um SqlDataSet com a propriedades a serem:
Name: dst_Rpt_Clientes
CommandText : select * from Clientes order by CodCliente
Sqlconnect : SqlConnect1

Bom agora no formulario
Coloquei 2 edit´s uma para receber o dia e outro para receber o mês
Os dados que informo aos edits são :
Por exemplo:
28 para o dia
11 para o mes


O codigo do evento OnExit do ultimo edit que dá o erro:

DbExpress Error: Operation not supported.

Codigo...
// Desliga sqldataset
Dm.dst_Rpt_Clientes.Active := False;
// passa o novo command text.
Dm.dst_Rpt_Clientes.CommandText := ´select * from Clientes where (extract(day from DtNasc) = :dia_desejado) and (extract(month from DtNasc) = :mes_desejado)´;
// Passagem de parametros
Dm.dst_Rpt_Clientes.ParamByName(´dia_desejado´).AsInteger := StrToInt(Edit1.Text);
Dm.dst_Rpt_Clientes.ParamByName(´mes_desejado´).AsInteger := StrtoInt(Edit2.Text);
// Ativa sqldataset
Dm.dst_Rpt_Clientes.Active := True;
// Se for vazio avisa (Isempty é melhor quando usado em rede, do que recordcount).
if Dm.dst_Rpt_Clientes.IsEmpty then
Application.MessageBox(´Não há aniversariantes para o período.´,´Erro ao localizar´,mb_IconInformation);

Bom, tentei descrever o que esta acontecendo e quero mostrar os dados de resultado em um relatorio usando o quick report.

Creio que o problema esta no uso de algum comando acima, entao peço a comunidade que se possível me passe o codigo correto ou me informe um código melhor para eu trabalhar com os componentes que devo utilizar.

Grato a todos
Valnei


Objetivacreator

Objetivacreator

Responder

Posts

12/07/2005

Cabelo

Dm.dst_Rpt_Clientes.Active := False; Dm.dst_Rpt_Clientes.SQL.Clear; Dm.dst_Rpt_Clientes.SQL.ADD(´select * from Clientes where (extract(day from DtNasc) = :dia_desejado) and (extract(month from DtNasc) = :mes_desejado)´); // Passagem de parametros Dm.dst_Rpt_Clientes.ParamByName(´dia_desejado´).AsInteger := StrToInt(Edit1.Text); Dm.dst_Rpt_Clientes.ParamByName(´mes_desejado´).AsInteger := StrtoInt(Edit2.Text); // Ativa sqldataset Dm.dst_Rpt_Clientes.Active := True; // Se for vazio avisa (Isempty é melhor quando usado em rede, do que recordcount). if Dm.dst_Rpt_Clientes.IsEmpty then Application.MessageBox(´Não há aniversariantes para o período.´,´Erro ao localizar´,mb_IconInformation);


Tenta fazer assim...


Responder

Gostei + 0

12/07/2005

Jairroberto

Olá, Valnei!

Por acaso você conectou o SQLDataSet a um DBGrid através de um DataSource? Se fez, esse é o problema, pois o SQLDataSet é unidirecional e portanto não é suportado pelo DBGrid que avança e retorna nos registros constantemente para montar o controle. Nesse caso você deve utilizar um DataSetProvider e um ClientDataSet, conectando esse último ao DataSource do DBGrid.

Aproveito para comentar que, na minha opinião, a utilização de parâmetros nesse tipo de Query, onde os parâmetros são alimentados logo após a definição do CommandText, é desnecessária. Em vez disso eu prefiro usar a função Format para criar o CommandText:

// passa o novo command text já com os parâmetros
Dm.dst_Rpt_Clientes.CommandText := Format(´select * from Clientes where (extract(day from DtNasc) = ¬s) and (extract(month from DtNasc) = ¬s)´, [Edit1.Text, Edit2.Text]); 


A propósito, o Cabelo não percebeu que você está usando SQLDataSet, que não possui nenhuma propriedade chamada ´SQL´, não adianta procurar.


Um abraço,
Jair


Responder

Gostei + 0

13/07/2005

Objetivacreator

Valeu Jair.

As informações foram muito úteis e comecei a entender realmente o que a paleta dbexpress.

Um abraço

Valnei


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar