[Cascavel-pm] MVC e WxPerl
Daniel Ruoso
daniel em ruoso.com
Quarta Maio 2 15:48:16 PDT 2007
Qua, 2007-05-02 às 22:46 +0300, Alceu Rodrigues de Freitas Junior
escreveu:
> Ahn... eu acho que eu já uso DBI. Veja o módulo QueryParser::DAO.
> Como eu não testei isso em Linux, por exemplo, eu não descartaria um
> bug apesar de que deveria ser a mesma coisa para os dois sistemas.
> Teoricamente ODBC deveria funcionar da mesma maneira.
Não, ODBC é um Driver que é específico de Windows, você está usando o
DBI sobre ODBC, o que é provavelmente desnecessário. Mesmo em Windows
você pode usar os diretamente DBI -> DBD -> SERVER, ao invés de usar DBI
-> ODBC -> DBD -> SERVER. O DBI já faz o papel que o ODBC faria.
De qualquer forma, o código tinha algumas coisas específicas de ODBC que
não precisariam ser específicas de ODBC. Segue um patch que corrige
isso, com a diferença que o teu arquivo INI tem que dizer o DSN do DBI e
não do ODBC, o que basicamente significa que tem que incluir o
'dbi:ODBC:' no arquivo de configuração, e não amarrado em código.
E repito, todas as funcionalidades que você estava obtendo utilizando
uma função específica do driver poderiam ser obtidas diretamente
utilizando o DBI. Então aí vai o patch
<PATCH>
--- QueryParser/DAO.pm~ 2007-04-03 20:19:38.000000000 +0100
+++ QueryParser/DAO.pm 2007-05-02 23:43:26.000000000 +0100
@@ -60,7 +60,7 @@
my $self = shift;
- my $conn_string = 'dbi:ODBC:' . $self->get_DSN();
+ my $conn_string = $self->get_DSN();
$self->disconnect();
@@ -102,23 +102,25 @@
my $sth = $self->get_dbh()->prepare($query)
or croak "Cannot parse the query: $DBI::errstr";
+ $sth->execute();
my $total_fields = $sth->{NUM_OF_FIELDS};
my @properties;
- for ( my $i = 1 ; $i <= $total_fields ; $i++ ) {
+ my $_names = $sth->{NAME};
+ my $_types = $sth->{TYPE};
+ my $_sizes = $sth->{PRECISION};
+
+ for ( my $i = 0 ; $i < $total_fields ; $i++ ) {
# DescribeCol is an ODBC function to get a description
# of a column that is part of a executed query
- my @column_info = $sth->func( $i, 'DescribeCol' );
push(
@properties,
[
- (
- $column_info[0],
- $self->get_sql_types()->{ $column_info[1] },
- $column_info[2]
- )
+ $_names->[$i],
+ $self->get_sql_types()->{$_types->[$i]},
+ $_sizes->[$i]
]
);
</PATCH>
Mais detalhes sobre a lista de discussão Cascavel-pm