<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>Oi Daniel,<BR>
<BR>
Comentários abaixo,<BR>
<BR>
> From: daniel@ruoso.com<BR>> Date: Thu, 3 May 2007 14:28:13 +0100<BR>> <BR>> Qui, 2007-05-03 às 15:53 +0300, Alceu Rodrigues de Freitas Junior<BR>> > Se você utilizar a funcionalidade conforme estava escrito<BR>> > originalmente, você não teria que executar a query. Bastava um<BR>> > prepare() e o ODBC já retornaria os dados sobre as colunas utilizadas<BR>> > na query, o que seria ideal em termos de performance (considerando se<BR>> > a query for muito lenta, por exemplo). Daria para fazer isso sem um<BR>> > execute() ?<BR>> <BR>> Na verdade isso é porque eu estava usando o mysql para testes. O mysql<BR>> só retorna esses dados depois do execute, já outros servidores pedem que<BR>> a consulta seja executada. A própria documentação do DBI fala isso:<BR>> Provavelmente se funciona no ODBC, vai funcionar sem ODBC também, não<BR>> 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>
<BR>
Criei uma tabela simples para fazer um teste:<BR>
<BR>
CREATE TABLE `filmes` (<BR> `id` int(10) unsigned NOT NULL auto_increment,<BR> `titulo` varchar(80) NOT NULL,<BR> `ano` int(4) unsigned NOT NULL,<BR> `diretor` varchar(80) NOT NULL,<BR> PRIMARY KEY (`id`)<BR>) ENGINE=InnoDB DEFAULT CHARSET=latin1;<BR>
<BR>
mysql> desc filmes;<BR>+---------+------------------+------+-----+---------+----------------+<BR>| Field | Type | Null | Key | Default | Extra |<BR>+---------+------------------+------+-----+---------+----------------+<BR>| id | int(10) unsigned | NO | PRI | NULL | auto_increment |<BR>| titulo | varchar(80) | NO | | | |<BR>| ano | int(4) unsigned | NO | | | |<BR>| diretor | varchar(80) | NO | | | |<BR>+---------+------------------+------+-----+---------+----------------+<BR>4 rows in set (0.02 sec)<BR>
<BR>
E rodei a seguinte query no aplicativo:<BR>
<BR>
select * from filmes<BR>
<BR>
Resultado:<BR>
<BR>
id INTEGER 10<BR>titulo VARCHAR 80<BR>ano INTEGER 4<BR>diretor VARCHAR 80<BR><BR>
Funcionou do mesmo jeito. Eu imagino então as seguintes possibilidades:<BR>
<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>
<BR>
Vou aplicar seu patch, modificá-lo para não fazer um execute() e testar de novo. Depois posto os resultados.<BR>
<BR>
[]'s<BR>
Alceu<BR>
<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>