Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vinicius Santanna

Query??? Oq fiz de errado???

Recommended Posts

É o seguinte, fiz um Form(Form18) p/ meu programa para gerar um relatorio (no QR mesmo)...o relatorio é na verdade uma lista de chamadas, no banco de dados tenho uma tabela em paradox chamada Turma, que tem um campo tambem chamado turma. Dentro de um outro Form(Form6) inseri um campo do tipo Edit ( Edit1) onde o usuario digita o numero da turma que deseja obter a lista de chamada, quando clica no botão do Form6 vai pro form18, que é onde está a Query1(a que ta me dando dor de cabeça).

Dei uma estudada (e fuçada na net tbm...rsrsr). e cheguei a esse codigo:

procedure TForm18.FormCreate(Sender: TObject);beginQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add('select * From Turma WHERE Turma = :paramTURMA');Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Query1.Open;end;
Só que ñ me retorna dado algum apesar de estar tudo aparentemente correto, e o mais estranho é que tambem ñ da nenhum erro. Desculpem-me se o erro estiver "na cara" mas sou iniciante e ainda to aprendendo com esses erros bestas. Valew galera espero que alguem possa me ajudar.

OBS: Se precisarem coloco o codigo fonte na net p/ vocês olharem melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo o que entendi você esta querendo montar um relatório, no caso que esta no Form18, certo? O Form6 você têm um botão e um edit que digita o código da turma que deseja visualizar no relatório, certo ? No caso o que você têm no código do botão que chama o relatório ? Como esta o seu relatório ? No caso quais os componentes tem dentro dele ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, você entendeu tudo certo! O relatorio esta +/- assim,Tenho 8 QRLabel indicando (em ordem crescente) : Titulo do Formulario, instrutor, monitor, modulo, nome do aluno, assinatura(espaço p/ o aluno assinar a presença), Data, Hora.Tenho + 9 QRDBText :QRDBText1: deverá indicar a data local.QRDBText2: deverá indicar a hora local.QRDBText3: deverá indicar o Módulo ->Tabela TURMA-> Linha correspondente a turma digitada no Form6 campo Modulo.QRDBText4: deverá indicar os dias de aulas -> Tabela TURMA-> Linha correspondente a turma digitada no Form6 campo Dias.QRDBText5: deverá indicar os horario da aula-> Tabela TURMA-> Linha correspondente a turma digitada no Form6 campo Horario.QRDBText6: devera indicar o nome do Instrutor-> Tabela TURMA ->Linha correspondente a turma digitada no Form6 campo Instrutor.QRDBText7: deverá indicara o nome do monitor-> Tabela TURMA ->Linha correspondente a turma digitada no Form6 campo Monitor.QRDBText8: deverá mostrar o nome de todos os alunos cujo : o campo Situacao da tabela Alunos seja <> 'Trancado' e 'Termino', e que o Campo Turma da mesma tabela tenha o mesmo valor digitado no Form6.QRDBText9: devera ter apenas uma linha para os alunos assinarem.Coloquei tambem um DataSource1 e um Query1De certo modo é até simples mas nada do que eu fiz deu certo e não sei + oq fazer, espero que possa me ajudar de algum modo.Desde já abradeçoAbraços, Vinicius Sant'Anna

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso se será listado vários registros, deverá mudar os componente TQDBText para TQRExpr, ou seja, os componentes Expression devem de ficar dentro do Detail, no caso assim listando os registros que a query possuir, provavelmente seu relatório será montado por:TitleColumnHeaderDetailPageFootSendo que no relatório a propriedade DataSet deve de estar ligada com a query que estiver no relatório.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio fiz o relatorio do jeito que você falo(só que em Band deixei só Page Header/footer e Detail), mas não consigo exibir meus dados no relatorio.

Estou usando o seguinte comando SQL

//Pega Informações do BDQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add('select * From Turma WHERE Turma = :paramTURMA');Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Query1.Open;//Pega Informações do BD  2Query2.Close;Query2.SQL.Clear;Query2.SQL.Add('select Nome_do_Aluno From Alunos WHERE Turma = :paramTURMA');Query2.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Query2.Open;

Mas quando dou Preview isso só me retorna um relatorio em branco,sem erros, só um relatorio em branco(com as Labels, data e hora), é como se o banco de dados estivese vazio,mas não esta... Olhei nos exemplos que você me falou mas não achei nada que me ajudase.

Que erro que eu posso estar cometendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim liguei com a Query1...mas no caso como eu faria como uma query só?

ficaria assim, certo?

Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select * From Turma WHERE Turma = :paramTURMA');Query1.SQL.Add('select Nome_do_Aluno From Alunos WHERE Turma = :paramTURMA');Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Query1.Open;
Mas da o seguinte erro:

"Project Project1.exe raise exception class EDBEgieneError with message 'Invalid use of Key word.

Token: select

Line Number 2' .Process stopped. Use Step or Tun to continue"

 

Nos QRExpr coloquei assim na exepression : "Query1.Modulo" (isso para o campo Modulo) e agora ao inves de aparecer tudo em branco aparece "Unkonown Function : Query1.Modulo" (isso em todas as QRExpr)

 

Agradeço a compreensão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa corrigir o seu SQL, ficaria algo do tipo:

 

Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select *');Query1.SQL.Add('From Turma, Alunos');Query1.SQL.Add('WHERE turma.codTruma = aluno.codTurma');Query1.SQL.Add('and turma.Turma = :paramTURMA');Query1.Open;

