pegar hora de entrada e hora de saida
21/05/2020
0
com minha programação estou conseguindo pegar só a a hora de entrada porem a data de saida eu n estou conseguindo pegar
// INI FUNCIONARIOS / INICIO
with ADO_Funcionario, SQL do
begin
Clear;
Close;
Add('select a.nome, a.COD_PESSOA, a.MATRICULA,C.CodigoDeBarras, CAST(b.DataHora as datetime) data_acesso ');
Add('from [TopAcesso].[dbo].[Funcionarios] a, ');
Add(' [TopAcesso].[dbo].[Bilhetes] b, ');
Add(' [TopAcesso].[dbo].[Cartoes] c ');
Add('where a.COD_PESSOA = b.COD_PESSOA AND A.COD_PESSOA = C.COD_PESSOA ');
Add('and b.Tipo = 10 ');
if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then
begin
// INI VISITANTES
Add(' UNION all ');
Add(' select x.nome, x.COD_PESSOA, x.DOCUMENTO, '''+'Visitante'+''', CAST(y.DataHora as date) data_acesso ');
Add(' from [TopAcesso].[dbo].[Visitantes] x, ');
Add(' [TopAcesso].[dbo].[Bilhetes] y ');
Add(' where x.COD_PESSOA = y.COD_PESSOA ');
Add(' and y.Tipo = 10 ');
end;
add('ORDER BY data_acesso desc');
Open;
end;
// FIM FUNCIONARIOS / FIM
begin
for lin := 1 to StringGrid1.RowCount - 1 do
for col := 0 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[col, lin] := '';
end;
StringGrid1.CELLS[0, I] := ' ';
StringGrid1.CELLS[1, I] := ' ';
StringGrid1.CELLS[2, I] := ' ';
StringGrid1.CELLS[3, I] := ' ';
StringGrid1.CELLS[4, I] := ' ';
StringGrid1.CELLS[5, I] := ' ';
StringGrid1.CELLS[6, I] := ' ';
StringGrid1.CELLS[7, I] := ' ';
StringGrid1.ColWidths[0] := 130;
StringGrid1.ColWidths[1] := 350;
StringGrid1.ColWidths[2] := 135;
StringGrid1.ColWidths[3] := 105;
StringGrid1.ColWidths[4] := 95;
StringGrid1.ColWidths[5] := 95;
StringGrid1.ColWidths[6] := 200;
StringGrid1.ColWidths[7] := 150;
StringGrid1.CELLS[0, 0] := 'Matricula/Doc.';
StringGrid1.CELLS[1, 0] := 'Nome';
StringGrid1.CELLS[2, 0] := 'Cartão';
StringGrid1.CELLS[3, 0] := 'Data';
StringGrid1.CELLS[4, 0] := 'Entrada';
StringGrid1.CELLS[5, 0] := 'Saida';
StringGrid1.CELLS[6, 0] := 'Departamento';
StringGrid1.CELLS[7, 0] := 'Perfil Acesso';
StringGrid1.RowCount := 1;
while not ADO_Funcionario.EOF DO
begin
for i := 0 to ADO_Funcionario.RecordCount - 1 do
begin
if ADO_Funcionario.FieldByName('CodigoDeBarras').AsString <> 'Visitante' then
begin
// DEPARTAMENTO
with ADO_pesquisa, SQL do
begin
Clear;
Close;
Add('select distinct b.descricao ');
Add('from [TopAcesso].[dbo].[Funcionarios] a, [TopAcesso].[dbo].[departamentos] b where a.COD_departamento = b.COD_departamento ');
Add('and a.cod_pessoa = :wpessoa_dep ');
Parameters.ParamByName('wpessoa_dep').Value := ADO_Funcionario.FieldByName('COD_PESSOA').AsInteger;
Open;
end;
sdepartamento := ADO_pesquisa.FieldByName('DESCRICAO').AsString;
// PERFIL DE ACESSO
with ADO_pesquisa, SQL do
begin
Clear;
Close;
Add('select distinct b.descricao ');
Add('from [TopAcesso].[dbo].[Funcionarios] a, [TopAcesso].[dbo].[PerfisDeAcesso] b where a.COD_PERFIL = b.COD_PERFIL');
Add('and a.cod_pessoa = :wpessoa_dep');
Parameters.ParamByName('wpessoa_dep').Value := ADO_Funcionario.FieldByName('COD_PESSOA').AsInteger;
Open;
end;
sperfilacesso := ADO_pesquisa.FieldByName('DESCRICAO').AsString;
end
else
begin
sdepartamento := 'Externo';
// PERFIL DE ACESSO
with ADO_pesquisa, SQL do
begin
Clear;
Close;
Add('select distinct b.descricao ');
Add('from [TopAcesso].[dbo].[Visitantes] a, [TopAcesso].[dbo].[PerfisDeAcesso] b where a.COD_PERFIL = b.COD_PERFIL ');
Add('and a.cod_pessoa = :wpessoa_dep');
Parameters.ParamByName('wpessoa_dep').Value := ADO_Funcionario.FieldByName('COD_PESSOA').AsInteger;
Open;
end;
sperfilacesso := ADO_pesquisa.FieldByName('DESCRICAO').AsString;
end;
data_movimento := Copy(ADO_Funcionario.fieldbyName('data_acesso').AsString,1,2) + '/' +
Copy(ADO_Funcionario.fieldbyName('data_acesso').AsString,4,2) + '/' +
Copy(ADO_Funcionario.fieldbyName('data_acesso').AsString,7,4);
StringGrid1.CELLS[0, I+1] := ADO_Funcionario.FieldByName('MATRICULA').AsString;
StringGrid1.CELLS[1, I+1] := ADO_Funcionario.FieldByName('NOME').AsString;
StringGrid1.CELLS[2, I+1] := ADO_Funcionario.FieldByName('CodigoDeBarras').AsString;
StringGrid1.CELLS[3, I+1] := data_movimento ;
StringGrid1.CELLS[6, I+1] := sdepartamento;
StringGrid1.CELLS[7, I+1] := sperfilacesso;
DATA_ENTRADA := copy(ADO_Funcionario.FieldByname('data_acesso').value,11,3)+':'+copy(ADO_Funcionario.FieldByname('data_acesso').value,15,2)+':'
+copy(ADO_Funcionario.FieldByname('data_acesso').value,18,2);
StringGrid1.CELLS[4,I+1] := DATA_ENTRADA;
ADO_Funcionario.Next;
end;
Lucas
Posts
21/05/2020
Emerson Nascimento
não será aí o problema?
é bem difícil ajudar sem conhecer as tabelas do banco de dados.
21/05/2020
Lucas
não será aí o problema?
é bem difícil ajudar sem conhecer as tabelas do banco de dados.
O TIPO 10 SERIA ENTRADA TIPO 11 SERIA SAIDA
TENTEI PASSAR O TIPO 11 DE ALGUNS JEITOS JÁ MAIS ND ROLOU AI APAGUEI E VIM PEDIR AJUDA
21/05/2020
Emerson Nascimento
altere este exemplo de modo que ao menos execute:
const aColWidths array[0..7] of integer = {130, 350, 135, 105, 95, 95, 200, 150}; const aColTitles array[0..7] of string = {'Matricula/Doc.', 'Nome', 'Cartão', 'Data', 'Entrada', 'Saida', 'Departamento', 'Perfil Acesso'} // INI FUNCIONARIOS / INICIO with ADO_Funcionario, SQL do begin Close; Clear; Add('select a.nome, a.COD_PESSOA, a.MATRICULA, c.CodigoDeBarras, COALESCE(d.Descricao,'''') Departamento, '); Add('(case when b.Tipo = 10 then CAST(b.DataHora as datetime) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(b.DataHora as datetime) else null end) data_saida ',); Add('COALESCE(e.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Funcionarios] a'); Add('inner join [TopAcesso].[dbo].[Bilhetes] b on b.COD_PESSOA = a.COD_PESSOA and b.Tipo in (10,11) '); Add('inner join [TopAcesso].[dbo].[Cartoes] c on AND c.COD_PESSOA = a.COD_PESSOA '); Add('left join [TopAcesso].[dbo].[departamentos] d on d.COD_departamento = a.COD_departamento '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] e where e.COD_PERFIL = a.COD_PERFIL '); if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then begin // INI VISITANTES Add('UNION all '); Add('select x.nome, x.COD_PESSOA, x.DOCUMENTO, ''Visitante'' CodigoDeBarras, ''Externo'' Departamento '); Add('(case when b.Tipo = 10 then CAST(y.DataHora as date) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(y.DataHora as date) else null end) data_saida, '); Add('COALESCE(z.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Visitantes] x '); Add('inner join [TopAcesso].[dbo].[Bilhetes] y on y.COD_PESSOA = x.COD_PESSOA and y.Tipo in (10,11) '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] z where z.COD_PERFIL = x.COD_PERFIL '); end; add('ORDER BY data_entrada desc'); Open; end; // FIM FUNCIONARIOS / FIM // LIMPA OS DADOS DA GRADE for lin := 1 to StringGrid1.RowCount - 1 do for col := 0 to StringGrid1.ColCount - 1 do StringGrid1.Cells[col, lin] := ''''; // CONFIGURA LARGURAS DAS COLUNAS for col := 0 to High(aColWidths) do StringGrid1.ColWidths[col] := aColWidths[col]; // CONFIGURA OS TITULOS DAS COLUNAS for col := 0 to High(aColTitles) do StringGrid1.CELLS[col, 0] := aColTitles[col] // PREENCHE A GRADE lin := 1; while not ADO_Funcionario.EOF do begin StringGrid1.RowCount := StringGrid1.RowCount + 1; sdepartamento := ADO_Funcionario.FieldByName('Departamento').AsString; data_entrada := FormatDateTime('dd/mm/yyyy', ADO_Funcionario.FieldbyName('data_entrada').AsDate); data_saida := FormatDateTime('dd/mm/yyyy', ADO_Funcionario.FieldbyName('data_saida').AsDate); sperfilacesso := ADO_Funcionario.FieldByName('PerfilAcesso').AsString; StringGrid1.CELLS[0, lin] := ADO_Funcionario.FieldByName('MATRICULA').AsString; StringGrid1.CELLS[1, lin] := ADO_Funcionario.FieldByName('NOME').AsString; StringGrid1.CELLS[2, lin] := ADO_Funcionario.FieldByName('CodigoDeBarras').AsString; StringGrid1.CELLS[3, lin] := data_entrada; StringGrid1.CELLS[4, lin] := data_entrada; StringGrid1.CELLS[5, lin] := data_saida; StringGrid1.CELLS[6, lin] := sdepartamento; StringGrid1.CELLS[7, lin] := sperfilacesso; ADO_Funcionario.Next; Inc(lin); // incrementa a linha end;
21/05/2020
Lucas
altere este exemplo de modo que ao menos execute:
const aColWidths array[0..7] of integer = {130, 350, 135, 105, 95, 95, 200, 150}; const aColTitles array[0..7] of string = {'Matricula/Doc.', 'Nome', 'Cartão', 'Data', 'Entrada', 'Saida', 'Departamento', 'Perfil Acesso'} // INI FUNCIONARIOS / INICIO with ADO_Funcionario, SQL do begin Close; Clear; Add('select a.nome, a.COD_PESSOA, a.MATRICULA, c.CodigoDeBarras, COALESCE(d.Descricao,'''') Departamento, '); Add('(case when b.Tipo = 10 then CAST(b.DataHora as datetime) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(b.DataHora as datetime) else null end) data_saida ',); Add('COALESCE(e.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Funcionarios] a'); Add('inner join [TopAcesso].[dbo].[Bilhetes] b on b.COD_PESSOA = a.COD_PESSOA and b.Tipo in (10,11) '); Add('inner join [TopAcesso].[dbo].[Cartoes] c on AND c.COD_PESSOA = a.COD_PESSOA '); Add('left join [TopAcesso].[dbo].[departamentos] d on d.COD_departamento = a.COD_departamento '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] e where e.COD_PERFIL = a.COD_PERFIL '); if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then begin // INI VISITANTES Add('UNION all '); Add('select x.nome, x.COD_PESSOA, x.DOCUMENTO, ''Visitante'' CodigoDeBarras, ''Externo'' Departamento '); Add('(case when b.Tipo = 10 then CAST(y.DataHora as date) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(y.DataHora as date) else null end) data_saida, '); Add('COALESCE(z.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Visitantes] x '); Add('inner join [TopAcesso].[dbo].[Bilhetes] y on y.COD_PESSOA = x.COD_PESSOA and y.Tipo in (10,11) '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] z where z.COD_PERFIL = x.COD_PERFIL '); end; add('ORDER BY data_entrada desc'); Open; end; // FIM FUNCIONARIOS / FIM // LIMPA OS DADOS DA GRADE for lin := 1 to StringGrid1.RowCount - 1 do for col := 0 to StringGrid1.ColCount - 1 do StringGrid1.Cells[col, lin] := ''''; // CONFIGURA LARGURAS DAS COLUNAS for col := 0 to High(aColWidths) do StringGrid1.ColWidths[col] := aColWidths[col]; // CONFIGURA OS TITULOS DAS COLUNAS for col := 0 to High(aColTitles) do StringGrid1.CELLS[col, 0] := aColTitles[col] // PREENCHE A GRADE lin := 1; while not ADO_Funcionario.EOF do begin StringGrid1.RowCount := StringGrid1.RowCount + 1; sdepartamento := ADO_Funcionario.FieldByName('Departamento').AsString; data_entrada := FormatDateTime('dd/mm/yyyy', ADO_Funcionario.FieldbyName('data_entrada').AsDate); data_saida := FormatDateTime('dd/mm/yyyy', ADO_Funcionario.FieldbyName('data_saida').AsDate); sperfilacesso := ADO_Funcionario.FieldByName('PerfilAcesso').AsString; StringGrid1.CELLS[0, lin] := ADO_Funcionario.FieldByName('MATRICULA').AsString; StringGrid1.CELLS[1, lin] := ADO_Funcionario.FieldByName('NOME').AsString; StringGrid1.CELLS[2, lin] := ADO_Funcionario.FieldByName('CodigoDeBarras').AsString; StringGrid1.CELLS[3, lin] := data_entrada; StringGrid1.CELLS[4, lin] := data_entrada; StringGrid1.CELLS[5, lin] := data_saida; StringGrid1.CELLS[6, lin] := sdepartamento; StringGrid1.CELLS[7, lin] := sperfilacesso; ADO_Funcionario.Next; Inc(lin); // incrementa a linha end;
const aColWidths array[0..7] of integer = {130, 350, 135, 105, 95, 95, 200, 150};
const aColTitles array[0..7] of string = {'Matricula/Doc.', 'Nome', 'Cartão', 'Data', 'Entrada', 'Saida', 'Departamento', 'Perfil Acesso'}
/////////////////
esta linha coloca antes de comecar o begin ou depois ?
por exemplo
procedure TformEasyInnerOnLine.Pesquisar_Registros;
const aColWidths array[0..7] of integer = {130, 350, 135, 105, 95, 95, 200, 150};
const aColTitles array[0..7] of string = {'Matricula/Doc.', 'Nome', 'Cartão', 'Data', 'Entrada', 'Saida', 'Departamento', 'Perfil Acesso'}
begin
/// o que vc me mandou ///
end;
ou coloca depois do begin ?
22/05/2020
Emerson Nascimento
procedure TformEasyInnerOnLine.Pesquisar_Registros; const aColWidths: array[0..7] of integer = (130, 350, 135, 105, 95, 95, 200, 150); aColTitles: array[0..7] of string = ('Matricula/Doc.', 'Nome', 'Cartão', 'Data', 'Entrada', 'Saida', 'Departamento', 'Perfil Acesso'); begin /// o que vc me mandou /// end;
22/05/2020
Lucas
procedure TformEasyInnerOnLine.Pesquisar_Registros; const aColWidths: array[0..7] of integer = (130, 350, 135, 105, 95, 95, 200, 150); aColTitles: array[0..7] of string = ('Matricula/Doc.', 'Nome', 'Cartão', 'Data', 'Entrada', 'Saida', 'Departamento', 'Perfil Acesso'); begin /// o que vc me mandou /// end;
não rolou ñ ele me retorna assim
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
teste | 1 |123 |555 |Sala |2020-05-21 11:00 | null | teste
teste | 1 |123 |555 |Sala |null | |2020-05-21 11:10 | teste
///////////////////eu precisava que aparecesse assim
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
teste | 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
22/05/2020
Emerson Nascimento
para ter o resultado em uma linha, da forma como você precisa:
// INI FUNCIONARIOS / INICIO with ADO_Funcionario, SQL do begin Close; Clear; Add('select nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, '); Add('max(data_entrada) data_entrada, '); Add('max(data_saida) data_saida, '); Add('PerfilAcesso '); Add('from ('); Add('select a.nome, a.COD_PESSOA, a.MATRICULA, c.CodigoDeBarras, COALESCE(d.Descricao,'''') Departamento, '); Add('(case when b.Tipo = 10 then CAST(b.DataHora as datetime) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(b.DataHora as datetime) else null end) data_saida, '); Add('COALESCE(e.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Funcionarios] a'); Add('inner join [TopAcesso].[dbo].[Bilhetes] b on b.COD_PESSOA = a.COD_PESSOA and b.Tipo in (10,11) '); Add('inner join [TopAcesso].[dbo].[Cartoes] c on AND c.COD_PESSOA = a.COD_PESSOA '); Add('left join [TopAcesso].[dbo].[departamentos] d on d.COD_departamento = a.COD_departamento '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] e where e.COD_PERFIL = a.COD_PERFIL '); if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then begin // INI VISITANTES Add('UNION all '); Add('select x.nome, x.COD_PESSOA, x.DOCUMENTO, ''Visitante'' CodigoDeBarras, ''Externo'' Departamento '); Add('(case when b.Tipo = 10 then CAST(y.DataHora as date) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(y.DataHora as date) else null end) data_saida, '); Add('COALESCE(z.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Visitantes] x '); Add('inner join [TopAcesso].[dbo].[Bilhetes] y on y.COD_PESSOA = x.COD_PESSOA and y.Tipo in (10,11) '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] z where z.COD_PERFIL = x.COD_PERFIL '); end; Add(') tab'); Add('GROUP BY nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, PerfilAcesso '); Add('ORDER BY max(data_entrada) desc'); Open; end; // FIM FUNCIONARIOS / FIM
25/05/2020
Lucas
para ter o resultado em uma linha, da forma como você precisa:
// INI FUNCIONARIOS / INICIO with ADO_Funcionario, SQL do begin Close; Clear; Add('select nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, '); Add('max(data_entrada) data_entrada, '); Add('max(data_saida) data_saida, '); Add('PerfilAcesso '); Add('from ('); Add('select a.nome, a.COD_PESSOA, a.MATRICULA, c.CodigoDeBarras, COALESCE(d.Descricao,'''') Departamento, '); Add('(case when b.Tipo = 10 then CAST(b.DataHora as datetime) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(b.DataHora as datetime) else null end) data_saida, '); Add('COALESCE(e.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Funcionarios] a'); Add('inner join [TopAcesso].[dbo].[Bilhetes] b on b.COD_PESSOA = a.COD_PESSOA and b.Tipo in (10,11) '); Add('inner join [TopAcesso].[dbo].[Cartoes] c on AND c.COD_PESSOA = a.COD_PESSOA '); Add('left join [TopAcesso].[dbo].[departamentos] d on d.COD_departamento = a.COD_departamento '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] e where e.COD_PERFIL = a.COD_PERFIL '); if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then begin // INI VISITANTES Add('UNION all '); Add('select x.nome, x.COD_PESSOA, x.DOCUMENTO, ''Visitante'' CodigoDeBarras, ''Externo'' Departamento '); Add('(case when b.Tipo = 10 then CAST(y.DataHora as date) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(y.DataHora as date) else null end) data_saida, '); Add('COALESCE(z.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Visitantes] x '); Add('inner join [TopAcesso].[dbo].[Bilhetes] y on y.COD_PESSOA = x.COD_PESSOA and y.Tipo in (10,11) '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] z where z.COD_PERFIL = x.COD_PERFIL '); end; Add(') tab'); Add('GROUP BY nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, PerfilAcesso '); Add('ORDER BY max(data_entrada) desc'); Open; end; // FIM FUNCIONARIOS / FIM
coloquei no sql server e deu
Mensagem 156, Nível 15, Estado 1, Linha 12
Sintaxe incorreta próxima à palavra-chave 'AND'.
25/05/2020
Lucas
para ter o resultado em uma linha, da forma como você precisa:
// INI FUNCIONARIOS / INICIO with ADO_Funcionario, SQL do begin Close; Clear; Add('select nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, '); Add('max(data_entrada) data_entrada, '); Add('max(data_saida) data_saida, '); Add('PerfilAcesso '); Add('from ('); Add('select a.nome, a.COD_PESSOA, a.MATRICULA, c.CodigoDeBarras, COALESCE(d.Descricao,'''') Departamento, '); Add('(case when b.Tipo = 10 then CAST(b.DataHora as datetime) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(b.DataHora as datetime) else null end) data_saida, '); Add('COALESCE(e.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Funcionarios] a'); Add('inner join [TopAcesso].[dbo].[Bilhetes] b on b.COD_PESSOA = a.COD_PESSOA and b.Tipo in (10,11) '); Add('inner join [TopAcesso].[dbo].[Cartoes] c on AND c.COD_PESSOA = a.COD_PESSOA '); Add('left join [TopAcesso].[dbo].[departamentos] d on d.COD_departamento = a.COD_departamento '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] e where e.COD_PERFIL = a.COD_PERFIL '); if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then begin // INI VISITANTES Add('UNION all '); Add('select x.nome, x.COD_PESSOA, x.DOCUMENTO, ''Visitante'' CodigoDeBarras, ''Externo'' Departamento '); Add('(case when b.Tipo = 10 then CAST(y.DataHora as date) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(y.DataHora as date) else null end) data_saida, '); Add('COALESCE(z.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Visitantes] x '); Add('inner join [TopAcesso].[dbo].[Bilhetes] y on y.COD_PESSOA = x.COD_PESSOA and y.Tipo in (10,11) '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] z where z.COD_PERFIL = x.COD_PERFIL '); end; Add(') tab'); Add('GROUP BY nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, PerfilAcesso '); Add('ORDER BY max(data_entrada) desc'); Open; end; // FIM FUNCIONARIOS / FIM
coloquei no sql server e deu
Mensagem 156, Nível 15, Estado 1, Linha 12
Sintaxe incorreta próxima à palavra-chave 'AND'.
ja arrumei aqui
mais no caso ele esta me retornando assim certo
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
no banco eu fiz 4 entradas e saida de 2 funcionarios
queria que aparecesse todas
sendo assim eu lucas entro e saio
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
ai outra pessoa chamada teste entra e sai
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
ai eu pego e entro na empresa
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 13:00 | |'e para aparecer em branco '| teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
eu pego e saiu
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 13:00 | |2020-05-21 16:10| teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
25/05/2020
Lucas
para ter o resultado em uma linha, da forma como você precisa:
// INI FUNCIONARIOS / INICIO with ADO_Funcionario, SQL do begin Close; Clear; Add('select nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, '); Add('max(data_entrada) data_entrada, '); Add('max(data_saida) data_saida, '); Add('PerfilAcesso '); Add('from ('); Add('select a.nome, a.COD_PESSOA, a.MATRICULA, c.CodigoDeBarras, COALESCE(d.Descricao,'''') Departamento, '); Add('(case when b.Tipo = 10 then CAST(b.DataHora as datetime) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(b.DataHora as datetime) else null end) data_saida, '); Add('COALESCE(e.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Funcionarios] a'); Add('inner join [TopAcesso].[dbo].[Bilhetes] b on b.COD_PESSOA = a.COD_PESSOA and b.Tipo in (10,11) '); Add('inner join [TopAcesso].[dbo].[Cartoes] c on AND c.COD_PESSOA = a.COD_PESSOA '); Add('left join [TopAcesso].[dbo].[departamentos] d on d.COD_departamento = a.COD_departamento '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] e where e.COD_PERFIL = a.COD_PERFIL '); if ((Copy(CB_Departamentos.Text,1,2) = '00') OR (Copy(CB_Departamentos.Text,1,2) = '**')) then begin // INI VISITANTES Add('UNION all '); Add('select x.nome, x.COD_PESSOA, x.DOCUMENTO, ''Visitante'' CodigoDeBarras, ''Externo'' Departamento '); Add('(case when b.Tipo = 10 then CAST(y.DataHora as date) else null end) data_entrada, '); Add('(case when b.Tipo = 11 then CAST(y.DataHora as date) else null end) data_saida, '); Add('COALESCE(z.Descricao,'''') PerfilAcesso '); Add('from [TopAcesso].[dbo].[Visitantes] x '); Add('inner join [TopAcesso].[dbo].[Bilhetes] y on y.COD_PESSOA = x.COD_PESSOA and y.Tipo in (10,11) '); Add('left join [TopAcesso].[dbo].[PerfisDeAcesso] z where z.COD_PERFIL = x.COD_PERFIL '); end; Add(') tab'); Add('GROUP BY nome, COD_PESSOA, MATRICULA, CodigoDeBarras, Departamento, PerfilAcesso '); Add('ORDER BY max(data_entrada) desc'); Open; end; // FIM FUNCIONARIOS / FIM
coloquei no sql server e deu
Mensagem 156, Nível 15, Estado 1, Linha 12
Sintaxe incorreta próxima à palavra-chave 'AND'.
ja arrumei aqui
mais no caso ele esta me retornando assim certo
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
no banco eu fiz 4 entradas e saida de 2 funcionarios
queria que aparecesse todas
sendo assim eu lucas entro e saio
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
ai outra pessoa chamada teste entra e sai
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
ai eu pego e entro na empresa
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 13:00 | |'e para aparecer em branco '| teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
eu pego e saiu
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 13:00 | |2020-05-21 16:10| teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
teste | 2 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
corriginto fiz duas entradas e duas saidas de dois funcionarios
queria que me aparecesse assim quando entro e saio de um primeiro funcionario
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
seguindo funcionario
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
teste| 2 |123 |555 |Sala |2020-05-21 13:00 | |2020-05-21 14:10 | teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
segunda entrada do primeiro funcionario
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
lucas| 1 |123 |555 |Sala |2020-05-21 15:00 | |2020-05-21 16:10 | teste
teste| 2 |123 |555 |Sala |2020-05-21 13:00 | |2020-05-21 14:10 | teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
segunda entrada do segundo funcionario
nome | cod_pessoa |matricula | codigoDeBarras | departamento |Data_Entrada | Data_Saida | perfil_Acesso
teste| 2 |123 |555 |Sala |2020-05-21 17:00 | |2020-05-21 18:10 | teste
lucas| 1 |123 |555 |Sala |2020-05-21 15:00 | |2020-05-21 16:10 | teste
teste| 2 |123 |555 |Sala |2020-05-21 13:00 | |2020-05-21 14:10 | teste
lucas| 1 |123 |555 |Sala |2020-05-21 11:00 | |2020-05-21 11:10 | teste
deu para entender mais ou menos ?
26/05/2020
Emerson Nascimento
porque é necessário saber quais bilhetes pertencem ao mesmo dia (a menos que seja garantido que a entrada e saída aconteçam no mesmo dia).
26/05/2020
Lucas
porque é necessário saber quais bilhetes pertencem ao mesmo dia (a menos que seja garantido que a entrada e saída aconteçam no mesmo dia).
cod_pessoa(fk,int,nao nulo) //uso
cod_local(fk,int ,nulo) //uso
tipo(int ,nao nulo) //uso
numInner(fk,int,nulo) //uso
dataHora(datetime,nao nulo) //uso
ordem(int ,nulo) //n uso
exportado(int ,nulo)//n uso
pode ser a q aconteca que a pessoa entre as 23:00 de um dia e saia 05:00 do outro dia
26/05/2020
Lucas
porque é necessário saber quais bilhetes pertencem ao mesmo dia (a menos que seja garantido que a entrada e saída aconteçam no mesmo dia).
cod_pessoa(fk,int,nao nulo) //uso
cod_local(fk,int ,nulo) //uso
tipo(int ,nao nulo) //uso
numInner(fk,int,nulo) //uso
dataHora(datetime,nao nulo) //uso
ordem(int ,nulo) //n uso
exportado(int ,nulo)//n uso
pode ser a q aconteca que a pessoa entre as 23:00 de um dia e saia 05:00 do outro dia
consegui fazer utilizando dois bancos
Clique aqui para fazer login e interagir na Comunidade :)