Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro de Faria

sql

Recommended Posts

Olá pessoal, só novo no forumBom estou com dificuladades em montar um Query, é o seguinte, eu tenho 2 tabelas, uma tabela de "Cliente" e a outra de "Datas", estou tentando fazer uma SQL que descubra qual é a ultima data de Cada Cliente, ex:Tabela ClienteCod Nome1 aaaaaTabela DataCod CodCleinte Data1 1 02/12/22052 1 03/12/22053 1 04/12/22054 1 05/12/22055 1 06/12/2205No meu Form eu tenho um DBGrid e dois Componentes DateTimePicker, um eu chamo Data Inicial e outra Data Final, então o que a Query tem que fazer, ela tem que selecionar a maior data dos clientes que estejam em a Data Inicial e a data Final selecionada pelo usuario, ex:Data Incial:01/12/2005 Data Final: 31/12/2005A query teria que retornar:Nome Dataaaaa 06/12/2005Claro que a tabela Cleinte não vai ter apenas 1 cliente, ela terá varios, então a query terá que mostrar os resultados de acordo com a Data Inicial e Final que forem selecionadas, tentei montar a seguinte query:With QueryUVeic DoBegin Close; SQL.Clear; SQL.Text:='SELECT MAX(DataVeiculacao) FROM veiculacao WHERE DataVeiculacao BETWEEN :DataInicial AND :DataFinal AND Cod="'+EditCod.Text+'" ParamByName('DataInicial').AsString := FormatDateTime('yyyy-mm-dd', DateTimePickerVeiculacao1.Date); ParamByName('DataFinal').AsString := FormatDateTime('yyyy-mm-dd', DateTimePickerVeiculacao2.Date); Open; Mais não funciono, gostaria de uma ajudaObrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

qq deu esse esquema ali?! procura sempre colocar qual o erro que deu pq fica mais facil pra nos te ajudar... mas valor la.. desconfio que o problema ta no teu sql... faz assim..

 

qry.sql.add('select nomecliente, MAX(produto.DataVeiculacao) from cliente, produto where cliente.nucliente = procuto.nuclienteand produto.dataveiculacao between ''' + DateToStr(datetimepiker1.date) + ''' and ''' + DateToStr(datetimepiker2.date) + '''');

isso deve resolver teu problema... testa ai.. qualquer coisa volta..

PS: o nome dos campos tem que ser o da tua tabela ne :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

bastard2003, eu testei o codigo mais não retorno nenhum valor, mais também não deu erro, eu vo postar tod a codigo e talvez você possa me explicar melhor:With QueryVeiculacao Do Begin Close; SQL.Clear; SQL.Add('SELECT * FROM veiculacao'); Open; QueryVeiculacao.First; CodCliente:=QueryVeiculacaoCodigoVeiculacao.Text; For Cont:=1 To QueryVeiculacao.RecordCount Do Begin CodCliente:=QueryVeiculacaoCodigoVeiculacao.Text; With QueryUVeic Do Begin Close; SQL.Clear; SQL.Add('SELECT NomeCliente,MAX(veiculacao.DataVeiculacao) FROM clientes,veiculacao'); SQL.Add('WHERE clientes.Codigo = "'+CodCliente+'" AND veiculacao.DataVeiculacao BETWEEN '' + DateToStr(DateTimePickerVeiculacao1.date) + '' AND '' + DateToStr(DateTimePickerVeiculacao2.date) + '''); SQL.Add('GROUP BY NomeCliente'); Open; Label1Nome.Visible:=true; Label1Nome.Caption:=''+DBEditNome.Text+''; BitBtnAlterar.Enabled:=true; BitBtnRepBon.Enabled:=true; QueryVeiculacao.Next;end; end;Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom vamos la...

With QueryVeiculacao Do	Begin	Close;	SQL.Clear;	SQL.Add('SELECT * FROM veiculacao');	Open;	QueryVeiculacao.First;	CodCliente:=QueryVeiculacaoCodigoVeiculacao.Text;	For Cont:=1 To QueryVeiculacao.RecordCount Do		Begin		CodCliente:=QueryVeiculacaoCodigoVeiculacao.Text;		With QueryUVeic Do			Begin			Close;			SQL.Clear;			SQL.Add('SELECT NomeCliente,MAX(veiculacao.DataVeiculacao) FROM clientes,veiculacao');			SQL.Add('WHERE clientes.Codigo = '''+CodCliente+''' AND veiculacao.DataVeiculacao BETWEEN ''' + DateToStr(DateTimePickerVeiculacao1.date) + ''' AND ''' + DateToStr(DateTimePickerVeiculacao2.date) + '''');			SQL.Add('GROUP BY NomeCliente');			Open;			Label1Nome.Visible:=true;			Label1Nome.Caption:=''+DBEditNome.Text+'';			BitBtnAlterar.Enabled:=true;			BitBtnRepBon.Enabled:=true;			QueryVeiculacao.Next;			end;		end; //coloquei um aqui	end;//outro aqui

primeiro faltaram alguns END´s.. so que eu não sei se essa é a tu identação.. verifica isso.. no '''+CodCliente+''' são aspas simples... 3 de cada lado... o delphi reconhec a cada duas uma.... verifica se isso resolve... outra coisa.. pq o for? pra pegar o numero do veiculo e passar pra qry? não daria pra você pegar com um GROUP BY?! testa ai! qualquer coisa.. tamo ai!

abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bastard2003, eu utilizei o for, para verificar a quantidade de registro da tabela veiculacão, dei First para ele ponterar o primeiro registro, depois ele vai contar cada cliente e verificar se a ultima data está dentro da seleção da Data Inicial e Data Final, não sei se este é o procedimento é correto mais acho que é isso que está danto problema, outra coisa, eu estou utilizando o MySQL, a formatação de data dele é yyyy-MM-dd, como eu faço para deixar a formatão dele como dd-MM-yyyy utilizando a Query ?Agora pelo menos ele está me mostrando os registros, tenho que colocar ele no padrão dd-MM-yyyy para ver se ele está mostrando os registro corretamente. Aguardo respostaObrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara... com o eu trabalho com varios bancos diferentes eu criei uma função pra formata data... usa ela

 

function FormataData(Data: String): String;beginresult := data[7]+data[8]+data[9]+data[10] + '/' + data[4]+data[5]+'/'+data[1]+data[2]end;
no caso ai eu adaptei ela pra você usar... pra chamar ela usa:

 

FormataData(DateToStr(DateTimePickerVeiculacao2.date));

ai so coloca essa linha a onde tiver DateToStr(DateTimePickerVeiculacao2.date)

 

testa ai !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais essa formatação de data eu terei que exibi-la no DBGrid, e para fazer o SELECT MAX, eu tive que tirar os fields da Query porque senão da um erro, então não tenho como fomata-la, gostaria de saber como posso fazer essa formatação na propria queryObrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa função ali é pra você passar os dados pra qry... pra poder fazer o sql... o resultado se eu não me engano vem formatado ja... :\q erro q ta dando qnd você tem os field na qry?! cola ele ai!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Query1:Field 'Codigo' not found.É esse o erro que está dando na query quando eu coloco os field, agora quando eu tiro, a Query funciona normalmente, outra coisa, aquela função que você passo de conversão de Datas, eu ainda não consegui imaginar como posso utiliza-la com o DBGrid, será que você pode me passa algum exemplo ?Desculpe pela falta de conhecimento, mais eu estou aprendendo agora sobre SQL.Obrigado

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.