Problemas con PHP, ADOdb y Access

Buenas, estoy usando PHP con la extension ADOdb para atacar a una base de datos access.

actualmente me va de fabula, a pesar de que considero que las bases de datos MDB/Access son de juguete, para pequeñas cosas suelo usarlas, sobre todo en el entorno laboral.

el problema que tengo actualmente es que me veo en la imposibilidad de hacer una consulta SQL con una clausula WHERE que tenga una fecha. pasteo codigo:

conexion a la BBDD:
include('adodb/adodb.inc.php');

$db =& ADONewConnection('access');
$db->debug = true;
$dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=e:\\AlmaEast\\AlmaArte.mdb;Uid=Admin;Pwd=;";
$db->Connect($dsn);



consulta SQL que da error
$sql='SELECT DISTINCTROW Sum(Bultos*Peso) FROM Movimientos WHERE ((Fecha)<=#'.$beforedesdesql.'#);';
$rs = $db->Execute($sql);


la variable $beforedesdesql es una cadena con el contenido "09/23/2007", por el formato clasico de consultas de fecha access, del tipo mes-dia-año

y aqui el error que escupe la web en cuanto ejecuto el script.
(access): SELECT DISTINCTROW Sum(Bultos*Peso) FROM Movimientos WHERE ((Fecha)<=#09/23/2007#);
Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1., SQL state 07001 in SQLExecDirect in C:\xampp\php\pear\adodb\drivers\adodb-odbc.inc.php on line 530
07001: [Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.

ADOConnection._Execute(SELECT DISTINCTROW Sum(Bultos*Peso) FROM Movimientos WHERE ((Fecha)<=#09/23/2007#);, false) % line 861, file: adodb.inc.php
ADOConnection.Execute(SELECT DISTINCTROW Sum(Bultos*Peso) FROM Movimientos WHERE ((Fecha)<=#09/23/2007#);) % line 134, file: facturacion.php


estoy mareado y no se como hacer un select con fechas usando ADODB, siempre me sale error.

¿una ayudita?
No se si esto te funcionará, la verdad que no lo he probado y esto del php no es lo mío, pero creo que es una opción razonable.

include('adodb/adodb.inc.php');

$db =& ADONewConnection('access');
$db->debug = true;
$dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=e:\\AlmaEast\\AlmaArte.mdb;Uid=Admin;Pwd=;";
$db->Connect($dsn);

$sql='SELECT DISTINCTROW Sum(Bultos*Peso) FROM Movimientos WHERE ((Fecha)<=pFecha);';

$cmd = new COM("ADODB.Command", NULL, CP_UTF8);
$cmd->CommandText = $sql;
$cmd->CommandType = 1;

El Commandtype 1 significa que es una sentencia sql
$cmd->ActiveConnection = $db;
$par=$cmd->Parameters;
$par->Append($cmd->CreateParameter("@pFecha",3,1,9,$beforedesdesql));

$rs=$cmd->Execute;


Ya me contarás si te funciona
Un Saludo!
gracias raticus, lo probare en cuanto pueda... te hare saber si me fue bien.
Ok! [oki]

Ya pensé que no responderías :-P
saludos de nuevo ratikus.

lamentablemente la solucion que me propusiste no me funciona, me da un error en objetos COM de servidor.

y ahora viene lo mas curioso: como ultimo cartucho a gastar, y ya sin ideas, converti la base de datos AccessXP a Access97, y ahora el script original me funciona sin tocarle ni una coma. curiosidades del mundo microsoft.

De todas formas, ya he aprendido la leccion, la proxima vez que necesite una base de datos, usare una base de datos de verdad, como Mysql, PostgreSQL o porque no, oracle o MSSQL (MSDE tambien es una alternativa)
He encontrado este tema por Google buscando la forma de que ADODB me muestre en pantalla el tiempo de uso de las consultas del MySQL.

Y mira por donde sé el porqué de tu error ;).

La librería ADODB incluye una función para asociar las horas o fechas con las distintas bases de datos que haya. Tu error consiste en ESO. En el manual oficial de ADODB verás en uno de sus ejemplo para el paso de MySQL a ADODB que se usa esa función (lo siento compañero, pero no me acuerdo de cómo se llama la función, y eso que la he usado hace muy poco).

Suerte. Envíame un MP si necesitas ayuda con eso ;).
5 respuestas