Fórum erro em agrupamento de sql #226803

19/04/2004

0

Olá,

Tenho um list box que recebe informações de uma query,
só que não sei qual o erro quando tento agrupar informações
relativas ao item selecionado no listbox e tento jogar num
dbtext.


Se alguém puder ajudar agradeço.




*********FormShow
begin
ListBox1.Clear;
DM1.qTM.First;
while not DM1.qTM.Eof do
begin
ListBox1.Items.Add(DM1.qTM.FieldValues[´nome´]);
DM1.qTM.Next;
end;
end;


****************ListBox1Click
var
i,j: Integer;
sel:string;
begin
for i := 0 to (ListBox1.Items.Count - 1) do begin
if ListBox1.Selected[i] then
sel:=ListBox1.Items[i];
end;

with DM1.qAnT1 do
begin
DM1.qAnT1.Close;
DM1.qAnT1.SQL.Clear;
DM1.qAnT1.SQL.Add(´SELECT nome FROM estatistica´);
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´);
DM1.qAnT1.SQL.Add(´AND e_digi=1 and e_digi=12 and e_digi=13 and e_digi=123´);

DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel;
DM1.qAnT1.open;
end;
j:=DM1.qAnT1.ExecSQL;
ShowMessage(inttostr(j));


dbt.Caption:=inttostr(j);
end;


N1

N1

Responder

Posts

19/04/2004

Aroldo Zanela

Olá, DM1.qAnT1.SQL.Add(´AND e_digi=1 and e_digi=12 and e_digi=13 and e_digi=123´);

e_digi não pode ter todos estes valores ao mesmo tempo, então, acho que o correto seria o operador [b:5ed250fd28]Or [/b:5ed250fd28]e não [b:5ed250fd28]And[/b:5ed250fd28].

j:=DM1.qAnT1.ExecSQL; ShowMessage(inttostr(j)); dbt.Caption:=inttostr(j); end;


Aqui usa-se RecordCount ao invés de ExecSQL para obter a quantidade de linhas no resultset.


Responder

Gostei + 0

19/04/2004

N1

Valeu pela informação, com a claúsula OR funcionou mas agora acontece que o valor correto só é exibido após o showmessage, o que está faltando para corrigir?
Isto é, se eu retirar apenas o showmessage não mostra o valor
correto!!!???? :?:


Responder

Gostei + 0

19/04/2004

Vilaca

j:=DM1.qAnT1.ExecSQL; ShowMessage(inttostr(j)); dbt.Caption:=inttostr(j);


Não sei se é isso, mas tente inverter a ordem dos comandos

j:=DM1.qAnT1.ExecSQL;
dbt.Caption:=inttostr(j);
ShowMessage(inttostr(j));


Responder

Gostei + 0

19/04/2004

N1

É isso ai.

Obrigado


Responder

Gostei + 0

19/04/2004

Aroldo Zanela

[quote:64ee6862b9]j:=DM1.qAnT1.ExecSQL; ShowMessage(inttostr(j)); dbt.Caption:=inttostr(j);


Não sei se é isso, mas tente inverter a ordem dos comandos

j:=DM1.qAnT1.ExecSQL;
dbt.Caption:=inttostr(j);
ShowMessage(inttostr(j));[/quote:64ee6862b9]

Tem certeza que usou ExecSQL ao invés de RecordCount?


Responder

Gostei + 0

19/04/2004

N1

Desculpe pessoal, mas testei com um valor que pensei que
o resultado estivesse correto, mas não estava.
O problema persiste tanto com execSQL quanto com o recordcount.
O showmessage enquanto ativo permite que
o valor real seja lido no dbtedit, tentei com um label simples mas
não funciona.


Responder

Gostei + 0

19/04/2004

Marco Salles

Tem Umas Peças Neste Quebra Cabeça Que Não estão Encaixando

[b:e6f1d9f089]a)Voce Cita o [b]DbTetx[/b:e6f1d9f089][/b]
primeira Mensagem
tento jogar num dbtext.

sétima mensagem
Outrora Voce Cita Um BdEbitText
o valor real seja lido no [b:e6f1d9f089]dbtedit[/b:e6f1d9f089], tentei com um label simples mas não funciona.

[b:e6f1d9f089]O DbText e Nem O DbEdit Tem a Propiedade Caption :?: :?: :?: [/b:e6f1d9f089]
Voce a Usa:
dbt.Caption:=inttostr(j);
????

[b:e6f1d9f089]b)[/b:e6f1d9f089] se voce tiver usando o evento onclick do listBox voce pode substituir o Comando de varredura
for i := 0 to (ListBox1.Items.Count - 1) do begin 
if ListBox1.Selected[i] then 
sel:=ListBox1.Items[i]; 
end; 

