<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>Oi Daniel,<BR>
&nbsp;<BR>
Comentários abaixo,<BR>
&nbsp;<BR>
&gt; From: daniel@ruoso.com<BR>&gt; Date: Thu, 3 May 2007 14:28:13 +0100<BR>&gt; <BR>&gt; Qui, 2007-05-03 às 15:53 +0300, Alceu Rodrigues de Freitas Junior<BR>&gt; &gt; Se você utilizar a funcionalidade conforme estava escrito<BR>&gt; &gt; originalmente, você não teria que executar a query. Bastava um<BR>&gt; &gt; prepare() e o ODBC já retornaria os dados sobre as colunas utilizadas<BR>&gt; &gt; na query, o que seria ideal em termos de performance (considerando se<BR>&gt; &gt; a query for muito lenta, por exemplo). Daria para fazer isso sem um<BR>&gt; &gt; execute() ?<BR>&gt; <BR>&gt; Na verdade isso é porque eu estava usando o mysql para testes. O mysql<BR>&gt; só retorna esses dados depois do execute, já outros servidores pedem que<BR>&gt; a consulta seja executada. A própria documentação do DBI fala isso:<BR>&gt; Provavelmente se funciona no ODBC, vai funcionar sem ODBC também, não<BR>&gt; depende do driver, mas sim do servidor...<BR><BR>
Eu resolvi fazer um teste antes de aplicar seu patch. Instalei o MySQL 5 para Windows (última versão) e o driver ODBC versão 3.51 também para Windows.<BR>
&nbsp;<BR>
Criei uma tabela simples para fazer um teste:<BR>
&nbsp;<BR>
CREATE TABLE `filmes` (<BR>&nbsp; `id` int(10) unsigned NOT NULL auto_increment,<BR>&nbsp; `titulo` varchar(80) NOT NULL,<BR>&nbsp; `ano` int(4) unsigned NOT NULL,<BR>&nbsp; `diretor` varchar(80) NOT NULL,<BR>&nbsp; PRIMARY KEY&nbsp; (`id`)<BR>) ENGINE=InnoDB DEFAULT CHARSET=latin1;<BR>
&nbsp;<BR>
mysql&gt; desc filmes;<BR>+---------+------------------+------+-----+---------+----------------+<BR>| Field&nbsp;&nbsp; | Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Null | Key | Default | Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+---------+------------------+------+-----+---------+----------------+<BR>| id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | int(10) unsigned | NO&nbsp;&nbsp; | PRI | NULL&nbsp;&nbsp;&nbsp; | auto_increment |<BR>| titulo&nbsp; | varchar(80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | NO&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>| ano&nbsp;&nbsp;&nbsp;&nbsp; | int(4) unsigned&nbsp; | NO&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>| diretor | varchar(80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | NO&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+---------+------------------+------+-----+---------+----------------+<BR>4 rows in set (0.02 sec)<BR>
&nbsp;<BR>
E rodei a seguinte query no aplicativo:<BR>
&nbsp;<BR>
select * from filmes<BR>
&nbsp;<BR>
Resultado:<BR>
&nbsp;<BR>
id&nbsp;INTEGER&nbsp;10<BR>titulo&nbsp;VARCHAR&nbsp;80<BR>ano&nbsp;INTEGER&nbsp;4<BR>diretor&nbsp;VARCHAR&nbsp;80<BR><BR>
Funcionou do mesmo jeito. Eu imagino então&nbsp;as&nbsp;seguintes possibilidades:<BR>
&nbsp;<BR>
1 - A versão que estou usando do MySQL fornece esse recurso sem execute() (qual sua versão do BD no Linux?).<BR>
2 - Apenas a implementação do ODBC para Windows fornece esse recurso.<BR>
3 - O ODBC está "roubando" e executando a query no final das contas. Como a tabela não tem dado nenhum, o tempo de retorno é rápido.<BR>
&nbsp;<BR>
Vou aplicar seu patch, modificá-lo para não fazer um execute()&nbsp;e testar de novo. Depois posto os resultados.<BR>
&nbsp;<BR>
[]'s<BR>
Alceu<BR>
&nbsp;<BR><br /><hr />Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! <a href='http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us' target='_new'>Try it!</a></body>
</html>