Ir para conteúdo

POWERED BY:

Arquivado

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

PaladinoMedieval

erro de collation

Recommended Posts

Bom Dia Pessoal!

 

estive pesquisando no forum a respeito dessa mensagem de erro:

 

Warning: mssql_query() [function.mssql-query]: message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in /var/www/intranet/relatorios/pesq_rel_fat.php on line 30

Eu encontrei dois links tratando o assunto, porem após ter tentado solucionar o erro com estes links o erro persiste..

 

E o pior é que sou novo na empresa.. aki temos um sistema usado para gerenciar alguns processos.. antes de mim havia um programador que conhecia esse sistema e tinha acesso ao banco de dados.. porem no meu caso ja nao tenho mais o acesso :unsure:

 

o erro está indicado na linha 30, vou postar:

 

<?php
include "conecta.inc.php";
include "valida.php";	

if($valida){
include "conecta_mssql.php";

$dia1 = $_POST['dia1'];$mes1 = $_POST['mes1'];$ano1 = $_POST['ano1'];
$dia2 = $_POST['dia2'];$mes2 = $_POST['mes2'];$ano2 = $_POST['ano2'];
$dataini = $ano1."-".$mes1."-".$dia1;
$datafim = $ano2."-".$mes2."-".$dia2;

//------------------------------------------------------------------------------------------------
function converteData($data_sqlserver)
{
if ($data_sqlserver == "")
return "";

$dtTimeStamp = strtotime($data_sqlserver);
$dataConvertida = date('d/m/Y', $dtTimeStamp);

return $dataConvertida;
}
//------------------------------------------------------------------------------------------------
	
//FATURAMENTO DE VENDAS   
$pesquisaA = mssql_query("SELECT distinct T0.DocDate, T0.Serial, T0.NumAtCard, T0.DocTotal, 
T0.U_Tppagto, T0.cardcode, T0.cardname, T0.JrnlMemo, T0.ObjType 
FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
WHERE T0.DocDate >= '$dataini' and T0.DocDate <= '$datafim' ORDER BY T0.DocDate asc"); //linha 30

while ($res_pesqA = mssql_fetch_array($pesquisaA))
	{
		$totalA = $totalA + $res_pesqA[3];
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta esse fí

 

=)

 

<?php
include "conecta.inc.php";
include "valida.php";   

if($valida){
include "conecta_mssql.php";

$dia1 = $_POST['dia1'];
$mes1 = $_POST['mes1'];
$ano1 = $_POST['ano1'];

$dia2 = $_POST['dia2'];
$mes2 = $_POST['mes2'];
$ano2 = $_POST['ano2'];

$dataini = $dia1."/".$mes1."/".$ano1;
$datafim = $dia2."/".$mes2."/".$ano2;

//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
        
//FATURAMENTO DE VENDAS   
$pesquisaA = mssql_query("SELECT distinct T0.DocDate, T0.Serial, T0.NumAtCard, T0.DocTotal, T0.U_Tppagto, T0.cardcode, T0.cardname, T0.JrnlMemo, T0.ObjType 
						FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry WHERE T0.DocDate >= convert(datetime,'$dataini',103) and T0.DocDate <= convert(datetime,'$datafim' ,103) ORDER BY T0.DocDate asc"); //linha 30

while ($res_pesqA = mssql_fetch_array($pesquisaA))
        {
                $totalA = $totalA + $res_pesqA[3];
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não.. infelizmente ele continua apresentando o mesmo erro =/

 

mas oq você fez ?

 

percebi que você removeu a função de data, mas ela nao estava nem sendo usada neste caso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu retirei a função

Ordenei a data por DIA/MES/ANO

 

Como você ta digitando esses dados no formulário ?

Tem que ser assim: 11/11/2009 < Neste Formato.

 

E no select eu coloquei o CONVERT(DATETIME,DATA,103), o SQL converte para o DateTime, quando vem como String.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aahhh sim =D

 

você tem razao no formulario tem que ser neste formato, e ele esta neste formato .. faltava ser ordenada a data assim como você fez .. porem axo q o erro nao deve estar ai.. continua o problema =/

 

Já usou CAST alguma vez ? eu estava tentando aplicar isso mas acredito que nao fiz da forma correta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jah simm

CAST(DATA AS DATETIME)
Mas nesse caso eh melhor DateTime.

 

Soh uma pergunta

Que Banco de dados você usa ?

 

SQL Server

ou MySQL ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Localizei o erro !!!!!

 

//FATURAMENTO DE VENDAS

$pesquisaA = mssql_query("SELECT distinct T0.DocDate, T0.Serial, T0.NumAtCard, T0.DocTotal,

T0.U_Tppagto, T0.cardcode, T0.cardname, T0.JrnlMemo, T0.ObjType

FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry

WHERE T0.DocDate >= '$dataini' and T0.DocDate <= '$datafim' ORDER BY T0.DocDate asc");

No campo "T0.U_Tppagto" tem algo errado

 

eu removi dai ele funcionou !!! ... o problema é que obviamente o campo T0.U_Tppagto por ter sido removido do SELECT vai ficar com valor vazio =/

 

Mas 90 % do problema foi sanado !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara. se o banco é mysql

acho que esta errado o codigo mesmo

 

$pesquisaA = mssql_query("SELECT distinct T0.DocDate, T0.Serial, T0.NumAtCard, T0.DocTotal,

T0.U_Tppagto, T0.cardcode, T0.cardname, T0.JrnlMemo, T0.ObjType

FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry

WHERE T0.DocDate >= '$dataini' and T0.DocDate <= '$datafim' ORDER BY T0.DocDate asc");

 

não sei se existe do jeito que você fez, tente substituir por mysql_query

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente

 

se eh o banco eh MySQL

 

nao se usa MSSQL_QUERY, usa-se MySQL_Query

 

=)

 

Provavelmente tudo seja resolvido.

 

Imaginei que fosse isso, por isso que perguntei qual banco você usa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe-me o engano..

 

eu uso o mysql para criação interna aki na empresa.. mas o sistema SAP que usamos esta com banco sqlserver, entao nos relatorios feitos em php para buscar informações do banco do SAP é preciso usar mssql_query do sqlserver..

 

mas voltando ao outro problema Qd removo o campo T0.U_Tppagto a mensagem de erro abaixo nao aparece.. e ai funciona

 

Warning: mssql_query() [function.mssql-query]: message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in /var/www/intranet/relatorios/pesq_rel_fat.php on line 30

mas o campo T0.U_Tppagto no relatorio fica vazio

 

Teria como fazer alguma formatação neste campo ? .. eu nao entendo esse problema de ntext

 

por exemplo alguma coisa do tipo CAST(T0.U_Tppagto AS TEXT)

 

nao sei a sintexe correta para aplicar esse comando.. deu erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim:

 

$sql = "SELECT distinct T0.DocDate, T0.Serial, T0.NumAtCard, T0.DocTotal, T0.U_Tppagto, T0.cardcode, T0.cardname, T0.JrnlMemo, T0.ObjType 
FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry WHERE T0.DocDate >= convert(datetime,'$dataini',103) and T0.DocDate <= convert(datetime,'$datafim' ,103) ORDER BY T0.DocDate asc";

echo $sql;

veja o que retorna e coloca no banco, executa essa query e veja se da o mesmo erro.

Verifique se o nome do campo esta correto.

 

depois faça esses e veja o que retorna

select U-Tppgto from OINV
select cast(U-Tppgto as ntext) as U-Tppgto from OINV

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.