Por Uma única Instrução
sel:=ListBox1.Items.Strings[Listbox1.ItemIndex];


[b:e6f1d9f089]c)[/b:e6f1d9f089]
Tem certeza que usou ExecSQL ao invés de RecordCount?

Voce esta usando um componente [b:e6f1d9f089]AdoQuery[/b:e6f1d9f089] :?: :?: ...Qual é o seu banco de dados :?: :?:A Consulta é muito simples para não funcionar :( :( :( ...Porque voce não usa um query :?: :?:
Se Não me enganos dois métodos Que voce usa são do componente TAdoQuery:
ADOQuery1.Parameters.ParamByName(´.....´).value:=sel;
j:=ADOQuery1.ExecSQL;

Usando a Query Seria Um Pouco Diferente:
query1.ParamByName(´selec´).Value:=sel;
j:=query1.RecordCount;//Conforme sugestão do Aroldo



Responder

Gostei + 0

19/04/2004

N1

Salles,

Estou usando ACCESS , ADOTable.
DM1.qAnT1.Close;
DM1.qAnT1.SQL.Clear;
DM1.qAnT1.SQL.Add(´SELECT count(nome) FROM estatistica´);
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´);
DM1.qAnT1.SQL.Add(´HAVING (e_digi=123 OR e_digi=12 OR e_digi=13 OR e_digi=1)´);
DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel;
i:=DM1.qAnT1.ExecSQL;
ShowMessage(inttostr(i));

DM1.qAnT1.open;
Percebi sobre o dbtedit, mesmo assim o valor ainda não está correto.


Responder

Gostei + 0

19/04/2004

Marco Salles

Eu não trabalho com este banco e arranho um pouco a linguagem sql, que sabemos sofre pequenas alterações em cada Banco...Mas se Não me Falha a analogia, o comando select que voce empregou em sua estrutura,usou o Comando [b:4da1614f4e]Count[/b:4da1614f4e], que teoricamente calcula o número de elementos que satisfazem determinda condição...É Exatamente o Que Voce querendo fazer quando usa a instrução:[b:4da1614f4e]i:=DM1.qAnT1.ExecSQL;[/b:4da1614f4e] ..Então o que eu sugiro e usar o Valor que Count Retorna e sua Consulta SqL Ficaria desta forma:

var 
i,j: Integer; 
sel:string; 
begin
sel:=ListBox1.Items.Strings[Listbox1.ItemIndex];
DM1.qAnT1.Close; 
DM1.qAnT1.SQL.Clear; 
DM1.qAnT1.SQL.Add(´SELECT count(nome) as Quantidade FROM estatistica´); 
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´); 
DM1.qAnT1.SQL.Add(´and (e_digi=123 OR e_digi=12 OR e_digi=13 OR e_digi=1)´); 
DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel; 
DM1.qAnT1.open; 
i:=DM1.qAnT1.FieldByName(´Quantidade´).asInteger;
label1.Caption:=Inttostr(i);
end;


[b:4da1614f4e]De Notícias...[/b:4da1614f4e]


Responder

Gostei + 0

19/04/2004

Marco Salles

Eu não trabalho com este banco e arranho um pouco a linguagem sql, que sabemos sofre pequenas alterações em cada Banco...Mas se Não me Falha a analogia, o comando select que voce empregou em sua estrutura,usou o Comando [b:4a74f95561]Count[/b:4a74f95561], que teoricamente calcula o número de elementos que satisfazem determinda condição...É Exatamente o Que Voce querendo fazer quando usa a instrução:[b:4a74f95561]i:=DM1.qAnT1.ExecSQL;[/b:4a74f95561] ..Então o que eu sugiro e usar o Valor que Count Retorna e sua Consulta SqL Ficaria desta forma:

var 
i,j: Integer; 
sel:string; 
begin
sel:=ListBox1.Items.Strings[Listbox1.ItemIndex];
DM1.qAnT1.Close; 
DM1.qAnT1.SQL.Clear; 
DM1.qAnT1.SQL.Add(´SELECT count(nome) as Quantidade FROM estatistica´); 
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´); 
DM1.qAnT1.SQL.Add(´and (e_digi=123 OR e_digi=12 OR e_digi=13 OR e_digi=1)´); 
DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel; 
DM1.qAnT1.open; 
i:=DM1.qAnT1.FieldByName(´Quantidade´).asInteger;
label1.Caption:=Inttostr(i);
end;


[b:4a74f95561]De Notícias...[/b:4a74f95561]


Responder

Gostei + 0

19/04/2004

