Função SQL Server
08/06/2015
0
Guilherme Silva
Post mais votado
10/06/2015
$query = "create table #turno (CRACHA_1 INT, FUNCIONARIO VARCHAR(40), SETOR VARCHAR(60), DATA_ACESSO DATETIME, HORA_ACESSO time, CATRACA varchar(60), CODIGO_EVENTO smallint, NOME_EVENTO VARCHAR(20), TOTAL INT) insert #turno SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('RCAFE') select * from #turno IF OBJECT_ID('tempdb..#turno') IS NOT NULL DROP TABLE #turno";
Essas queries não podem ser executadas juntas no PHP !
A função "V_RELOGIO_PONTO", retorna os dados do select que você precisa, mas a última query executada nesse batch ( IF OBJECT_ID('tempdb..#turno') IS NOT NULL DROP TABLE #turno ), não retorna dados e isso está travando teu código PHP...
Execute, no PHP, apenas... SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('RCAFE').
Se funcionar, você vai ter de ajustar o uso da temporária ( #turno ), que a principio não tem nada a ver com a função ( V_RELOGIO_PONTO ) !
Marcos P
Mais Posts
09/06/2015
Guilherme Silva
SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('RCAFE')
ela faz vários if's e selects, no caso ai ta consultando tudo que for resumo do cafe da manha... mas nao sei como colocá-la no PHP e trazer os registros entende.. me deram a ideia de usar tabela temporária, até fiz, mas não consigo passar os dados para a array... Nota: a função [dbo].[V_RELOGIO_PONTO] funciona perfeitamente quando jogo no SQL Server.
$query = $DBH->prepare("create table #turno (CRACHA_1 INT, FUNCIONARIO VARCHAR(40), SETOR VARCHAR(60), DATA_ACESSO DATETIME, HORA_ACESSO time, CATRACA varchar(60), CODIGO_EVENTO smallint, NOME_EVENTO VARCHAR(20), TOTAL INT)
insert #turno
SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('RCAFE')
select * from #turno
IF OBJECT_ID('tempdb..#turno') IS NOT NULL DROP TABLE #turno");
$query->execute();
$result = $query->fetchAll();
print_r($result);
Hoje eu to usando só o print_r, pq tentei passar para arrays mas nao me retornou nada.. Do jeito que está ai, o chrome me retorna a seguinte resposta: Array ( ).
Eu tinha comentado o print_r, e abaixo da $result eu coloquei assim:
$row = fetch($query);
$cracha = $row['CRACHA_1'];
$nome = $row['FUNCIONARIO']; e as demais colunas... mas ai o chrome mostra: Fatal error: Call to undefined function fetch() in ...
Se eu dou um echo na $query, traz: Catchable fatal error: Object of class PDOStatement could not be converted to string in ... E se eu dou um var dump($DBH) aparece: object(PDO)#1 (0) { }.
A minha dúvida é como fazer o php entender os registros que a função SQL mostra.. Se puder ajudar, agradeço.
09/06/2015
Marcio Araujo
09/06/2015
Guilherme Silva
Até estou progredindo, estou quase lá.. dei alguns debugs no código assim:
$row = array();
print_r ( $pdo -> errorInfo ( ) ) ; -> esse aqui é o primeiro debug
$pdo -> setAttribute ( PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION ) ; -> ai depois esse
$res = $pdo->query($query);
//$res->nextRowset();
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
$cracha = $row['CRACHA_1']; e demais variaveis...
Ai retorna assim: Array ( [0] => [1] => [2] => )
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IMSSP]: The active result for the query contains no fields.' in C:\xampp\htdocs\consulpon\cafe.php:49 Stack trace: #0 C:\xampp\htdocs\consulpon\cafe.php(49): PDOStatement->fetch(2) #1 thrown in C:\xampp\htdocs\consulpon\cafe.php on line 49
Agora eu vi que diz não ter nada nas colunas.. mas tem, pq quando jogo (somente a função) no sql server funciona certinho sem alterar uma vírgula.. Quem puder ajudar agradeço.
09/06/2015
Marcos P
Qual o tipo de objeto você criou no Sql Server ?
Poderia colocar aqui o script de criação desse objeto no banco ?
Poderia colocar, ainda, um exemplo da execução disso no Sql Server ? Tanto o comando submetido ao banco, quando ao resultado obtido...
( pode ser uma imagem... )
Esse código fonte em PHP faz acesso a outros objetos do banco de dados ? Uma tabela ou precedure por exemplo ?
Você tentou basear a chamada a essa ( dita ) função, utilizando a mesma estrutura desses eventuais outros comandos ?
( afinal, eles também retornam registros... )
10/06/2015
Guilherme Silva
<?php $myServer = "192.168.0.99"; $myUser = "sa"; $myPass = "sa"; $myDB = "vetorh_ponto"; try { # MS SQL Server and Sybase with PDO_DBLIB $pdo = new PDO("sqlsrv:server=$myServer;database=$myDB", $myUser, $myPass); if( $pdo ) { echo ""; }else{ echo "Nao conectou.<br />"; die( print_r( sqlsrv_errors(), true)); } } catch(PDOException $e) { echo $e->getMessage(); } $query = "create table #turno (CRACHA_1 INT, FUNCIONARIO VARCHAR(40), SETOR VARCHAR(60), DATA_ACESSO DATETIME, HORA_ACESSO time, CATRACA varchar(60), CODIGO_EVENTO smallint, NOME_EVENTO VARCHAR(20), TOTAL INT) insert #turno SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('RCAFE') select * from #turno IF OBJECT_ID('tempdb..#turno') IS NOT NULL DROP TABLE #turno"; $row = array(); print_r ( $pdo -> errorInfo ( ) ) ; $pdo -> setAttribute ( PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION ) ; $res = $pdo->query($query); //$res->nextRowset(); while($row = $res->fetch(PDO::FETCH_ASSOC)) { $cracha = $row['CRACHA_1']; // e demais colunas ..... } echo $cracha; // e demais colunas ...... //echo $query; //var_dump($pdo); ?>
No Sql Server, eu só rodo esse comando dentro da variavel $query, e ele traz os registros conforme a imagem abaixo:
[img]http://arquivo.devmedia.com.br/forum/imagem/434904-20150610-081436.png[/img]
E esse código faz acesso a várias tabelas a partir dessa função [dbo].[V_RELOGIO_PONTO], de dois bancos diferentes.. Mas acho que "bancos diferentes" nao vem ao caso, só preciso fazer o PHP entender essa função e retornar os registros.. Mexi mais um pouco ontem, e do jeito que está ai, me retorna a seguinte mensagem:
Array ( [0] => 01000 [1] => 5701 [2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Changed database context to 'vetorh_ponto'. ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IMSSP]: The active result for the query contains no fields.' in C:\xampp\htdocs\consulpon\cafe.php:49 Stack trace: #0 C:\xampp\htdocs\consulpon\cafe.php(49): PDOStatement->fetch(2) #1 thrown in C:\xampp\htdocs\consulpon\cafe.php on line 49
O que acha que pode ser Marcos?
10/06/2015
Marcos P
Consegue postar o script de criação desse objeto no banco ?
Qual a relação desse objeto e a temporária #turno e por que você populou essa tabela na mesma query que evocou V_RELOGIO_PONTO ?
As autorizações de acesso a esses objetos, tanto para execução de V_RELOGIO_PONTO, como para criação e manipulação de #turno, estão liberadas para o usuário de banco que você usa para conectar pelo PHP ?
A temporária #turno, pode ser substituída por uma tabela permanente ( mesmo que seja apenas para finas de teste ) ?
Essas instruções precisam ser geradas todas juntas, principalmente do lado do PHP ?
Você consegue gerar uma-a-uma, identificando o ponto exato em que ocorre o problema ?
Outras funções nativas do banco, você consegue acessar no PHP ? Por exemplo :
select getdate()
10/06/2015
Guilherme Silva
Se com objeto você diz ser a função completa do SQL, aqui vai:
USE [vetorh_ponto] GO /****** Object: UserDefinedFunction [dbo].[V_RELOGIO_PONTO] Script Date: 06/08/2015 15:49:24 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[V_RELOGIO_PONTO] (@TIPO CHAR(7)) returns @TABELA table ( CRACHA_1 INT, FUNCIONARIO VARCHAR(40), SETOR VARCHAR(60), DATA_ACESSO DATETIME, HORA_ACESSO time, CATRACA varchar(60), CODIGO_EVENTO smallint, NOME_EVENTO VARCHAR(20), TOTAL INT ) AS BEGIN DECLARE @CAFE_INI int, @CAFE_FIM int, @ALMOCO_INI int, @ALMOCO_FIM int, @JANTAR_INI int, @JANTAR_FIM int, @CEIA_INI int, @CEIA_FIM int, @INICIO DATETIME, @FIM DATETIME SET @CAFE_INI = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_CAFE_INI') SET @CAFE_FIM = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_CAFE_FIM') SET @ALMOCO_INI = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_ALMOCO_INI') SET @ALMOCO_FIM = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_ALMOCO_FIM') SET @JANTAR_INI = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_JANTAR_INI') SET @JANTAR_FIM = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_JANTAR_FIM') SET @CEIA_INI = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_CEIA_INI') SET @CEIA_FIM = (SELECT CAST(cnf_valor as INT) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_CEIA_FIM') SET @INICIO = (SELECT CAST(cnf_valor AS datetime) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_DATA_INI') SET @FIM = (SELECT CAST(cnf_valor AS datetime) FROM AIS.APIS.DBO.T_CONFIG WHERE CNF_CAMPO = 'VETOR_DATA_FIM') if @tipo = 'CAFE' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[DATA_ACESSO],[HORA_ACESSO],[CATRACA],[CODIGO_EVENTO],[NOME_EVENTO]) SELECT r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @CAFE_INI and @CAFE_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC if @tipo = 'RCAFE' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[CODIGO_EVENTO],[NOME_EVENTO], [TOTAL]) select CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO, COUNT(*) AS QTD from ( SELECT TOP 100000 r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @CAFE_INI and @CAFE_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC ) A GROUP BY CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO ORDER BY 1 if @tipo = 'ALMOCO' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[DATA_ACESSO],[HORA_ACESSO],[CATRACA],[CODIGO_EVENTO],[NOME_EVENTO]) SELECT r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @ALMOCO_INI and @ALMOCO_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC if @tipo = 'RALMOCO' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[CODIGO_EVENTO],[NOME_EVENTO], [TOTAL]) select CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO, COUNT(*) AS QTD from ( SELECT TOP 100000 r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @ALMOCO_INI and @ALMOCO_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC ) B GROUP BY CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO ORDER BY 1 if @tipo = 'JANTAR' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[DATA_ACESSO],[HORA_ACESSO],[CATRACA],[CODIGO_EVENTO],[NOME_EVENTO]) SELECT r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @JANTAR_INI and @JANTAR_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC if @tipo = 'RJANTAR' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[CODIGO_EVENTO],[NOME_EVENTO], [TOTAL]) select CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO, COUNT(*) AS QTD from ( SELECT TOP 100000 r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @JANTAR_INI and @JANTAR_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC ) C GROUP BY CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO ORDER BY 1 if @tipo = 'CEIA' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[DATA_ACESSO],[HORA_ACESSO],[CATRACA],[CODIGO_EVENTO],[NOME_EVENTO]) SELECT r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @CEIA_INI and @CEIA_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC if @tipo = 'RCEIA' INSERT @TABELA ([CRACHA_1],[FUNCIONARIO],[SETOR],[CODIGO_EVENTO],[NOME_EVENTO], [TOTAL]) select CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO, COUNT(*) AS QTD from ( SELECT TOP 100000 r038hch.numcad 'CRACHÁ_1', r034fun.nomfun 'FUNCIONARIO',r016orn.nomloc 'SETOR',r070acc.datacc 'DATA_ACESSO', right((convert(char(8), dateadd(second, r070acc.horacc, ''), 114)),5) 'HORA_ACESSO', r058rlg.desrlg 'CATRACA',r070acc.tipacc 'CODIGO_EVENTO',r070tac.desred 'NOME_EVENTO' FROM r070acc,r034fun,r070tac,r058rlg,r038hch,r038hlo,r016orn,r030emp WHERE r070acc.codplt = r058rlg.codplt AND r070acc.codrlg = r058rlg.codrlg AND r070tac.tipacc = r070acc.tipacc AND r034fun.numemp = r030emp.numemp AND r038hch.numemp = r030emp.numemp AND r038hlo.numemp = r030emp.numemp AND r038hlo.taborg = r016orn.taborg AND r038hlo.numloc = r016orn.numloc AND (r070acc.datacc between @INICIO and @FIM AND r070acc.horacc between @CEIA_INI and @CEIA_FIM) AND r038hch.numcra = r070acc.numcra AND (r038hch.datini < r070acc.datacc OR (r038hch.datini = r070acc.datacc AND r038hch.horini <= r070acc.horacc)) AND (r038hch.datfim = CONVERT(DATETIME,'1900/12/31',111) OR r038hch.datfim > r070acc.datacc OR (r038hch.datfim = r070acc.datacc AND r038hch.horfim >= r070acc.horacc)) AND r034fun.numemp = r038hch.numemp AND r034fun.tipcol = r038hch.tipcol AND r034fun.numcad = r038hch.numcad AND r034fun.numemp = r038hlo.numemp AND r034fun.tipcol = r038hlo.tipcol AND r034fun.numcad = r038hlo.numcad AND r038hlo.datalt = (SELECT MAX(datalt) FROM r038hlo a WHERE a.numemp = r034fun.numemp AND a.tipcol = r034fun.tipcol AND a.numcad = r034fun.numcad AND a.datalt <= r070acc.datacc) AND 0 = 0 ORDER BY 1 ASC,2 ASC,4 ASC ) D GROUP BY CRACHÁ_1, FUNCIONARIO, SETOR, CODIGO_EVENTO, NOME_EVENTO ORDER BY 1 RETURN END
As alterações devem estar liberadas, creio eu, pois estou com o usuário 'sa'.. essa temporária #turno, fiz pois um amigo me indicou procurar sobre tabelas temporárias para trabalhar com essa função, e então hoje está assim o código.. Sim, para teste podemos também migrar para uma tabela permanente esses dados.. Não sei te dizer se todas as instruções precisam estar juntas pois comecei com o PDO agora.. Por isso tenho ainda essas dúvidas
Não cheguei a testar separado
Sim, o getdate funcionou.
Usei
print_r(getdate());
Que trouxe
Array ( [seconds] => 20 [minutes] => 44 [hours] => 16 [mday] => 10 [wday] => 3 [mon] => 6 [year] => 2015 [yday] => 160 [weekday] => Wednesday [month] => June [0] => 1433947460 )
10/06/2015
Guilherme Silva
try { # MS SQL Server and Sybase with PDO_DBLIB $pdo = new PDO("sqlsrv:server=$myServer;database=$myDB", $myUser, $myPass); if( $pdo ) { echo ""; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); } $query = "SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('RCAFE')"; print_r ($pdo -> errorInfo()); $res = $pdo->query($query); echo $res; }catch(PDOException $e) { echo $e->getMessage(); }
Mas meu retorno foi esse:
Array ( [0] => 01000 [1] => 5701 [2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Changed database context to 'vetorh_ponto'. ) Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\xampp\htdocs\consulpon\cafe.php on line 20
Precisava ver primeiro como fazer trazer os dados nessa array para posteriormente se for o caso, jogar em tabela temporária.. Na verdade o erro possivelmente pode estar nas linhas abaixo da query, como nesse $pdo->query($query) ou o echo $res, os quais eu não sei dizer se estão corretos..
10/06/2015
Marcos P
Sua ideia é jogar os dados em uma temporária... porque você não faz isso dentro da própria função, retornando os dados em uma tabela fixa, com identificação do usuário que rodou a query ?
( para você pode isolar os dados corretos, na sessão corrente do PHP )
Tenho vários códigos PHP que carregam arrays com queries do Sql Server e, estando todos os tipos certos, nunca tive maiores problemas...
( no exemplo abaixo, a carga de uma grid com vários registros )
$SQL = "select NroFatura,convert(char,Vencimento) as Vencimento, convert(char,VencBloq) as VencBloq from faturas where codcliente = ".$_SESSION["codcli"]." and StatusBaixa = 'A' and tipodoc = 1 and VencBloq is not null order by Vencimento desc"; $result = mssql_query($SQL); if (!$result) { echo "<script> alert('Erro ao selecionar faturas!');</script>"; $url = "logout.php"; $delay = "0"; echo '<meta http-equiv="refresh" content="'.$delay.';url='.$url.'">'; exit; } $total = mssql_num_rows($result); if ($total > 0){ echo "<tr>". "<td colspan=\"5\" rowspan=\"1\" align=\"left\" style=\"height: 8px; background-color: rgb(170,170,170); color: rgb(255, 255, 255); font-family: Arial; font-weight: bold;\" ><font size=\"2\">Faturas em Aberto com 2.a Via Emitida</font></td>". "</tr>". "<tr>". "<td style=\"width: 80px; height: 8px; background-color: rgb(170,170,170); color: rgb(255, 255, 255); font-family: Arial; font-weight: bold;\" ><font size=\"2\">Nº Fatura</font></td>". "<td style=\"width: 130px; height: 8px; background-color: rgb(170,170,170); color: rgb(255, 255, 255); font-family: Arial; font-weight: bold;\" ><font size=\"2\">Venc. Original</font></td>". "<td style=\"width: 130px; height: 8px; background-color: rgb(170,170,170); color: rgb(255, 255, 255); font-family: Arial; font-weight: bold;\" ><font size=\"2\">Venc. 2.Via</font></td>". "<td style=\"width: 130px; height: 8px; background-color: rgb(170,170,170); color: rgb(255, 255, 255); font-family: Arial; font-weight: bold;\" ><font size=\"2\">Valor 2.Via</font></td>". "<td style=\"width: 120px; height: 8px; background-color: rgb(255, 255, 255); color: rgb(255, 255, 255); font-family: Arial; font-weight: bold;\" ><font size=\"2\"></font></td>". "</tr>"; while($dados = mssql_fetch_array($result)) { selDados($dados["NroFatura"]); echo "<tr style\"background-color: rgb(255, 255, 255);\">"; $auxstr = "<td style=\"width: 80px; height: 8px; background-color:#CCCCCC;\" ><font size=\"2\">".$dados["NroFatura"]."</font></td>"; echo $auxstr; $auxstr = "<td style=\"width: 130px; height: 8px; background-color:#CCCCCC;\" ><font size=\"2\">".$dataant."</font></td>"; echo $auxstr; $auxstr = "<td style=\"width: 130px; height: 8px; background-color:#CCCCCC;\" ><font size=\"2\">" .$vencbloq. "</font></td>"; echo $auxstr; $auxstr = "<td style=\"width: 130px; height: 8px; background-color:#CCCCCC;\" ><font size=\"2\">" .$valorant. "</font></td>"; echo $auxstr; $auxstr = "<td style=\"width: 120px; height: 8px; background-color:rgb(255, 255, 255);\" ><font size=\"2\"><input style=\"width: 80px;\" class=botao name=\"".$dados["NroFatura"]."\" value=\"Reimprimir\" type=\"button\" onclick=\"emitir(this.name,'{$vencbloq}');\"></font></td>"; echo $auxstr; echo "</tr>"; }
10/06/2015
Guilherme Silva
11/06/2015
Guilherme Silva
Fiz algumas mudanças no código e consegui parcialmente o que queria! Segue o código modificado abaixo:
<?php include "conn.php"; $sql = "SELECT * FROM [dbo].[V_RELOGIO_PONTO] ('CAFE')"; $stmt = sqlsrv_query( $conn, $sql ); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); } while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { $id = $row["CRACHA_1"]; $nome = $row["FUNCIONARIO"]; $setor = $row["SETOR"]; $cevento = $row["CODIGO_EVENTO"]; $evento = $row["NOME_EVENTO"]; $total = $row["TOTAL"]; echo $id; echo $nome; echo $setor; echo $cevento; echo $evento; echo $total."<br>"; } ?>
Está bem crú em tela, mas traz todos os registros de acordo com o que peço na função, se é CAFE, RCAFE, ALMOCO, JANTA, CEIA... Enfim..
Marcos, sabe me dizer se do jeito que fiz, se esse sqlsrv_query está ultrapassado?
Eu cansei de usar o PDO porque se mudava uma vírgula, mudava o retorno --' , seja string, contexto do banco, ou Array ( [0] => 01000 [1] => 5701 [2]... ai cada hora eu ficava procurando no google sobre algum erro, e só ficava dando voltas..
11/06/2015
Marcos P
Mas existem outros métodos de acesso a dados no Sql Server, via PHP... é questão de pesquisar.
11/06/2015
Guilherme Silva
Mas beleza, depois vou até testar usando o mssql_query igual você, pelo visto esse também traz os dados normalmente..
Marcos, muito obrigado pela ajuda! Primeira vez que pergunto em um fórum e foi de grande valia!
Pra quem tiver esse problema, mais um caso de "Resolvido"... Abraços!
11/06/2015
Marcos P
Se você puder continuar por aqui, participando... seria legal !
T+
Clique aqui para fazer login e interagir na Comunidade :)