Somente precisa corrigir os nomes dos campos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara valew mesmo por ter me ajudado até aqui....obrigado!!!!!Mas sem querer abusar, continua dando problema. É que quando dou Preview isso só me retorna um relatorio em branco,sem erros, só um relatorio em branco(com as Labels, data e hora), é como se o banco de dados estivese vazio,mas não esta.....já adicionei varios valores na tabela do DB e testei com todos ele mas nada, você acha que ao invez de colocar "select * from..." eu devo tentar especificar campo por campo? tipo "select Turmas, modulo From Turmas"?...........Vo tentar fazer isso depois eu posto aki!......Valew!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Marcio...fiz a mudança em que eu tinha falado, mas não alterou nada, estou usando o seguinte codigo:

 

procedure TForm18.FormCreate(Sender: TObject);beginQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add('select Turma.Modulo, Turma.Instrutor, Turma.Monitor, Alunos.Nome_do_Aluno From Turma, Alunos');Query1.SQL.Add('WHERE turma.Turma = alunos.Turma ');Query1.SQL.Add('and turma.Turma = :paramTURMA');Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Query1.Open;end;

E no relatorio estou usando o QRExpr, com a expression = Query1.modulo (isso para o campo modulo, e assim por diante), ja tentei tambem Query1.Turma.modulo mas ai deu o seguinte erro : "Unkonown Function : Query1.Turma.Modulo". Tem como eu puxar os dados de outra forma, usando outra expression por exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Heheheh!!!! to quase conseguindo fiz algumas alterações na logica do programa mas o erro principal era no WHERE! Ao invez de usar o WHERE agora estou usando o JOINS(O correto) .

Ficou assim :

procedure TForm6.Button1Click(Sender: TObject);begin Form18.Query1.Close; Form18.Query1.SQL.Clear; Form18.Query1.SQL.Add('select Turma.Modulo, Turma.Instrutor, Turma.Monitor, Alunos.Nome_do_Aluno  From Turma, Alunos'); Form18.Query1.SQL.Add('inner join Alunos on ( Turma.Turma = Alunos.Turma)'); Form18.Query1.SQL.Add('where Turma.Turma =:paramTURMA'); Form18.Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text; Form18.Query1.Open;   if Form18.Query1.recordcount >0 then	  Form18.QuickRep1.Preview   else	  showmessage('Nenhum Registro Encontrado');Form6.Hide;end;
/////

Ai vai um tutorial que me ajudou bastante(caso alguem venha ter a mesma duvida que eu): http://www.linhadecodigo.com.br/artigos.asp?id_ac=413.

/////

 

Mas ainda to com um probleminha pois agora o infeliz do programa(ou do programador) chama 3 vezes cada registro( somente do campo "Nome_do_aluno") fica +/- assim :

 

Fabio

Maria

João

Fabio

Maria

João

Fabio

Maria

João

 

Oq pode estar errado dessa vez???

 

 

Abraços

Vinicius Sant'Anna

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é problema de SQL, tente algo do tipo:

 

procedure TForm6.Button1Click(Sender: TObject);beginForm18.Query1.Close;Form18.Query1.SQL.Clear;Form18.Query1.SQL.Add('select Turma.Modulo, Turma.Instrutor, Turma.Monitor, Alunos.Nome_do_Aluno');Form18.Query1.SQL.Add('From Turma');Form18.Query1.SQL.Add('inner join Alunos on Turma.Turma = Alunos.Turma');Form18.Query1.SQL.Add('where Turma.Turma =:paramTURMA');Form18.Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Form18.Query1.Open;   if Form18.Query1.recordcount >0 then	  Form18.QuickRep1.Preview   else	  showmessage('Nenhum Registro Encontrado');Form6.Hide;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... Acho que o não deu certo que você falou, deve de ser que continua a repetição dos itens no relatório, pode-se fazer o SQL sem o inner...

 

 

procedure TForm6.Button1Click(Sender: TObject);beginForm18.Query1.Close;Form18.Query1.SQL.Clear;Form18.Query1.SQL.Add('select Turma.Modulo, Turma.Instrutor, Turma.Monitor, Alunos.Nome_do_Aluno');Form18.Query1.SQL.Add('From Turma, Alunos');Form18.Query1.SQL.Add('where Turma.Turma = Alunos.Turma');Form18.Query1.SQL.Add('and Turma.Turma = ' + Form6.Edit1.Text);Form18.Query1.Open;if Form18.Query1.recordcount >0 then	Form18.QuickRep1.Previewelse	showmessage('Nenhum Registro Encontrado');Form6.Hide;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio finalmente consegui...era só adicionar a palavrinha magica "distinct"...hehehe...Obrigado mesmo por "perder" seu tempo me ajudando =).

O Codigo final ficou assim:

 

procedure TForm6.Button1Click(Sender: TObject);beginForm18.Query1.Close;Form18.Query1.SQL.Clear;Form18.Query1.SQL.Add('select distinct Turma.Modulo, Turma.Instrutor, Turma.Monitor, Alunos.Nome_do_Aluno');Form18.Query1.SQL.Add('From Turma, Alunos');Form18.Query1.SQL.Add('inner join Alunos');Form18.Query1.SQL.Add('on Turma.Turma = Alunos.Turma');Form18.Query1.SQL.Add('where Turma.Turma =:paramTURMA');Form18.Query1.ParamByName('paramTURMA').AsString := Form6.Edit1.Text;Form18.Query1.Active:= False;Form18.Query1.Open;if Form18.Query1.recordcount > 0 thenForm18.QuickRep1.Previewelseshowmessage('Nenhum Registro Encontrado');Form6.Hide;end;

 

Grato

Vinicius Sant'Anna

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.