Marco Salles

Eu não trabalho com este banco e arranho um pouco a linguagem sql, que sabemos sofre pequenas alterações em cada Banco...Mas se Não me Falha a analogia, o comando select que voce empregou em sua estrutura,usou o Comando [b:51a03dd812]Count[/b:51a03dd812], que teoricamente calcula o número de elementos que satisfazem determinda condição...É Exatamente o Que Voce querendo fazer quando usa a instrução:[b:51a03dd812]i:=DM1.qAnT1.ExecSQL;[/b:51a03dd812] ..Então o que eu sugiro e usar o Valor que Count Retorna e sua Consulta SqL Ficaria desta forma:

var 
i,j: Integer; 
sel:string; 
begin
sel:=ListBox1.Items.Strings[Listbox1.ItemIndex];
DM1.qAnT1.Close; 
DM1.qAnT1.SQL.Clear; 
DM1.qAnT1.SQL.Add(´SELECT count(nome) as Quantidade FROM estatistica´); 
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´); 
DM1.qAnT1.SQL.Add(´and (e_digi=123 OR e_digi=12 OR e_digi=13 OR e_digi=1)´); 
DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel; 
DM1.qAnT1.open; 
i:=DM1.qAnT1.FieldByName(´Quantidade´).asInteger;
label1.Caption:=Inttostr(i);
end;


[b:51a03dd812]De Notícias...[/b:51a03dd812]


Responder

Gostei + 0

19/04/2004

Marco Salles

Eu não trabalho com este banco e arranho um pouco a linguagem sql, que sabemos sofre pequenas alterações em cada Banco...Mas se Não me Falha a analogia, o comando select que voce empregou em sua estrutura,usou o Comando [b:09baa12809]Count[/b:09baa12809], que teoricamente calcula o número de elementos que satisfazem determinda condição...É Exatamente o Que Voce querendo fazer quando usa a instrução:[b:09baa12809]i:=DM1.qAnT1.ExecSQL;[/b:09baa12809] ..Então o que eu sugiro e usar o Valor que Count Retorna e sua Consulta SqL Ficaria desta forma:

var 
i,j: Integer; 
sel:string; 
begin
sel:=ListBox1.Items.Strings[Listbox1.ItemIndex];
DM1.qAnT1.Close; 
DM1.qAnT1.SQL.Clear; 
DM1.qAnT1.SQL.Add(´SELECT count(nome) as Quantidade FROM estatistica´); 
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´); 
DM1.qAnT1.SQL.Add(´and (e_digi=123 OR e_digi=12 OR e_digi=13 OR e_digi=1)´); 
DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel; 
DM1.qAnT1.open; 
i:=DM1.qAnT1.FieldByName(´Quantidade´).asInteger;
label1.Caption:=Inttostr(i);
end;


[b:09baa12809]De Notícias...[/b:09baa12809]


Responder

Gostei + 0

19/04/2004

Marco Salles

Eu não trabalho com este banco e arranho um pouco a linguagem sql, que sabemos sofre pequenas alterações em cada Banco...Mas se Não me Falha a analogia, o comando select que voce empregou em sua estrutura,usou o Comando [b:5f9e89c356]Count[/b:5f9e89c356], que teoricamente calcula o número de elementos que satisfazem determinda condição...É Exatamente o Que Voce querendo fazer quando usa a instrução:[b:5f9e89c356]i:=DM1.qAnT1.ExecSQL;[/b:5f9e89c356] ..Então o que eu sugiro e usar o Valor que Count Retorna e sua Consulta SqL Ficaria desta forma:

var 
i,j: Integer; 
sel:string; 
begin
sel:=ListBox1.Items.Strings[Listbox1.ItemIndex];
DM1.qAnT1.Close; 
DM1.qAnT1.SQL.Clear; 
DM1.qAnT1.SQL.Add(´SELECT count(nome) as Quantidade FROM estatistica´); 
DM1.qAnT1.SQL.Add(´WHERE nome=:selec´); 
DM1.qAnT1.SQL.Add(´and (e_digi=123 OR e_digi=12 OR e_digi=13 OR e_digi=1)´); 
DM1.qAnT1.parameters.ParamByName(´selec´).Value:=sel; 
DM1.qAnT1.open; 
i:=DM1.qAnT1.FieldByName(´Quantidade´).asInteger;
label1.Caption:=Inttostr(i);
end;


[b:5f9e89c356]De Notícias...[/b:5f9e89c356]


Responder

Gostei + 0

19/04/2004

N1

Agora sim Salles,

Fiz mais testes e realmente funcionou.

Obrigado


:D


Responder

Gostei + 0

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

Aceitar